#[allow(clippy::module_inception)]
mod packet;
#[cfg(test)]
mod test;
mod token;
mod visitor;
pub use packet::{Packet, RefPacket};
pub use token::{RefTokens, Token, TokenIter, Tokens};
pub use visitor::PacketKind;
pub(crate) const CHECKSUM_MARKER: u8 = b':';
pub(crate) const MORE_PACKETS_MARKER: u8 = b'\\';
pub(crate) const COMMAND_MARKER: u8 = b'/';
pub(crate) const REPLY_MARKER: u8 = b'@';
pub(crate) const INFO_MARKER: u8 = b'#';
pub(crate) const ALERT_MARKER: u8 = b'!';
pub(crate) const CARRIAGE_RETURN: u8 = b'\r';
pub(crate) const LINE_FEED: u8 = b'\n';
pub(crate) trait AsciiExt {
fn is_reserved(&self) -> bool;
fn is_separator(&self) -> bool;
fn is_packet_end(&self) -> bool;
fn is_packet_start(&self) -> bool;
}
impl AsciiExt for u8 {
fn is_reserved(&self) -> bool {
matches!(
*self,
CHECKSUM_MARKER
| MORE_PACKETS_MARKER
| COMMAND_MARKER
| REPLY_MARKER
| INFO_MARKER
| ALERT_MARKER
| CARRIAGE_RETURN
| LINE_FEED
)
}
fn is_separator(&self) -> bool {
matches! {
*self,
b' ' | b'\t'
}
}
fn is_packet_end(&self) -> bool {
matches!(*self, CARRIAGE_RETURN | LINE_FEED)
}
fn is_packet_start(&self) -> bool {
matches!(
*self,
COMMAND_MARKER | REPLY_MARKER | ALERT_MARKER | INFO_MARKER
)
}
}