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 async fn reset_persist<K>(&mut self, kv: K) -> Result<(), Error>where
K: KvBlobStoreAccess,
N: Networks,
pub async fn reset_persist<K>(&mut self, kv: K) -> Result<(), Error>where
K: KvBlobStoreAccess,
N: Networks,
Reset this state’s persisted contents to factory defaults - the
events-queue epoch and the network store - removing both from kv using
the scratch buffer provided by kv. Call once during a factory reset,
with exclusive (&mut) access (i.e. before the state is shared with a
InteractionModel).
Sourcepub async fn load_persist<K>(&mut self, kv: K) -> Result<(), Error>where
K: KvBlobStoreAccess,
N: Networks,
pub async fn load_persist<K>(&mut self, kv: K) -> Result<(), Error>where
K: KvBlobStoreAccess,
N: Networks,
Re-hydrate this state’s persisted contents - the events-queue epoch (so
event numbers are not reused across reboots) and the network store - using
the scratch buffer provided by kv. Call once at startup, before the
state is shared with a InteractionModel.
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