use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Agent {
pub agent_id: String,
pub agent_name: String,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AgentProfile {
pub agent_id: String,
pub agent_name: String,
#[serde(default)]
pub capabilities: Vec<String>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Reputation {
pub agent_id: String,
pub score: f64,
pub updated_at: DateTime<Utc>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_agent_deserialize() {
let json = r#"{
"agentId": "agent-123",
"agentName": "Test Agent",
"createdAt": "2024-01-15T10:30:00Z"
}"#;
let agent: Agent = serde_json::from_str(json).expect("Should deserialize");
assert_eq!(agent.agent_id, "agent-123");
assert_eq!(agent.agent_name, "Test Agent");
}
#[test]
fn test_reputation_score_range() {
let json = r#"{
"agentId": "agent-123",
"score": 0.85,
"updatedAt": "2024-01-15T10:30:00Z"
}"#;
let rep: Reputation = serde_json::from_str(json).expect("Should deserialize");
assert!((0.0..=1.0).contains(&rep.score));
}
}