Lower StorageConfig to arti-client crate
This commit is contained in:
parent
a7f5b9aefe
commit
065d3dc104
|
@ -2,10 +2,11 @@
|
||||||
//!
|
//!
|
||||||
//! Some of these are re-exported from lower-level crates.
|
//! Some of these are re-exported from lower-level crates.
|
||||||
|
|
||||||
use crate::{Error, Result};
|
use crate::Error;
|
||||||
use derive_builder::Builder;
|
use derive_builder::Builder;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
use tor_config::CfgPath;
|
||||||
|
|
||||||
pub use tor_config::ConfigBuildError;
|
pub use tor_config::ConfigBuildError;
|
||||||
|
|
||||||
|
@ -51,6 +52,41 @@ impl Default for ClientAddrConfig {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Configuration for where information should be stored on disk.
|
||||||
|
///
|
||||||
|
/// This section is for read/write storage.
|
||||||
|
#[derive(Deserialize, Debug, Clone)]
|
||||||
|
#[serde(deny_unknown_fields)]
|
||||||
|
pub struct StorageConfig {
|
||||||
|
/// Location on disk for cached directory information
|
||||||
|
cache_dir: CfgPath,
|
||||||
|
/// Location on disk for less-sensitive persistent state information.
|
||||||
|
state_dir: CfgPath,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl StorageConfig {
|
||||||
|
/// Try to expand `state_dir` to be a path buffer.
|
||||||
|
// TODO(nickm): This won't be public once we're done.
|
||||||
|
pub fn expand_state_dir(&self) -> Result<PathBuf, ConfigBuildError> {
|
||||||
|
self.state_dir
|
||||||
|
.path()
|
||||||
|
.map_err(|e| ConfigBuildError::Invalid {
|
||||||
|
field: "state_dir".to_owned(),
|
||||||
|
problem: e.to_string(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/// Try to expand `cache_dir` to be a path buffer.
|
||||||
|
// TODO(nickm): This won't be public once we're done.
|
||||||
|
pub fn expand_cache_dir(&self) -> Result<PathBuf, ConfigBuildError> {
|
||||||
|
self.state_dir
|
||||||
|
.path()
|
||||||
|
.map_err(|e| ConfigBuildError::Invalid {
|
||||||
|
field: "cache_dir".to_owned(),
|
||||||
|
problem: e.to_string(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A configuration used to bootstrap a [`TorClient`](crate::TorClient).
|
/// A configuration used to bootstrap a [`TorClient`](crate::TorClient).
|
||||||
///
|
///
|
||||||
/// In order to connect to the Tor network, Arti needs to know a few
|
/// In order to connect to the Tor network, Arti needs to know a few
|
||||||
|
@ -104,7 +140,7 @@ impl TorClientConfig {
|
||||||
/// (On unix, this usually works out to `~/.local/share/arti` and
|
/// (On unix, this usually works out to `~/.local/share/arti` and
|
||||||
/// `~/.cache/arti`, depending on your environment. We use the
|
/// `~/.cache/arti`, depending on your environment. We use the
|
||||||
/// `directories` crate for reasonable defaults on other platforms.)
|
/// `directories` crate for reasonable defaults on other platforms.)
|
||||||
pub fn sane_defaults() -> Result<Self> {
|
pub fn sane_defaults() -> crate::Result<Self> {
|
||||||
// Note: this must stay in sync with project_dirs() in the
|
// Note: this must stay in sync with project_dirs() in the
|
||||||
// tor-config crate.
|
// tor-config crate.
|
||||||
let dirs =
|
let dirs =
|
||||||
|
@ -121,7 +157,7 @@ impl TorClientConfig {
|
||||||
/// Returns a `TorClientConfig` using the specified state and cache directories.
|
/// Returns a `TorClientConfig` using the specified state and cache directories.
|
||||||
///
|
///
|
||||||
/// All other configuration options are set to their defaults.
|
/// All other configuration options are set to their defaults.
|
||||||
pub fn with_directories<P, Q>(state_dir: P, cache_dir: Q) -> Result<Self>
|
pub fn with_directories<P, Q>(state_dir: P, cache_dir: Q) -> crate::Result<Self>
|
||||||
where
|
where
|
||||||
P: Into<PathBuf>,
|
P: Into<PathBuf>,
|
||||||
Q: Into<PathBuf>,
|
Q: Into<PathBuf>,
|
||||||
|
|
|
@ -42,7 +42,7 @@ mod cmdline;
|
||||||
mod options;
|
mod options;
|
||||||
|
|
||||||
pub use cmdline::CmdLine;
|
pub use cmdline::CmdLine;
|
||||||
pub use options::{ArtiConfig, LoggingConfig, ProxyConfig, StorageConfig};
|
pub use options::{ArtiConfig, LoggingConfig, ProxyConfig};
|
||||||
use tor_config::CfgPath;
|
use tor_config::CfgPath;
|
||||||
|
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
//! Handling for arti's configuration formats.
|
//! Handling for arti's configuration formats.
|
||||||
|
|
||||||
use crate::CfgPath;
|
|
||||||
use arti_client::config::{
|
use arti_client::config::{
|
||||||
circ::{CircMgrConfig, CircMgrConfigBuilder},
|
circ::{CircMgrConfig, CircMgrConfigBuilder},
|
||||||
dir::{DirMgrConfig, DirMgrConfigBuilder, DownloadScheduleConfig, NetworkConfig},
|
dir::{DirMgrConfig, DirMgrConfigBuilder, DownloadScheduleConfig, NetworkConfig},
|
||||||
ConfigBuildError, TorClientConfig,
|
StorageConfig, TorClientConfig,
|
||||||
};
|
};
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::path::PathBuf;
|
use tor_config::ConfigBuildError;
|
||||||
|
|
||||||
/// Default options to use for our configuration.
|
/// Default options to use for our configuration.
|
||||||
pub(crate) const ARTI_DEFAULTS: &str = concat!(include_str!("./arti_defaults.toml"),);
|
pub(crate) const ARTI_DEFAULTS: &str = concat!(include_str!("./arti_defaults.toml"),);
|
||||||
|
@ -94,39 +93,6 @@ pub struct ArtiConfig {
|
||||||
address_filter: arti_client::config::ClientAddrConfig,
|
address_filter: arti_client::config::ClientAddrConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Configuration for where information should be stored on disk.
|
|
||||||
///
|
|
||||||
/// This section is for read/write storage.
|
|
||||||
#[derive(Deserialize, Debug, Clone)]
|
|
||||||
#[serde(deny_unknown_fields)]
|
|
||||||
pub struct StorageConfig {
|
|
||||||
/// Location on disk for cached directory information
|
|
||||||
cache_dir: CfgPath,
|
|
||||||
/// Location on disk for less-sensitive persistent state information.
|
|
||||||
state_dir: CfgPath,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl StorageConfig {
|
|
||||||
/// Try to expand `state_dir` to be a path buffer.
|
|
||||||
fn expand_state_dir(&self) -> Result<PathBuf, ConfigBuildError> {
|
|
||||||
self.state_dir
|
|
||||||
.path()
|
|
||||||
.map_err(|e| ConfigBuildError::Invalid {
|
|
||||||
field: "state_dir".to_owned(),
|
|
||||||
problem: e.to_string(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
/// Try to expand `cache_dir` to be a path buffer.
|
|
||||||
fn expand_cache_dir(&self) -> Result<PathBuf, ConfigBuildError> {
|
|
||||||
self.state_dir
|
|
||||||
.path()
|
|
||||||
.map_err(|e| ConfigBuildError::Invalid {
|
|
||||||
field: "cache_dir".to_owned(),
|
|
||||||
problem: e.to_string(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ArtiConfig {
|
impl ArtiConfig {
|
||||||
/// Return a [`DirMgrConfig`] object based on the user's selected
|
/// Return a [`DirMgrConfig`] object based on the user's selected
|
||||||
/// configuration.
|
/// configuration.
|
||||||
|
|
Loading…
Reference in New Issue