it wooorks
This commit is contained in:
45
pocs/json_schema/src/main.rs
Normal file
45
pocs/json_schema/src/main.rs
Normal file
@@ -0,0 +1,45 @@
|
||||
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<String, serde_json::Value> = HashMap::new();
|
||||
|
||||
defs.insert("actions".to_string(), actions_schema);
|
||||
base_schema["$defs"] = serde_json::to_value(defs)?;
|
||||
|
||||
let mut plugins: HashMap<String, serde_json::Value> = 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<serde_json::Value> {
|
||||
let mut refs = serde_json::Value::default();
|
||||
refs["$ref"] = serde_json::to_value(content)?;
|
||||
|
||||
Ok(refs)
|
||||
}
|
||||
|
||||
fn load_json(file_name: &str) -> anyhow::Result<serde_json::Value> {
|
||||
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)
|
||||
}
|
Reference in New Issue
Block a user