use std::fmt;
use crate::agent::AgentId;
use crate::mission::types::MissionId;
use crate::task::TaskId;
#[derive(Clone, Debug)]
pub struct RedisKeys {
town_name: String,
}
impl RedisKeys {
pub fn new(town_name: impl Into<String>) -> Self {
Self {
town_name: town_name.into(),
}
}
pub fn town_name(&self) -> &str {
&self.town_name
}
pub fn agent_state(&self, agent_id: AgentId) -> String {
format!("tt:{}:agent:{}", self.town_name, agent_id)
}
pub fn agent_inbox(&self, agent_id: AgentId) -> String {
format!("tt:{}:inbox:{}", self.town_name, agent_id)
}
pub fn agent_urgent(&self, agent_id: AgentId) -> String {
format!("tt:{}:urgent:{}", self.town_name, agent_id)
}
pub fn agent_activity(&self, agent_id: AgentId) -> String {
format!("tt:{}:activity:{}", self.town_name, agent_id)
}
pub fn agent_stop(&self, agent_id: AgentId) -> String {
format!("tt:{}:stop:{}", self.town_name, agent_id)
}
pub fn task(&self, task_id: TaskId) -> String {
format!("tt:{}:task:{}", self.town_name, task_id)
}
pub fn backlog(&self) -> String {
format!("tt:{}:backlog", self.town_name)
}
pub fn docket_tasks(&self) -> String {
format!("tt:{}:docket:tasks", self.town_name)
}
pub fn docket_events(&self) -> String {
format!("tt:{}:docket:events", self.town_name)
}
pub fn events(&self) -> String {
format!("tt:{}:events", self.town_name)
}
pub fn events_agent(&self, agent_id: AgentId) -> String {
format!("tt:{}:events:agent:{}", self.town_name, agent_id)
}
pub fn events_mission(&self, mission_id: MissionId) -> String {
format!("tt:{}:events:mission:{}", self.town_name, mission_id)
}
pub fn broadcast(&self) -> String {
format!("tt:{}:broadcast", self.town_name)
}
pub fn mission(&self, id: MissionId) -> String {
format!("tt:{}:mission:{}", self.town_name, id)
}
pub fn mission_work(&self, id: MissionId) -> String {
format!("tt:{}:mission:{}:work", self.town_name, id)
}
pub fn mission_watch(&self, id: MissionId) -> String {
format!("tt:{}:mission:{}:watch", self.town_name, id)
}
pub fn mission_events(&self, id: MissionId) -> String {
format!("tt:{}:mission:{}:events", self.town_name, id)
}
pub fn mission_control(&self, id: MissionId) -> String {
format!("tt:{}:mission:{}:control", self.town_name, id)
}
pub fn mission_dispatch_lock(&self, id: MissionId) -> String {
format!("tt:{}:mission:{}:dispatch_lock", self.town_name, id)
}
pub fn mission_active(&self) -> String {
format!("tt:{}:mission:active", self.town_name)
}
pub fn pattern_all(&self) -> String {
format!("tt:{}:*", self.town_name)
}
pub fn pattern_agents(&self) -> String {
format!("tt:{}:agent:*", self.town_name)
}
pub fn pattern_inboxes(&self) -> String {
format!("tt:{}:inbox:*", self.town_name)
}
pub fn pattern_stops(&self) -> String {
format!("tt:{}:stop:*", self.town_name)
}
pub fn pattern_activities(&self) -> String {
format!("tt:{}:activity:*", self.town_name)
}
pub fn pattern_urgents(&self) -> String {
format!("tt:{}:urgent:*", self.town_name)
}
pub fn pattern_tasks(&self) -> String {
format!("tt:{}:task:*", self.town_name)
}
pub fn pattern_missions(&self) -> String {
format!("tt:{}:mission:*", self.town_name)
}
}
impl fmt::Display for RedisKeys {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "RedisKeys({})", self.town_name)
}
}