use crate::capability::Capability;
use crate::error::{Error, Result};
use crate::paths::metadata_path;
use crate::registry::service_def::AuthKind;
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Metadata {
pub registry: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub auth: Option<AuthKind>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub provides: Vec<Capability>,
}
pub fn load_metadata(service_name: &str) -> Result<Option<Metadata>> {
let path = metadata_path(service_name)?;
if !path.exists() {
return Ok(None);
}
let content = std::fs::read_to_string(&path).map_err(|source| Error::FileRead {
path: path.clone(),
source,
})?;
let meta: Metadata = toml::from_str(&content).map_err(|source| Error::TomlParse {
path: path.clone(),
source,
})?;
Ok(Some(meta))
}