[−][src]Trait lifeline::Bus
Stores and distributes channel endpoints (Senders and Receivers), as well as Resource values.
The bus allows you to write loosely-coupled applications, with adjacent lifeline Services that do not depend on each other.
Most Bus implementations are defined using the lifeline_bus! macro.
Example:
use lifeline::lifeline_bus; lifeline_bus!(pub struct ExampleBus);
Required methods
fn capacity<Msg>(&self, capacity: usize) -> Result<(), AlreadyLinkedError> where
Msg: Message<Self> + 'static,
Msg: Message<Self> + 'static,
Configures the channel capacity, if the linked channel implementation takes a capacity during initialization
Returns an AlreadyLinkedError, if the channel has already been initalized from another call to capacity
, rx
, or tx
.
Example:
use lifeline::prelude::*; use tokio::sync::mpsc; lifeline_bus!(pub struct ExampleBus); #[derive(Debug)] struct ExampleMessage {} impl Message<ExampleBus> for ExampleMessage { type Channel = mpsc::Sender<Self>; } fn main() { let bus = ExampleBus::default(); bus.capacity::<ExampleMessage>(1024); let rx = bus.rx::<ExampleMessage>(); }
fn rx<Msg>(
&self
) -> Result<LifelineReceiver<Msg, <Msg::Channel as Channel>::Rx>, TakeChannelError> where
Msg: Message<Self> + 'static,
&self
) -> Result<LifelineReceiver<Msg, <Msg::Channel as Channel>::Rx>, TakeChannelError> where
Msg: Message<Self> + 'static,
Takes (or clones) the channel Receiver. The message type must implement Message<Bus>, which defines the channel type.
Returns the Receiver, or a TakeChannelError if the channel endpoint is not clonable, and has already been taken.
- For
mpsc
channels, the Receiver is taken. - For
broadcast
channels, the Receiver is cloned. - For
watch
channels, the Receiver is cloned.
Example:
use lifeline::prelude::*; use tokio::sync::mpsc; lifeline_bus!(pub struct ExampleBus); #[derive(Debug)] struct ExampleMessage {} impl Message<ExampleBus> for ExampleMessage { type Channel = mpsc::Sender<Self>; } fn main() { let bus = ExampleBus::default(); let rx = bus.rx::<ExampleMessage>(); }
fn tx<Msg>(
&self
) -> Result<LifelineSender<Msg, <Msg::Channel as Channel>::Tx>, TakeChannelError> where
Msg: Message<Self> + 'static,
&self
) -> Result<LifelineSender<Msg, <Msg::Channel as Channel>::Tx>, TakeChannelError> where
Msg: Message<Self> + 'static,
Takes (or clones) the channel Sender. The message type must implement Message<Bus>, which defines the channel type.
Returns the sender, or a TakeChannelError if the channel endpoint is not clonable, and has already been taken.
- For
mpsc
channels, the Sender is cloned. - For
broadcast
channels, the Sender is cloned. - For
watch
channels, the Sender is taken.
Example:
use lifeline::prelude::*; use tokio::sync::mpsc; lifeline_bus!(pub struct ExampleBus); #[derive(Debug)] struct ExampleMessage {} impl Message<ExampleBus> for ExampleMessage { type Channel = mpsc::Sender<Self>; } fn main() { let bus = ExampleBus::default(); let tx = bus.tx::<ExampleMessage>(); }
fn resource<Res>(&self) -> Result<Res, TakeResourceError> where
Res: Resource<Self>,
Res: Resource<Self>,
Takes (or clones) the Resource.
Returns the resource, or a TakeResourceError if the resource is not clonable, and has already been taken.
Example:
use lifeline::prelude::*; use lifeline::impl_storage_clone; use tokio::sync::mpsc; lifeline_bus!(pub struct ExampleBus); #[derive(Debug, Clone)] struct ExampleResource {} impl_storage_clone!(ExampleResource); impl Resource<ExampleBus> for ExampleResource {} fn main() { let bus = ExampleBus::default(); let resource = bus.resource::<ExampleResource>(); }
Implementors
impl<T> Bus for T where
T: DynBus,
[src]
T: DynBus,
fn rx<Msg>(
&self
) -> Result<LifelineReceiver<Msg, <Msg::Channel as Channel>::Rx>, TakeChannelError> where
Msg: Message<Self> + 'static,
[src]
&self
) -> Result<LifelineReceiver<Msg, <Msg::Channel as Channel>::Rx>, TakeChannelError> where
Msg: Message<Self> + 'static,
fn tx<Msg>(
&self
) -> Result<LifelineSender<Msg, <Msg::Channel as Channel>::Tx>, TakeChannelError> where
Msg: Message<Self> + 'static,
[src]
&self
) -> Result<LifelineSender<Msg, <Msg::Channel as Channel>::Tx>, TakeChannelError> where
Msg: Message<Self> + 'static,
fn capacity<Msg>(&self, capacity: usize) -> Result<(), AlreadyLinkedError> where
Msg: Message<Self> + 'static,
[src]
Msg: Message<Self> + 'static,
fn resource<Res>(&self) -> Result<Res, TakeResourceError> where
Res: Resource<Self>,
[src]
Res: Resource<Self>,