nostralink 0.2.4

Linked data library for nostr
Documentation
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");

    // The path to the directory containing the json-ld 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());

    // yaml-ld => json
    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(())
}