ferroid/generator/ulid/interface.rs
1use crate::{IdGenStatus, RandSource, Result, TimeSource, Ulid};
2
3/// A minimal interface for generating Ulid IDs
4pub trait UlidGenerator<ID, T, R>
5where
6 ID: Ulid,
7 T: TimeSource<ID::Ty>,
8 R: RandSource<ID::Ty>,
9{
10 // Creates a new generator
11 fn new(clock: T, rng: R) -> Self;
12
13 /// Returns the next available ID
14 fn next_id(&self) -> IdGenStatus<ID>;
15
16 /// A fallible version of [`Self::next_id`] that returns a [`Result`].
17 fn try_next_id(&self) -> Result<IdGenStatus<ID>>;
18}