use crate::core::{Packet, Result};
use crate::wire::{EnvelopeHeader, WIRE_HEADER_LEN};
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum DecodeOutcome<'a> {
NeedMore {
additional: Option<usize>,
},
Packet {
packet: Packet<'a>,
consumed: usize,
},
Resync {
consumed: usize,
},
}
pub trait Decoder {
fn decode<'a>(&mut self, bytes: &'a [u8]) -> Result<DecodeOutcome<'a>>;
fn has_header(&self, bytes: &[u8]) -> bool {
bytes.len() >= WIRE_HEADER_LEN
}
fn expected_len(&self, header: EnvelopeHeader) -> usize {
header.total_len(crate::integrity::Crc16::TAG_LEN)
}
}