| Crates.io | typestate-enum |
| lib.rs | typestate-enum |
| version | 0.0.1 |
| created_at | 2023-11-05 10:43:56.526111+00 |
| updated_at | 2023-11-05 10:43:56.526111+00 |
| description | A macro to help build simple Typestate APIs. |
| homepage | |
| repository | https://github.com/gwllx/typestate-enum |
| max_upload_size | |
| id | 1025863 |
| size | 5,339 |
A Rust macro to help build simple Typestate APIs.
The following example defines a trait State and 3 zero-sized types which
implement it: Ready, Working, and Complete. The types can then be
used to build simple Typestate APIs.
use typestate_enum::typestate_enum;
use std::marker::PhantomData;
typestate_enum! {
pub State {
Ready,
Working,
Complete
}
}
struct Action<S: State>(PhantomData<S>);
impl<S: State> Action<S> {
fn new() -> Self {
Action::<S>(PhantomData)
}
}
impl Action<Ready> {
fn start_work(self) -> Action<Working> {
Action::new()
}
}
impl Action<Working> {
fn complete_work(self) -> Action<Complete> {
Action::new()
}
}