use std::collections::HashMap;
use std::sync::RwLock;
#[derive(Debug, Clone)]
pub struct Team {
pub name: String,
pub agent_ids: Vec<String>,
pub created_at: chrono::DateTime<chrono::Utc>,
}
pub struct TeamManager {
teams: RwLock<HashMap<String, Team>>,
}
impl TeamManager {
pub fn new() -> Self {
Self {
teams: RwLock::new(HashMap::new()),
}
}
pub fn create_team(&self, name: String, agent_ids: Vec<String>) -> bool {
let mut teams = self.teams.write().expect("team manager lock poisoned");
if teams.contains_key(&name) {
return false;
}
teams.insert(
name.clone(),
Team {
name,
agent_ids,
created_at: chrono::Utc::now(),
},
);
true
}
pub fn delete_team(&self, name: &str) -> Option<Team> {
self.teams
.write()
.expect("team manager lock poisoned")
.remove(name)
}
pub fn get_agent_ids(&self, name: &str) -> Option<Vec<String>> {
self.teams
.read()
.expect("team manager lock poisoned")
.get(name)
.map(|t| t.agent_ids.clone())
}
pub fn list_teams(&self) -> Vec<(String, usize)> {
self.teams
.read()
.expect("team manager lock poisoned")
.values()
.map(|t| (t.name.clone(), t.agent_ids.len()))
.collect()
}
pub fn exists(&self, name: &str) -> bool {
self.teams
.read()
.expect("team manager lock poisoned")
.contains_key(name)
}
}
impl Default for TeamManager {
fn default() -> Self {
Self::new()
}
}