#![cfg_attr(coverage_nightly, coverage(off))]
use super::QualityRequirements;
use serde_json::Value as JsonValue;
pub struct ManifestManager {
manifests: Vec<AgentManifest>,
}
#[derive(Debug, Clone)]
pub struct AgentManifest {
pub name: String,
pub version: String,
pub capabilities: Vec<Capability>,
pub supported_protocols: Vec<Protocol>,
pub quality_requirements: QualityRequirements,
}
#[derive(Debug, Clone)]
pub struct Capability {
pub name: String,
pub description: String,
pub input_schema: JsonValue,
pub output_schema: JsonValue,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Protocol {
AgentsMd,
Mcp,
Http,
WebSocket,
}
impl Default for ManifestManager {
fn default() -> Self {
Self::new()
}
}
impl ManifestManager {
#[must_use]
pub fn new() -> Self {
Self {
manifests: Vec::new(),
}
}
pub fn register(&mut self, manifest: AgentManifest) {
self.manifests.push(manifest);
}
#[must_use]
pub fn get_manifests(&self) -> &[AgentManifest] {
&self.manifests
}
#[must_use]
pub fn find_by_name(&self, name: &str) -> Option<&AgentManifest> {
self.manifests.iter().find(|m| m.name == name)
}
}
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod tests {
use super::*;
#[allow(unused_imports)]
use serde_json::json;
#[test]
fn test_manifest_manager() {
let mut manager = ManifestManager::new();
let manifest = AgentManifest {
name: "test_agent".to_string(),
version: "1.0.0".to_string(),
capabilities: vec![],
supported_protocols: vec![Protocol::AgentsMd],
quality_requirements: QualityRequirements::default(),
};
manager.register(manifest);
assert_eq!(manager.get_manifests().len(), 1);
assert!(manager.find_by_name("test_agent").is_some());
}
}