Module subscription

Source
Expand description

§Subscription client

This crates supports subscribing to one or multiple channels. (s. Redis Pub/Sub).

A regular client can be turned to a Subscription in the following way.

let client = connection_handler
                .connect(&mut stack, Some(&clock)).unwrap()
                .subscribe(["first_channel".into(), "second_channel".into()])
                .unwrap();

If the subscriptions fails, it’s recommended to close the connection, as a the state is undefined. A further reuse of the connection could cause subsequent errors.

§Receiving messages

Messages can be received using the receive() method. Which returns Some(Message) in case a message is pending.

loop {
    let message = client.receive().unwrap();

    if let Some(message) = message {
        assert_eq!("first_channel", core::str::from_utf8(&message.channel[..]).unwrap());
        assert_eq!("example payload", core::str::from_utf8(&message.payload[..]).unwrap());
        break;
    }
}

§Unsubscribing

To leave a clean connection state, unsubscribe from all channels at the end.

client.unsubscribe().unwrap();

Note: unsubscribe() is called automatically when the client is dropped

Structs§

Message
A published subscription message
Subscription
Client for handling subscriptions

Enums§

Error
Subscription errors