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 on_subscribe_namespace_received(&mut self) -> Result<(), NamespaceError>
pub fn on_subscribe_namespace_received(&mut self) -> Result<(), NamespaceError>
Idle -> Pending (SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS received from the peer).
Sourcepub fn on_subscribe_namespace_ok_sent(&mut self) -> Result<(), NamespaceError>
pub fn on_subscribe_namespace_ok_sent(&mut self) -> Result<(), NamespaceError>
Pending -> Active (REQUEST_OK written on the peer’s stream).
Sourcepub fn on_subscribe_namespace_error_sent(
&mut self,
) -> Result<(), NamespaceError>
pub fn on_subscribe_namespace_error_sent( &mut self, ) -> Result<(), NamespaceError>
Pending -> Done (REQUEST_ERROR written on the peer’s stream).
Sourcepub fn on_namespace_sent(&mut self) -> Result<(), NamespaceError>
pub fn on_namespace_sent(&mut self) -> Result<(), NamespaceError>
Active -> Active (NAMESPACE written on the peer’s SUBSCRIBE_NAMESPACE stream).
Draft-20 Section 10.17 puts NAMESPACE “on the response stream of a SUBSCRIBE_NAMESPACE request”, and Section 10.19 has the publisher send them only once the request has been accepted — “If the SUBSCRIBE_NAMESPACE is successful, the publisher will send matching NAMESPACE messages on the response stream.” Requiring Active is what makes one written ahead of the REQUEST_OK an error rather than a frame on the wire.
Draft-17 has no such edge: its message table has no Stream column and nothing there moves NAMESPACE off the control stream.
Sourcepub fn on_namespace_done_sent(&mut self) -> Result<(), NamespaceError>
pub fn on_namespace_done_sent(&mut self) -> Result<(), NamespaceError>
Active -> Active (NAMESPACE_DONE written on the peer’s SUBSCRIBE_NAMESPACE stream).
Section 10.18: “All NAMESPACE_DONE messages are in response to a SUBSCRIBE_NAMESPACE”. The namespace subscription outlives it — Section 10.18 has the publisher go on sending NAMESPACE and NAMESPACE_DONE “when there are changes to the namespaces being published” — so this ends one namespace, not the request, and the state does not move.
Sourcepub fn on_publish_skipped_sent(&mut self) -> Result<(), NamespaceError>
pub fn on_publish_skipped_sent(&mut self) -> Result<(), NamespaceError>
Active -> Active (PUBLISH_SKIPPED written on the peer’s SUBSCRIBE_TRACKS stream).
Section 10.21: “All PUBLISH_SKIPPED messages are in response to a SUBSCRIBE_TRACKS”. One skipped track says nothing about the rest, so like the two above this is a self-transition on an accepted request.
Sourcefn require_active(&self, event: &str) -> Result<(), NamespaceError>
fn require_active(&self, event: &str) -> Result<(), NamespaceError>
The shared body of the three self-transitions above: accept the event when the request has been answered with REQUEST_OK, and name the event that was refused otherwise.
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 request’s stream was cancelled).
This draft has no UNSUBSCRIBE_NAMESPACE message. Section 3.3.3: “Once a request stream has been opened, the request MAY be cancelled by either endpoint.”
Idle is refused, on the other half of the same sentence: nothing has
been written, so there is no stream to terminate. Done stays Done —
nothing finishes a request stream’s send half on the ordinary path, so a
caller that walks away from a request that has already ended still
resets the stream, and that reset is an ordinary end rather than a
fault.