use jsonptr::Pointer;
use std::env;
use std::fs::File;
use std::path::PathBuf;
use typify::{TypeSpace, TypeSpaceSettings};
fn main() -> std::io::Result<()> {
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
let mut parsed_content: serde_json::Value =
serde_json::from_reader(File::open("./endpoint_manifest_schema.json").unwrap()).unwrap();
Pointer::from_static(
"/properties/services/items/properties/handlers/items/properties/input/default",
)
.delete(&mut parsed_content);
Pointer::from_static(
"/properties/services/items/properties/handlers/items/properties/input/examples",
)
.delete(&mut parsed_content);
Pointer::from_static(
"/properties/services/items/properties/handlers/items/properties/output/default",
)
.delete(&mut parsed_content);
Pointer::from_static(
"/properties/services/items/properties/handlers/items/properties/output/examples",
)
.delete(&mut parsed_content);
let mut type_space =
TypeSpace::new(TypeSpaceSettings::default().with_derive("Clone".to_owned()));
type_space
.add_root_schema(serde_json::from_value(parsed_content).unwrap())
.unwrap();
let contents = format!(
"{}\n{}",
"use serde::{Deserialize, Serialize};",
prettyplease::unparse(&syn::parse2::<syn::File>(type_space.to_stream()).unwrap())
);
std::fs::write(out_dir.join("endpoint_manifest.rs"), contents)
}