Deserialize JSON Config With Serde
Derive Deserialize to load a configuration from JSON with defaults, rejecting unknown fields so typos in the config surface immediately.
Code
use serde::Deserialize;
#[derive(Debug, Deserialize)]
#[serde(deny_unknown_fields)]
struct ServerConfig {
port: u16,
#[serde(default = "default_workers")]
workers: usize,
host: String,
}
fn default_workers() -> usize {
4
}
fn load(source: &str) -> Result<ServerConfig, serde_json::Error> {
serde_json::from_str(source)
}
fn main() {
let json = r#"{"port": 8080, "host": "0.0.0.0"}"#;
match load(json) {
Ok(config) => println!("{config:?}"),
Err(error) => eprintln!("invalid config: {error}"),
}
}Report a problem with this exampleOpens a pre-filled issue on GitHub.