Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.61 KB | None | 0 0
  1. use std::{convert::Infallible, future::Future, marker::PhantomData};
  2.  
  3. trait Trait {}
  4.  
  5. struct MyFn<'a, F, Fut>(F, PhantomData<&'a Fut>);
  6.  
  7. impl<'a, F, Fut> MyFn<'a, F, Fut>
  8. where
  9. F: Fn(&'a u8, &'a u16) -> Fut,
  10. Fut: Future<Output = Result<(), Infallible>>
  11. {
  12. pub fn new(f: F) -> Self {
  13. MyFn(f, PhantomData)
  14. }
  15. }
  16.  
  17. impl<'a, F, Fut> Trait for MyFn<'a, F, Fut>
  18. where
  19. F: Fn(&'a u8, &'a u16) -> Fut,
  20. Fut: Future<Output = Result<(), Infallible>>,
  21. {
  22. }
  23.  
  24. async fn lol(_: &u8, _: &u16) -> Result<(), Infallible> {
  25. Ok(())
  26. }
  27.  
  28. fn check<T: Trait>(_: T) {}
  29.  
  30. pub fn check2() {
  31. check(MyFn::new(lol))
  32. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement