use std::env;
use std::fs;
use std::fs::File;
use std::io::Write;
use std::path::PathBuf;
use serde_yaml::{Mapping};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let out_dir = PathBuf::from(std::env::var("OUT_DIR")?)
.join("contexts-build");
let _ = std::fs::create_dir_all(out_dir.clone());
println!("cargo::rerun-if-changed=contexts");
let contexts_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("contexts")
.join("nostralink");
let output_dir = out_dir.join("nostralink");
let _ = std::fs::create_dir_all(output_dir.clone());
for entry in fs::read_dir(contexts_dir)? {
let entry = entry?;
let path = entry.path();
let file_type = entry.file_type()?;
if !file_type.is_file() {
continue;
}
if let Some(ext) = path.as_path().extension() {
match ext.to_str() {
Some("yaml-ld") => {
let mut dest = output_dir.join(
path.as_path().file_name().unwrap());
dest.set_extension("");
let data = fs::read_to_string(path.clone())?;
let mapping: Mapping = serde_yaml::from_str(data.as_str())?;
let mut of = File::create(dest.clone())?;
of.write_all(serde_json::to_string_pretty(&mapping)?.as_bytes())?;
}
Some("jsonld") => {
let dest = output_dir.join(
path.as_path().file_name().unwrap());
fs::copy(path.clone(), dest)?;
}
Some(_) | None => {
continue
}
}
} else {
let dest = output_dir.join(
path.as_path().file_name().unwrap());
fs::copy(path.clone(), dest)?;
}
}
Ok(())
}