diff options
Diffstat (limited to 'crates/fidget-spinner-core/src/id.rs')
| -rw-r--r-- | crates/fidget-spinner-core/src/id.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/crates/fidget-spinner-core/src/id.rs b/crates/fidget-spinner-core/src/id.rs new file mode 100644 index 0000000..ea2cd5a --- /dev/null +++ b/crates/fidget-spinner-core/src/id.rs @@ -0,0 +1,46 @@ +use std::fmt::{self, Display, Formatter}; + +use serde::{Deserialize, Serialize}; +use uuid::Uuid; + +macro_rules! define_id { + ($name:ident) => { + #[derive( + Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize, + )] + #[serde(transparent)] + pub struct $name(Uuid); + + impl $name { + #[must_use] + pub fn fresh() -> Self { + Self(Uuid::now_v7()) + } + + #[must_use] + pub fn from_uuid(uuid: Uuid) -> Self { + Self(uuid) + } + + #[must_use] + pub fn as_uuid(self) -> Uuid { + self.0 + } + } + + impl Display for $name { + fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result { + Display::fmt(&self.0, formatter) + } + } + }; +} + +define_id!(AgentSessionId); +define_id!(AnnotationId); +define_id!(ArtifactId); +define_id!(CheckpointId); +define_id!(ExperimentId); +define_id!(FrontierId); +define_id!(NodeId); +define_id!(RunId); |