mut out: OUT,
mut error_handler: EH
) where AC: Fn(&[u8]) -> Result<(), PacketError> + Copy,
- OUT: FnMut(Box<[u8]>),
+ OUT: FnMut(Box<[u8]>) -> Result<(), PacketError>,
EH: FnMut(PacketError),
{
// eprintln!("before: {:?}", DumpHex(data));
let mut ok = false;
let mut err = false;
for packet in data.split(|&c| c == SLIP_END) {
- match check1(mime, mtu, packet, addr_chk) {
- Err(PacketError::Empty) => { }
+ match (||{
+ let packet = check1(mime, mtu, packet, addr_chk);
+ if matches!(packet, Err(PacketError::Empty)) { return Ok::<_,PE>(()) }
+ out(packet?)?;
+ ok = true;
+ Ok::<_,PE>(())
+ })() {
+ Ok(()) => { },
Err(e) => { err=true; error_handler(e); },
- Ok(packet) => { ok=true; out(packet); },
}
}
// eprintln!(" after: {:?}", DumpHex(data));