mercur 0.1.6

mercur - junolang package manager
use serde::{Deserialize, Serialize};
use std::{io::Read, path::Path};
use tokio::{fs::File, io::AsyncReadExt};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NamespaceDefinition {
    pub schema: u32,
    pub metadata: NamespaceMetadata,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NamespaceMetadata {
    pub id: String,
    pub name: String,

    pub owners: Vec<String>,
}

fn parse_namespace_toml(input: &str) -> anyhow::Result<NamespaceDefinition> {
    toml::from_str(input).map_err(Into::into)
}

pub async fn parse_namespace_toml_files(
    files: Vec<&Path>,
) -> anyhow::Result<Vec<NamespaceDefinition>> {
    let mut r: Vec<NamespaceDefinition> = vec![];
    for f in files {
        let buf: &mut String = &mut String::new();
        File::open(f).await?.read_to_string(buf).await?;
        r.push(parse_namespace_toml(buf.as_str())?);
    }
    Ok(r)
}