impl SlipMime for Mime2Slip { const CONV_TO: Option<bool> = Some(false); }
impl SlipMime for SlipNoConv { const CONV_TO: Option<bool> = None; }
-#[derive(Debug,Error)]
+#[derive(Debug,Error,Eq,PartialEq)]
pub enum SlipFramesError<E> where E: std::error::Error + 'static {
#[error("only bad IP datagrams")] ErrorOnlyBad,
#[error("{0}")] Other(#[from] E),
async fn chk<M:SlipMime>(m: M, i: &[u8],
exp_p: &[&[u8]],
- exp_e: &[PacketError])
+ exp_e: &[PacketError],
+ exp_r: Result<(),SlipFramesError<Void>>)
{
dbg!(M::CONV_TO, DumpHex(i));
let mut got_e = vec![];
let mut got_p = vec![];
- processn(m, MTU, i,
- |_|Ok(()),
- |(p,())| { got_p.push(p); async { Ok(()) } },
- |e| Ok::<_,SlipFramesError<Void>>(got_e.push(e)))
- .await.unwrap();
+ let got_r = processn(
+ m, MTU, i,
+ |_|Ok(()),
+ |(p,())| { got_p.push(p); async { Ok(()) } },
+ |e| Ok::<_,SlipFramesError<Void>>(got_e.push(e))
+ ).await;
assert_eq!( got_p.iter().map(|b| DumpHex(b)).collect_vec(),
exp_p.iter().map(|b| DumpHex(b)).collect_vec() );
assert_eq!( got_e,
exp_e );
+ assert_eq!( got_r,
+ exp_r );
}
+ use SlipFramesError::ErrorOnlyBad;
chk(Slip2Mime,
&[ SLIP_END, SLIP_ESC, SLIP_ESC_END, b'-', b'X' ],
&[ &[ b'-', SLIP_ESC_END, SLIP_ESC, b'X' ] ],
- &[ PE::Empty ]).await;
+ &[ ],
+ Ok(())).await;
chk(Slip2Mime,
&[ SLIP_END, SLIP_ESC, b'y' ], &[],
- &[ PE::Empty, PE::SLIP ]).await;
+ &[ PE::SLIP ],
+ Err(ErrorOnlyBad)).await;
chk(Slip2Mime,
&[ SLIP_END, b'-', b'y' ],
&[ &[ SLIP_ESC, b'y' ] ],
- &[ PE::Empty ]).await;
+ &[ ],
+ Ok(())).await;
chk(Slip2Mime,
&[b'x'; 20],
&[ ],
- &[ PE::MTU { len: 20, mtu: MTU } ]).await;
+ &[ PE::MTU { len: 20, mtu: MTU } ],
+ Err(ErrorOnlyBad)).await;
chk(SlipNoConv,
&[ SLIP_END, SLIP_ESC, SLIP_ESC_END, b'-', b'X' ],
&[ &[ SLIP_ESC, SLIP_ESC_END, b'-', b'X' ] ],
- &[ PE::Empty, ]).await;
+ &[ ],
+ Ok(())).await;
}