pub struct InteractionModelState<N, const NS: usize = rs_matter::::im::InteractionModelState::{constant#0}, const NE: usize = rs_matter::::im::InteractionModelState::{constant#1}> { /* private fields */ }Expand description
An ExchangeHandler implementation capable of handling responder exchanges for the Interaction Model protocol.
The mutable, owned-together state a InteractionModel operates on: the
subscriptions table, the events queue and the network store.
Allocating these as a single value (rather than three separate locals wired
up by hand at every call site) is the whole point: construct one
InteractionModelState, then hand a reference to it to InteractionModel::new. Each of
the three pieces keeps its own lock internally (the proven multi-lock model);
folding them behind a single mutex is a possible later refinement.
N is the (raw) Networks implementation — e.g.
EthNetwork or
WirelessNetworks; it is
wrapped internally in a SharedNetworks so the data model and (later) the
wireless manager can share it. NS/NE bound the subscription table and the
event-buffer size and default to DEFAULT_MAX_SUBSCRIPTIONS /
DEFAULT_MAX_EVENTS_BUF_SIZE.
Implementations§
Source§impl<N, const NS: usize, const NE: usize> InteractionModelState<N, NS, NE>
impl<N, const NS: usize, const NE: usize> InteractionModelState<N, NS, NE>
Sourcepub const fn new(networks: N) -> InteractionModelState<N, NS, NE>
pub const fn new(networks: N) -> InteractionModelState<N, NS, NE>
Create a new state instance backed by the given (raw) Networks store.
Sourcepub fn init(
networks: impl Init<N>,
) -> impl Init<InteractionModelState<N, NS, NE>>
pub fn init( networks: impl Init<N>, ) -> impl Init<InteractionModelState<N, NS, NE>>
Return an in-place initializer for the state (for large NE, to
avoid a big temporary on the stack).
Sourcepub fn suppress_start_up_event(&self)
pub fn suppress_start_up_event(&self)
Suppress the BasicInformation::StartUp event that
InteractionModel::run would otherwise emit when it first starts.
Call before run when starting the stack does not correspond to a
device boot - e.g. a warm restart of the Matter stack within a running
process, or a test fixture that needs a deterministic events queue.
Sourcepub const fn subscriptions(&self) -> &Subscriptions<NS>
pub const fn subscriptions(&self) -> &Subscriptions<NS>
The subscriptions table.
Sourcepub const fn networks(&self) -> &SharedNetworks<N>
pub const fn networks(&self) -> &SharedNetworks<N>
The network store (wrapped for shared, change-notifying access).
Auto Trait Implementations§
impl<N, const NS: usize = rs_matter::::im::InteractionModelState::{constant#0}, const NE: usize = rs_matter::::im::InteractionModelState::{constant#1}> !Freeze for InteractionModelState<N, NS, NE>
impl<N, const NS: usize = rs_matter::::im::InteractionModelState::{constant#0}, const NE: usize = rs_matter::::im::InteractionModelState::{constant#1}> !RefUnwindSafe for InteractionModelState<N, NS, NE>
impl<N, const NS: usize = rs_matter::::im::InteractionModelState::{constant#0}, const NE: usize = rs_matter::::im::InteractionModelState::{constant#1}> !Sync for InteractionModelState<N, NS, NE>
impl<N, const NS: usize, const NE: usize> Send for InteractionModelState<N, NS, NE>where
N: Send,
impl<N, const NS: usize, const NE: usize> Unpin for InteractionModelState<N, NS, NE>where
N: Unpin,
impl<N, const NS: usize, const NE: usize> UnsafeUnpin for InteractionModelState<N, NS, NE>where
N: UnsafeUnpin,
impl<N, const NS: usize, const NE: usize> UnwindSafe for InteractionModelState<N, NS, NE>where
N: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more