pub mod credit;
pub mod delivery;
pub mod receiver;
pub mod resume;
pub mod sender;
pub mod settlement;
pub use delivery::Delivery;
use tokio::sync::mpsc;
use crate::error::LinkError;
use crate::proto::{LinkAttached, LinkEvent, Reply};
use receiver::ReceiverLink;
use sender::SenderLink;
#[derive(Debug)]
pub enum Link {
Sender(SenderLink),
Receiver(ReceiverLink),
}
impl Link {
pub fn handle(&self) -> u32 {
match self {
Link::Sender(l) => l.handle,
Link::Receiver(l) => l.handle,
}
}
pub fn remote_handle(&self) -> Option<u32> {
match self {
Link::Sender(l) => l.remote_handle,
Link::Receiver(l) => l.remote_handle,
}
}
pub fn set_remote_handle(&mut self, handle: u32) {
match self {
Link::Sender(l) => l.remote_handle = Some(handle),
Link::Receiver(l) => l.remote_handle = Some(handle),
}
}
pub fn mark_attached(&mut self) {
match self {
Link::Sender(l) => l.attached = true,
Link::Receiver(l) => l.attached = true,
}
}
pub fn events(&self) -> &mpsc::Sender<LinkEvent> {
match self {
Link::Sender(l) => &l.events,
Link::Receiver(l) => &l.events,
}
}
pub fn take_pending_attach(&mut self) -> Option<Reply<LinkAttached, LinkError>> {
match self {
Link::Sender(l) => l.pending_attach.take(),
Link::Receiver(l) => l.pending_attach.take(),
}
}
}