port-sdk 0.1.0

Rust SDK for Port APIs.
Documentation
use std::fs::File;
use std::io::{Read, Write};
use std::path::Path;

fn main() {
    let schema_path = Path::new("schemas/port.swagger.json");
    if !schema_path.exists() {
        panic!(
            "schema file {schema_path:?} is missing. Download the Port OpenAPI schema and place it at this path."
        );
    }

    let mut file = File::open(schema_path).expect("failed to open schema file");
    let mut contents = String::new();
    file.read_to_string(&mut contents).expect("failed to read schema file");

    let digest = sha256::digest(contents.as_bytes());

    let out_dir = std::env::var("OUT_DIR").expect("OUT_DIR not set");
    let mut output =
        File::create(Path::new(&out_dir).join("schema_meta.rs")).expect("failed to create output");
    writeln!(output, "pub const PORT_SCHEMA_SHA256: &str = \"{}\";", digest)
        .expect("failed to write output");
}

mod sha256 {
    use sha2::{Digest, Sha256};

    pub fn digest(data: &[u8]) -> String {
        let mut hasher = Sha256::new();
        hasher.update(data);
        let hash = hasher.finalize();
        hex::encode(hash)
    }
}