pub struct ExecutionId(/* private fields */);Expand description
Identifier of a single durable execution.
Runtime-minted as a UUIDv7 (time-ordered) at execution start. It is never consumer-supplied
for a fresh execution — a resumed execution reuses the persisted value, but a new one always
calls ExecutionId::new.
§Examples
use zeph_durable::ExecutionId;
let a = ExecutionId::new();
let b = ExecutionId::new();
assert_ne!(a, b, "each execution gets a distinct identity");Implementations§
Source§impl ExecutionId
impl ExecutionId
Sourcepub fn parse_str(s: &str) -> Result<Self, Error>
pub fn parse_str(s: &str) -> Result<Self, Error>
Parse a canonical UUID string into an execution identity.
Used by operability surfaces (the zeph durable CLI, the TUI) that accept a user-supplied
execution id. A fresh execution always uses ExecutionId::new; this is for addressing an
existing one.
§Errors
Returns the underlying uuid::Error when s is not a valid UUID.
§Examples
use zeph_durable::ExecutionId;
let id = ExecutionId::new();
let parsed = ExecutionId::parse_str(&id.as_uuid().to_string()).unwrap();
assert_eq!(parsed, id);
assert!(ExecutionId::parse_str("not-a-uuid").is_err());Sourcepub fn derive(domain: &[u8], payload: &[u8]) -> Self
pub fn derive(domain: &[u8], payload: &[u8]) -> Self
Derive a deterministic execution identity from a domain tag and opaque payload bytes.
Produces a stable ExecutionId for a (domain, payload) pair using BLAKE3 in
derive_key mode. Two calls with identical inputs produce the same id; differing inputs
produce cryptographically distinct ids. Use this for exactly-once adapters that need to
reattach to an existing journal execution on restart (e.g. the scheduler fire adapter, which
derives the id from (job_name, slot_ms) so a crashed and restarted scheduler finds the
same row).
The domain string separates id spaces — choose a stable, globally-unique literal per
adapter (e.g. "zeph.scheduler.fire.v1"). The payload carries the distinguishing bytes
(e.g. little-endian slot timestamp).
§Examples
use zeph_durable::ExecutionId;
let a = ExecutionId::derive(b"zeph.test.v1", b"job_name\x00\x01\x00\x00\x00\x00\x00\x00\x00");
let b = ExecutionId::derive(b"zeph.test.v1", b"job_name\x00\x01\x00\x00\x00\x00\x00\x00\x00");
let c = ExecutionId::derive(b"zeph.test.v1", b"other_job\x00\x02\x00\x00\x00\x00\x00\x00\x00");
assert_eq!(a, b, "same domain+payload derives the same id");
assert_ne!(a, c, "different payload derives a different id");Trait Implementations§
Source§impl Clone for ExecutionId
impl Clone for ExecutionId
Source§fn clone(&self) -> ExecutionId
fn clone(&self) -> ExecutionId
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for ExecutionId
Source§impl Debug for ExecutionId
impl Debug for ExecutionId
Source§impl Default for ExecutionId
impl Default for ExecutionId
Source§impl<'de> Deserialize<'de> for ExecutionId
impl<'de> Deserialize<'de> for ExecutionId
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>,
Source§impl Display for ExecutionId
impl Display for ExecutionId
impl Eq for ExecutionId
Source§impl Hash for ExecutionId
impl Hash for ExecutionId
Source§impl PartialEq for ExecutionId
impl PartialEq for ExecutionId
Source§impl Serialize for ExecutionId
impl Serialize for ExecutionId
impl StructuralPartialEq for ExecutionId
Auto Trait Implementations§
impl Freeze for ExecutionId
impl RefUnwindSafe for ExecutionId
impl Send for ExecutionId
impl Sync for ExecutionId
impl Unpin for ExecutionId
impl UnsafeUnpin for ExecutionId
impl UnwindSafe for ExecutionId
Blanket Implementations§
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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§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> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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