mod client;
mod key;
mod layer;
mod server;
mod timing;
pub use client::{ClientState, ClientTransaction};
pub use key::TransactionKey;
pub use layer::{Dispatch, TransactionLayer, sent_messages, tu_events};
pub use server::{ServerState, ServerTransaction};
pub use timing::{Timer, Timers};
use std::time::Duration;
use crate::message::{Message, Request, Response};
#[derive(Debug, Clone)]
pub enum Output {
Send(Box<Message>),
SetTimer {
timer: Timer,
after: Duration,
},
ClearTimer(Timer),
ToTu(Box<TuEvent>),
Terminated(Reason),
}
impl Output {
fn send(message: Message) -> Self {
Self::Send(Box::new(message))
}
fn to_tu(event: TuEvent) -> Self {
Self::ToTu(Box::new(event))
}
}
#[derive(Debug, Clone)]
pub enum TuEvent {
Request(Box<Request>),
Response(Box<Response>),
Ack(Box<Request>),
Timeout,
TransportError,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Reason {
Completed,
Timeout,
TransportError,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Reliability {
Reliable,
Unreliable,
}
impl Reliability {
#[must_use]
pub fn is_reliable(self) -> bool {
matches!(self, Self::Reliable)
}
}