Skip to main content

DiscriminatedState

Type Alias DiscriminatedState 

Source
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 */ }