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.

RustConfig Management

Code

snippet
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}"),
    }
}