use std::collections::HashMap; fn main() -> anyhow::Result<()> { println!("Hello, json_schemas!"); let mut base_schema: serde_json::Value = load_json("base.schema.json")?; let actions_schema: serde_json::Value = load_json("actions.schema.json")?; let mut defs: HashMap = HashMap::new(); defs.insert("actions".to_string(), actions_schema); base_schema["$defs"] = serde_json::to_value(defs)?; let mut plugins: HashMap = HashMap::new(); plugins.insert("ruddle/actions@1.0.0".into(), refs("#/$defs/actions")?); base_schema["properties"]["plugins"]["type"] = serde_json::to_value("object")?; base_schema["properties"]["plugins"]["properties"] = serde_json::to_value(plugins)?; base_schema["properties"]["plugins"]["additionalProperties"] = serde_json::to_value(false)?; let schema = std::fs::File::create("schema.json")?; let file_writer = std::io::BufWriter::new(schema); serde_json::to_writer(file_writer, &base_schema)?; Ok(()) } fn refs(content: &str) -> anyhow::Result { let mut refs = serde_json::Value::default(); refs["$ref"] = serde_json::to_value(content)?; Ok(refs) } fn load_json(file_name: &str) -> anyhow::Result { let file = std::fs::File::open(file_name)?; let file_reader = std::io::BufReader::new(file); let schema: serde_json::Value = serde_json::from_reader(file_reader)?; println!("printing schema: {}", file_name); println!("{:#?}", schema); Ok(schema) }