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}