async_utils::hanging_get::server

Struct HangingGet

Source
pub struct HangingGet<S, O, F: Fn(&S, O) -> bool> { /* private fields */ }
Expand description

A broker of updates to some state, using the hanging get pattern.

The broker stores a state, and mediates state changes between Publishers and Subscribers. Any Publisher can change the state at any time. When the state is changed, all Subscribers are notified with the new state.

To follow the hanging get pattern, when a Subscriber is first created, the current state is sent immediately. Subsequent updates to the same subscriber are only sent when the state is modified.

§Type parameters

  • S: the type of the stored hanging get state. This is the state that gets communicated to subscribers.
  • O: The type of the object used to notify of state change.
  • F: The type of a function used to send the new state content to an instance of O. F gets passed the content of the new state, the object that it needs to notify, and is expected to return true if the notification was a success; otherwise it must return false.

Implementations§

Source§

impl<S, O, F> HangingGet<S, O, F>
where F: Fn(&S, O) -> bool,

Source

pub fn new(state: S, notify: F) -> Self

Create a new broker.

§Args:
  • state is the initial state of the HangingGet.
  • notify is a function to notify observers of state of the state change.
Source

pub fn new_unknown_state(notify: F) -> Self

Create a new broker, but delays any subscribers from being notified until the value is initialized.

§Args:
  • notify is a function to notify observers of state of the state change.
§Disclaimer:

This initialier is more prone to cause hangs if code is not properly setup. This should only be used for patterns where the is no useful default state.

Source

pub fn new_publisher(&self) -> Publisher<S, O, F>

Create a new Publisher that can make atomic updates to the state value.

Source

pub fn new_subscriber(&mut self) -> Subscriber<S, O, F>

Create a new Subscriber that represents a single hanging get client.

The newly-created subscriber will be notified with the current state immediately. After the first notification, the subscriber will be notified only if the state changes.

Auto Trait Implementations§

§

impl<S, O, F> Freeze for HangingGet<S, O, F>

§

impl<S, O, F> !RefUnwindSafe for HangingGet<S, O, F>

§

impl<S, O, F> Send for HangingGet<S, O, F>
where F: Send, S: Send, O: Send,

§

impl<S, O, F> Sync for HangingGet<S, O, F>
where F: Send, S: Send, O: Send,

§

impl<S, O, F> Unpin for HangingGet<S, O, F>

§

impl<S, O, F> !UnwindSafe for HangingGet<S, O, F>

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
§

impl<T, D> Encode<Ambiguous1, D> for T
where D: ResourceDialect,

§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
§

impl<T, D> Encode<Ambiguous2, D> for T
where D: ResourceDialect,

§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
Source§

impl<St> WithTag for St

Source§

fn tagged<T>(self, tag: T) -> Tagged<T, St>

Produce a new stream from this one which yields item tupled with a constant tag