#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct AgentId(String);
impl AgentId {
pub fn new(id: &str) -> Self {
Self(id.to_string())
}
pub fn as_str(&self) -> &str {
&self.0
}
pub fn is_valid(&self) -> bool {
!self.0.is_empty()
}
}
impl std::fmt::Display for AgentId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct SessionId(String);
impl SessionId {
pub fn new(id: &str) -> Self {
Self(id.to_string())
}
pub fn as_str(&self) -> &str {
&self.0
}
pub fn is_valid(&self) -> bool {
!self.0.is_empty()
}
}
impl std::fmt::Display for SessionId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct TaskId(String);
const AGENT_ID_PATTERN: &str = r"^a(?:.+-)?[0-9a-f]{16}$";
pub fn to_agent_id(s: &str) -> Option<String> {
let re = regex::Regex::new(AGENT_ID_PATTERN).ok()?;
if re.is_match(s) {
Some(s.to_string())
} else {
None
}
}
impl TaskId {
pub fn new(id: &str) -> Self {
Self(id.to_string())
}
pub fn as_str(&self) -> &str {
&self.0
}
pub fn is_valid(&self) -> bool {
!self.0.is_empty()
}
}
impl std::fmt::Display for TaskId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}