pub struct DaemonId { /* private fields */ }Expand description
Identity of a running daemon: an optional operator-supplied machine id paired with a per-process time-ordered UUIDv7.
The machine id (typically a hostname) makes the Display
form human-readable and lets the coordinator route by machine, while the UUID
keeps the id unique even when two daemons share a machine id (or none is set).
The Display form is "{machine_id}-{uuid}", or a bare "{uuid}" when there
is no machine id; from_display_str is its inverse.
Implementations§
Source§impl DaemonId
impl DaemonId
Sourcepub fn new(machine_id: Option<String>) -> Self
pub fn new(machine_id: Option<String>) -> Self
Create a fresh daemon id for the given machine, assigning a new
time-ordered UUIDv7. Pass None when no machine id is configured.
Sourcepub fn matches_machine_id(&self, machine_id: &str) -> bool
pub fn matches_machine_id(&self, machine_id: &str) -> bool
Whether this daemon was created with exactly the given machine id.
Always false for a daemon created without a machine id.
Sourcepub fn machine_id(&self) -> Option<&str>
pub fn machine_id(&self) -> Option<&str>
The machine id this daemon was created with, or None if none was set.
Sourcepub fn from_display_str(s: &str) -> Option<Self>
pub fn from_display_str(s: &str) -> Option<Self>
Reverse of Display: parse "{machine_id}-{uuid}", or a bare
"{uuid}" when there is no machine id.
Both the machine id (hostnames) and the canonical UUID contain -, so
splitting on a hyphen drops or corrupts a hyphenated machine id. Split
off the fixed-width 36-char canonical UUID suffix instead
(dora-rs/dora#2027).
Expects exact Display output (no surrounding whitespace). The
machine-id path requires the canonical 36-char UUID suffix that
Display emits; the bare path accepts any form Uuid::parse_str
recognizes (canonical / simple / urn / braced).
use dora_message::common::DaemonId;
// A hyphenated machine id round-trips through `Display` (dora-rs/dora#2027)...
let id = DaemonId::new(Some("my-host".to_string()));
assert_eq!(DaemonId::from_display_str(&id.to_string()), Some(id.clone()));
assert_eq!(id.machine_id(), Some("my-host"));
assert!(id.matches_machine_id("my-host"));
// ...as does a daemon with no machine id (a bare UUID).
let anon = DaemonId::new(None);
assert_eq!(DaemonId::from_display_str(&anon.to_string()), Some(anon.clone()));
assert_eq!(anon.machine_id(), None);
// Garbage does not parse to a bogus id.
assert_eq!(DaemonId::from_display_str("not-a-daemon-id"), None);Trait Implementations§
Source§impl<'de> Deserialize<'de> for DaemonId
impl<'de> Deserialize<'de> for DaemonId
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for DaemonId
Source§impl Ord for DaemonId
impl Ord for DaemonId
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
1.21.0 (const: unstable) · Source§fn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialOrd for DaemonId
impl PartialOrd for DaemonId
impl StructuralPartialEq for DaemonId
Auto Trait Implementations§
impl Freeze for DaemonId
impl RefUnwindSafe for DaemonId
impl Send for DaemonId
impl Sync for DaemonId
impl Unpin for DaemonId
impl UnsafeUnpin for DaemonId
impl UnwindSafe for DaemonId
Blanket Implementations§
impl<T> Allocation for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more