Guest User

Untitled

a guest
May 24th, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.84 KB | None | 0 0
  1. fn main() {
  2. let test = test::<U8, U16>(b"12");
  3. }
  4.  
  5. fn test<T: Test, C: Test>(array: &[u8]) -> Testee<T, C> {
  6. let sized = T::sized();
  7. let sized2 = C::sized();
  8. println!("sized {}, {}", sized, sized2);
  9.  
  10. Testee::new::<T, C>()
  11. }
  12.  
  13. pub enum U8 {}
  14. pub enum U16 {}
  15.  
  16.  
  17. pub trait Test {
  18. fn sized() -> usize;
  19. }
  20. impl Test for U8 {
  21. fn sized() -> usize {
  22. 8
  23. }
  24. }
  25. impl Test for U16 {
  26. fn sized() -> usize {
  27. 16
  28. }
  29. }
  30.  
  31.  
  32. use std::marker::PhantomData;
  33. #[derive(Debug)]
  34. pub struct Testee<'a, T: Test + 'a, C: Test + 'a> {
  35. array: &'a [u8],
  36.  
  37. name: PhantomData<T>,
  38. value: PhantomData<C>,
  39. }
  40.  
  41. impl<'a, T: Test, C: Test> Testee<'a, T, C> {
  42. pub fn new<T0: Test, C0: Test>() -> Testee<'a, T, C> {
  43. Testee {
  44. array: b"",
  45. name: PhantomData,
  46. value: PhantomData,
  47. }
  48. }
  49. }
Add Comment
Please, Sign In to add comment