pub type DiscriminatedState<Storage, T, Marker> = State<SDiscriminated<Storage>, T, StateUnionState<Marker>>;Expand description
Union-typed state that still remembers its concrete variant.
This is a type alias for State<SDiscriminated<Storage>, T, StateUnionState<Marker>>. The outer state marker is the union, so methods
can accept it as “any online state”. The storage wrapper remembers the
exact concrete member, so discriminate() can later recover the generated
enum:
ⓘ
let online: DiscriminatedState<SOwned, Connection, Online> =
<Connected as In<Online>>::into_discriminated(connected);
match online.discriminate() {
OnlineEnum::Connected(connected) => {
// `connected` is State<SOwned, Connection, Connected>.
}
OnlineEnum::Authenticated(authenticated) => {
// `authenticated` is State<SOwned, Connection, Authenticated>.
}
}Dynamic union transitions use the same discriminator internally. That is
why transition!(dyn Online self) can run different bodies for different
union members.
Aliased Type§
pub struct DiscriminatedState<Storage, T, Marker> { /* private fields */ }