Skip to content

Instantly share code, notes, and snippets.

@jac18281828
Created August 20, 2024 19:08
Show Gist options
  • Save jac18281828/32d879ca3cdcff68791047a33bae022e to your computer and use it in GitHub Desktop.
Save jac18281828/32d879ca3cdcff68791047a33bae022e to your computer and use it in GitHub Desktop.
config.json in rust
use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
pub struct Config {
#[serde(rename = "serverHost", default = "default_host")]
pub server_host: String,
#[serde(rename = "serverPort", default = "default_port")]
pub server_port: u16,
}
fn default_host() -> String {
"localhost".to_string()
}
fn default_port() -> u16 {
0
}
fn load_config() -> eyre::Result<Config> {
let config_path = std::env::var("CONFIG_PATH").unwrap_or_else(|_| "config.json".to_string());
let config = std::fs::read_to_string(config_path)?;
let config: Config = serde_json::from_str(&config)?;
tracing::info!("Loaded config: {:?}", config);
Ok(config)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_config_deserialization() {
let config = r#"{
"serverHost": "0.1.2.3"
}"#;
let config: Config = serde_json::from_str(config).unwrap();
assert_eq!(config.server_host, "0.1.2.3");
assert_eq!(config.server_port, 0);
}
#[test]
fn test_default_host() {
let config = r#"{
}"#;
let config: Config = serde_json::from_str(config).unwrap();
assert_eq!(config.server_host, "localhost");
}
#[test]
fn test_port() {
let config = r#"{
"serverHost": "0.0.0.0",
"serverPort": 1234
}"#;
let config: Config = serde_json::from_str(config).unwrap();
assert_eq!(config.server_port, 1234);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment