#![allow(unused_crate_dependencies)]
use std::collections::HashMap;
use derpscfg::{Error, prelude::*};
#[derive(Debug, Derpscfg)]
pub struct Model {
pub max_speed: String,
pub weight: String,
pub lines_served: Vec<String>,
}
#[derive(Debug, Derpscfg)]
pub struct Train {
#[scfg(param)]
pub name: String,
#[scfg(name = "model")]
pub models: HashMap<String, Model>,
}
#[derive(Debug, Derpscfg)]
pub struct ScfgDemo {
pub train: Train,
}
fn main() {
static SCFG_DOC: &str = r#"
train "Shinkansen" {
model "E5" {
max-speed 320km/h
weight 453.5t
lines-served "Tōhoku" "Hokkaido"
}
model "E7" {
max-speed 275km/h
weight 540t
lines-served "Hokuriku" "Jōetsu"
}
}
"#;
let demo = derpscfg::parse::<ScfgDemo>(SCFG_DOC);
match demo {
Ok(demo) => println!("{demo:?}"),
Err(Error::DuplicateKey(details)) => eprintln!("duplicate key: {details}"),
Err(e) => eprintln!("error: {e}"),
}
}