diff options
author | Lars Wirzenius <liw@liw.fi> | 2021-02-16 09:20:28 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2021-02-16 09:20:28 +0200 |
commit | fe680c3dbef579d41b2e32dc5b33dc01c3c23edd (patch) | |
tree | 6c071aaf8fe57b886c74294331f46d54221e0479 /src/bin/obnam-server.rs | |
parent | 627dbe11e861ece3b049789c435ef9e1ac7aa0af (diff) | |
download | obnam2-fe680c3dbef579d41b2e32dc5b33dc01c3c23edd.tar.gz |
refactor: move server config into src/server.rs
Diffstat (limited to 'src/bin/obnam-server.rs')
-rw-r--r-- | src/bin/obnam-server.rs | 50 |
1 files changed, 3 insertions, 47 deletions
diff --git a/src/bin/obnam-server.rs b/src/bin/obnam-server.rs index 0e9d4e6..d4513fa 100644 --- a/src/bin/obnam-server.rs +++ b/src/bin/obnam-server.rs @@ -4,11 +4,12 @@ use obnam::chunk::DataChunk; use obnam::chunkid::ChunkId; use obnam::chunkmeta::ChunkMeta; use obnam::indexedstore::IndexedStore; -use serde::{Deserialize, Serialize}; +use obnam::server::{Config, ConfigError}; +use serde::Serialize; use std::collections::HashMap; use std::default::Default; use std::net::{SocketAddr, ToSocketAddrs}; -use std::path::{Path, PathBuf}; +use std::path::PathBuf; use std::sync::Arc; use structopt::StructOpt; use tokio::sync::Mutex; @@ -82,51 +83,6 @@ async fn main() -> anyhow::Result<()> { Ok(()) } -#[derive(Debug, Deserialize, Clone)] -pub struct Config { - pub chunks: PathBuf, - pub address: String, - pub tls_key: PathBuf, - pub tls_cert: PathBuf, -} - -#[derive(Debug, thiserror::Error)] -enum ConfigError { - #[error("Directory for chunks {0} does not exist")] - ChunksDirNotFound(PathBuf), - - #[error("TLS certificate {0} does not exist")] - TlsCertNotFound(PathBuf), - - #[error("TLS key {0} does not exist")] - TlsKeyNotFound(PathBuf), - - #[error("server address can't be resolved")] - BadServerAddress, -} - -impl Config { - pub fn read_config(filename: &Path) -> anyhow::Result<Config> { - let config = std::fs::read_to_string(filename)?; - let config: Config = serde_yaml::from_str(&config)?; - config.check()?; - Ok(config) - } - - pub fn check(&self) -> anyhow::Result<()> { - if !self.chunks.exists() { - return Err(ConfigError::ChunksDirNotFound(self.chunks.clone()).into()); - } - if !self.tls_cert.exists() { - return Err(ConfigError::TlsCertNotFound(self.tls_cert.clone()).into()); - } - if !self.tls_key.exists() { - return Err(ConfigError::TlsKeyNotFound(self.tls_key.clone()).into()); - } - Ok(()) - } -} - pub async fn create_chunk( store: Arc<Mutex<IndexedStore>>, meta: String, |