use std::collections::HashMap;
pub(in super) const CLIENT_HAS_FINISHED_SENDING_FRAMETYPE: u8 = 0x0;
pub(in super) const DRAIN_FRAMETYPE: u8 = 0x1;
pub(in super) const NEWTUBE_FRAMETYPE: u8 = 0x2;
pub(in super) const PAYLOAD_FRAMETYPE: u8 = 0x3;
pub(in super) const PAYLOAD_ACK_FRAMETYPE: u8 = 0x4;
pub(in super) const SERVER_HAS_FINISHED_SENDING_FRAMETYPE: u8 = 0x5;
pub(in super) const ABORT_FRAMETYPE: u8 = 0x6;
#[derive(Clone,Debug,PartialEq)]
pub enum AbortReason {
ApplicationAbort,
ApplicationError,
TransportErrorWhileSynchronizingTubeState,
Unknown,
}
impl From<u8> for AbortReason {
fn from(reason: u8) -> Self {
match reason {
0x0 => AbortReason::ApplicationAbort,
0x1 => AbortReason::ApplicationError,
0x2 => AbortReason::TransportErrorWhileSynchronizingTubeState,
_ => AbortReason::Unknown,
}
}
}
impl Into<u8> for AbortReason {
fn into(self) -> u8 {
match self {
AbortReason::ApplicationAbort => 0x00,
AbortReason::ApplicationError => 0x01,
AbortReason::TransportErrorWhileSynchronizingTubeState => 0x02,
AbortReason::Unknown => 0xFF,
}
}
}
#[derive(Clone,Debug,PartialEq)]
pub enum Frame {
ClientHasFinishedSending {
tube_id: u16,
},
Drain,
NewTube {
tube_id: u16,
headers: HashMap<String, String>,
},
Payload {
tube_id: u16,
ack_id: Option<u16>,
data: Vec<u8>,
},
PayloadAck {
tube_id: u16,
ack_id: u16,
},
ServerHasFinishedSending {
tube_id: u16,
},
Abort {
tube_id: u16,
reason: AbortReason,
},
}