declarative_type_state/
lib.rs1#![feature(try_trait_v2)]
2#![feature(type_changing_struct_update)]
3#![feature(macro_metavar_expr)]
4#![allow(clippy::tabs_in_doc_comments)]
5
6pub use transition_result::{
7 Transition,
8 Transition::{ChangedTo, Unchanged},
9};
10
11mod extract_variants_into_enum;
12mod newtype_table;
13mod type_state_enum;
14mod type_table;
15mod type_value_table;
16
17mod delegated_enum;
18mod extract_single_variant;
19mod extract_variants;
20
21mod enum_delegate_impls;
22mod enum_variants_convert;
23mod enum_variants_table;
24
25mod unit_enum_delegate_impls;
26mod unit_enum_delegated;
27mod unit_enum_variants_convert;
28
29mod transition_result;
30
31pub trait FromEnum<Enum>: Sized {
32 fn from_enum(t: Enum) -> Option<Self>;
33}
34
35impl<T> FromEnum<T> for T {
36 fn from_enum(t: T) -> Option<Self> { Some(t) }
37}
38
39pub trait FromEnumRef<Enum> {
40 fn from_enum_ref(t: &Enum) -> Option<&Self>;
41}
42
43impl<Enum, Variant> FromEnumRef<Enum> for Variant
44where for<'a> &'a Variant: FromEnum<&'a Enum>
45{
46 fn from_enum_ref(t: &Enum) -> Option<&Self> { <&Variant>::from_enum(t) }
47}
48
49pub trait FromEnumMut<Enum> {
50 fn from_enum_mut(t: &mut Enum) -> Option<&mut Self>;
51}
52
53impl<Enum, Variant> FromEnumMut<Enum> for Variant
54where for<'a> &'a mut Variant: FromEnum<&'a mut Enum>
55{
56 fn from_enum_mut(t: &mut Enum) -> Option<&mut Self> { <&mut Variant>::from_enum(t) }
57}
58
59#[doc(hidden)]
60pub use paste::paste;
61
62pub trait MemberOf<Table> {
63 type MemberType;
64 fn get_in_table(table: &Table) -> &Self::MemberType;
65 fn get_in_table_mut(table: &mut Table) -> &mut Self::MemberType;
66}