use std::{collections::HashMap, io::Read, path::Path};
use tokio::{fs::File, io::AsyncReadExt};
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize)]
pub struct PkgDefinition {
pub schema: u32,
pub metadata: PkgMetadata,
#[serde(rename = "version")]
pub versions: Vec<PkgVersion>,
}
#[derive(Debug, Deserialize)]
pub struct PkgMetadata {
pub name: String,
pub authority: String,
pub description: String,
#[serde(rename = "ref")]
pub reference: String,
}
#[derive(Debug, Deserialize)]
pub struct PkgVersion {
pub version: String,
pub hash: String,
pub date: String,
pub signature: String,
#[serde(rename = "dep")]
pub dependencies: HashMap<String, Dep>,
}
#[derive(Debug, Deserialize)]
pub struct Dep {
#[serde(rename = "ref")]
pub reference: String,
pub authority: String,
pub version: String,
pub hash: String,
pub targets: Vec<String>,
pub signature: String,
}
fn parse_pkg_toml(input: &str) -> PkgDefinition {
return toml::from_str(input).unwrap();
}
pub async fn parse_pkg_toml_files(files: Vec<&Path>) -> Vec<PkgDefinition> {
let mut r = vec![];
for f in files {
let buf: &mut String = &mut String::new();
File::open(f).await.unwrap().read_to_string(buf).await.unwrap();
r.push(parse_pkg_toml(buf.clone().as_str()));
}
return r;
}