aldrin_core/
channel_end.rs

1use num_enum::{IntoPrimitive, TryFromPrimitive};
2
3/// Sending or receiving end of a channel.
4#[derive(Debug, Copy, Clone, PartialEq, Eq, IntoPrimitive, TryFromPrimitive)]
5#[cfg_attr(feature = "fuzzing", derive(arbitrary::Arbitrary))]
6#[repr(u8)]
7pub enum ChannelEnd {
8    /// Sending end of a channel.
9    Sender = 0,
10
11    /// Receiving end of a channel.
12    Receiver = 1,
13}
14
15impl ChannelEnd {
16    /// Returns the other end of the channel.
17    ///
18    /// This function maps [`Sender`](Self::Sender) to [`Receiver`](Self::Receiver) and vice versa.
19    ///
20    /// # Examples
21    ///
22    /// ```
23    /// # use aldrin_core::ChannelEnd;
24    /// assert_eq!(ChannelEnd::Sender.other(), ChannelEnd::Receiver);
25    /// assert_eq!(ChannelEnd::Receiver.other(), ChannelEnd::Sender);
26    /// ```
27    pub fn other(self) -> Self {
28        match self {
29            Self::Sender => Self::Receiver,
30            Self::Receiver => Self::Sender,
31        }
32    }
33}
34
35impl From<ChannelEndWithCapacity> for ChannelEnd {
36    fn from(value: ChannelEndWithCapacity) -> Self {
37        match value {
38            ChannelEndWithCapacity::Sender => Self::Sender,
39            ChannelEndWithCapacity::Receiver(_) => Self::Receiver,
40        }
41    }
42}
43
44/// Sending or receiving end and capacity of a channel.
45#[derive(Debug, Copy, Clone, PartialEq, Eq)]
46#[cfg_attr(feature = "fuzzing", derive(arbitrary::Arbitrary))]
47pub enum ChannelEndWithCapacity {
48    /// Sending end of a channel.
49    Sender,
50
51    /// Receiving end of a channel and capacity.
52    Receiver(u32),
53}