use std::{net::SocketAddr, path::PathBuf};
use serde::{Deserialize, Serialize};
use zakura_chain::common::default_cache_dir;
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
#[serde(deny_unknown_fields, default)]
pub struct Config {
pub listen_addr: Option<SocketAddr>,
pub indexer_listen_addr: Option<SocketAddr>,
pub parallel_cpu_threads: usize,
pub debug_force_finished_sync: bool,
pub cookie_dir: PathBuf,
#[serde(default = "default_cookie_file_name")]
pub cookie_file_name: String,
pub enable_cookie_auth: bool,
pub max_response_body_size: usize,
pub tls: Option<TlsConfig>,
}
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct TlsConfig {
pub cert_file: PathBuf,
pub key_file: PathBuf,
}
#[allow(clippy::derivable_impls)]
impl Default for Config {
fn default() -> Self {
Self {
listen_addr: None,
indexer_listen_addr: None,
parallel_cpu_threads: 0,
debug_force_finished_sync: false,
cookie_dir: default_cache_dir(),
cookie_file_name: default_cookie_file_name(),
enable_cookie_auth: true,
max_response_body_size: 52_428_800,
tls: None,
}
}
}
fn default_cookie_file_name() -> String {
".cookie".to_string()
}
#[cfg(test)]
mod tests {
use super::Config;
#[test]
fn deserialize_defaults_cookie_file_name_when_missing() {
let config: Config = toml::from_str(
r#"
listen_addr = "127.0.0.1:8232"
"#,
)
.expect("partial rpc config should deserialize");
assert_eq!(
config.cookie_file_name,
super::default_cookie_file_name(),
"missing cookie file names should use the default value"
);
}
}