Guest User

Untitled

a guest
Oct 22nd, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.75 KB | None | 0 0
  1. use std::fmt::Debug;
  2. pub trait ParsableLayer<In> {
  3. type Out: Sized;
  4. fn from_bytes(data: In) -> Result<Self::Out, ()>;
  5. }
  6.  
  7. #[derive(Debug, Clone)]
  8. pub enum SomePacket<'a> {
  9. UNKNOWN,
  10. Variant { internal: &'a [u8] },
  11. }
  12.  
  13. enum SomePacketFamily {}
  14.  
  15. impl<'a> ParsableLayer<&'a [u8]> for SomePacketFamily {
  16. type Out = SomePacket<'a>;
  17. fn from_bytes(data: &'a [u8]) -> Result<SomePacket<'a>, ()>
  18.  
  19. {
  20. let sub = &data[1..];
  21. Ok(SomePacket::Variant { internal: sub })
  22. }
  23. }
  24.  
  25. fn foo<T: for<'a> ParsableLayer<&'a [u8]>>(x: &[u8]) where for<'a> <T as ParsableLayer<&'a [u8]>>::Out: Debug {
  26. let a = T::from_bytes(x);
  27. let b = T::from_bytes(x);
  28. println!("{:?} {:?}", a, b);
  29. }
  30.  
  31. fn main() {
  32. let x = [1,2,3];
  33. foo(&x[..]);
  34. }
Add Comment
Please, Sign In to add comment