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<String>) -> 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);
