fn main() {
println!("cargo:rerun-if-changed=./assets/debugAdapterProtocol.json");
#[cfg(feature = "dap")]
generate_dap_schema();
}
#[cfg(feature = "dap")]
fn generate_dap_schema() {
use schemafy_lib::{
Expander,
Schema,
};
use std::{
env,
fs::{
self,
File,
},
io::prelude::*,
path::PathBuf,
};
let path = env::var("CARGO_MANIFEST_DIR")
.map(PathBuf::from)
.map(|p| p.join("assets/debugAdapterProtocol.json"))
.expect("Failed to fetch JSON schema");
let json = fs::read_to_string(&path).expect("Failed to parse JSON from schema");
let schema: Schema =
serde_json::from_str(&json).expect("Failed to parse Schema from JSON");
let root_name = schema.title.clone().unwrap_or_else(|| "Root".to_owned());
let path = path.into_os_string();
let path = path.into_string().expect("Failed to convert path");
let mut expander = Expander::new(Some(&root_name), path.as_str(), &schema);
let contents = expander.expand(&schema).to_string();
let schema = env::var("OUT_DIR")
.map(PathBuf::from)
.map(|mut f| {
f.set_file_name("schema");
f.set_extension("rs");
f
})
.expect("Failed to fetch schema path");
File::create(&schema)
.and_then(|mut f| {
f.write_all(contents.as_bytes())?;
f.sync_all()
})
.expect("Failed to create schema.rs file");
}