pub struct SubscribeNamespaceStateMachine {
state: SubscribeNamespaceState,
}Expand description
State machine for SUBSCRIBE_NAMESPACE flow. Idle -> Pending -> Active -> Done.
Fields§
§state: SubscribeNamespaceStateImplementations§
Source§impl SubscribeNamespaceStateMachine
impl SubscribeNamespaceStateMachine
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new machine in SubscribeNamespaceState::Idle.
Sourcepub fn state(&self) -> SubscribeNamespaceState
pub fn state(&self) -> SubscribeNamespaceState
Returns the current state of the subscribe-namespace flow.
Sourcepub fn on_subscribe_namespace_sent(&mut self) -> Result<(), NamespaceError>
pub fn on_subscribe_namespace_sent(&mut self) -> Result<(), NamespaceError>
Idle -> Pending.
Sourcepub fn on_subscribe_namespace_ok(&mut self) -> Result<(), NamespaceError>
pub fn on_subscribe_namespace_ok(&mut self) -> Result<(), NamespaceError>
Pending -> Active.
Sourcepub fn on_subscribe_namespace_error(&mut self) -> Result<(), NamespaceError>
pub fn on_subscribe_namespace_error(&mut self) -> Result<(), NamespaceError>
Pending -> Done.
Sourcepub fn on_request_cancelled(&mut self) -> Result<(), NamespaceError>
pub fn on_request_cancelled(&mut self) -> Result<(), NamespaceError>
Pending | Active -> Done, Done -> Done (this subscription’s stream was closed).
Draft-16 has no UNSUBSCRIBE_NAMESPACE. The subscription is withdrawn by ending the stream it was made on — Section 6.1: “A SUBSCRIBE_NAMESPACE can be cancelled by closing the stream with either a FIN or RESET_STREAM.” Either form is a withdrawal, so both arrive here.
Pending is accepted because the stream is open from the
SUBSCRIBE_NAMESPACE that opened it, and the sentence asks for nothing
more: a namespace subscription can be withdrawn before it is ever
answered.
Idle is refused, on the other half of the same sentence: nothing has
been written, so there is no stream to close. Done stays Done — a
subscription that has already ended is still carried on a stream, and
closing that stream afterwards is the ordinary end rather than a fault.
Sourcepub fn on_subscribe_namespace_received(&mut self) -> Result<(), NamespaceError>
pub fn on_subscribe_namespace_received(&mut self) -> Result<(), NamespaceError>
Idle -> Pending (the peer opened a stream with a SUBSCRIBE_NAMESPACE on it).
The mirror of on_subscribe_namespace_sent,
named for the direction it runs in rather than sharing that one: the
state edges coincide, so a mis-dispatch would succeed silently instead
of naming the wrong event in an InvalidTransition.
Sourcepub fn on_subscribe_namespace_ok_sent(&mut self) -> Result<(), NamespaceError>
pub fn on_subscribe_namespace_ok_sent(&mut self) -> Result<(), NamespaceError>
Pending -> Active (this endpoint answered the peer’s request with a REQUEST_OK).
Sourcepub fn on_subscribe_namespace_error_sent(
&mut self,
) -> Result<(), NamespaceError>
pub fn on_subscribe_namespace_error_sent( &mut self, ) -> Result<(), NamespaceError>
Pending -> Done (this endpoint refused the peer’s request).