Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::fmt::Debug;
- pub trait ParsableLayer<In> {
- type Out: Sized;
- fn from_bytes(data: In) -> Result<Self::Out, ()>;
- }
- #[derive(Debug, Clone)]
- pub enum SomePacket<'a> {
- UNKNOWN,
- Variant { internal: &'a [u8] },
- }
- enum SomePacketFamily {}
- impl<'a> ParsableLayer<&'a [u8]> for SomePacketFamily {
- type Out = SomePacket<'a>;
- fn from_bytes(data: &'a [u8]) -> Result<SomePacket<'a>, ()>
- {
- let sub = &data[1..];
- Ok(SomePacket::Variant { internal: sub })
- }
- }
- fn foo<T: for<'a> ParsableLayer<&'a [u8]>>(x: &[u8]) where for<'a> <T as ParsableLayer<&'a [u8]>>::Out: Debug {
- let a = T::from_bytes(x);
- let b = T::from_bytes(x);
- println!("{:?} {:?}", a, b);
- }
- fn main() {
- let x = [1,2,3];
- foo(&x[..]);
- }
Add Comment
Please, Sign In to add comment