macro_rules! define_id { ($name:ident) => { #[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct $name(pub String); impl $name { pub fn new(value: impl Into) -> Self { Self(value.into()) } pub fn as_str(&self) -> &str { &self.0 } } }; } define_id!(WorkspaceId); define_id!(PageId); define_id!(BlockId); define_id!(AssetId); define_id!(AssetVersionId); define_id!(ReferenceId); define_id!(TaskId); define_id!(AgentSessionId); define_id!(CommandLogId); define_id!(EventId);