Skip to main content

StateMut

Struct StateMut 

Source
pub struct StateMut<G, T, S>
where G: DerefMut<Target = SharedValue<T>>,
{ /* private fields */ }
Expand description

Mutable typed view into shared state.

Transitions performed through this guard update an internal pending state. When the guard is dropped, that pending state is committed back to the shared container.

The returned guard is used through the generic State alias SMutView, so implementation methods can keep the same State<S, Self, Current> receiver shape they use for owned values:

{
    let connected = shared.borrow_mut::<Connected>()?;
    let authenticated = magicstatemachines::transition!(
        connected,
        "alice".to_owned(),
    );
    drop(authenticated); // shared state is now `Authenticated`
}

The commit happens when the final guard state is dropped. Constructing a transition call object is not a commit by itself.

Trait Implementations§

Source§

impl<G, T, S> Deref for StateMut<G, T, S>
where G: DerefMut<Target = SharedValue<T>>,

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<G, T, S> DerefMut for StateMut<G, T, S>
where G: DerefMut<Target = SharedValue<T>>,

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
Source§

impl<G, T, S> Drop for StateMut<G, T, S>
where G: DerefMut<Target = SharedValue<T>>,

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

§

impl<G, T, S> !RefUnwindSafe for StateMut<G, T, S>

§

impl<G, T, S> !Send for StateMut<G, T, S>

§

impl<G, T, S> !StateClone for StateMut<G, T, S>

§

impl<G, T, S> !StateCopy for StateMut<G, T, S>

§

impl<G, T, S> !Sync for StateMut<G, T, S>

§

impl<G, T, S> !UnwindSafe for StateMut<G, T, S>

§

impl<G, T, S> Freeze for StateMut<G, T, S>
where G: Freeze,

§

impl<G, T, S> Unpin for StateMut<G, T, S>
where G: Unpin,

§

impl<G, T, S> UnsafeUnpin for StateMut<G, T, S>
where G: UnsafeUnpin,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.