Guest User

Untitled

a guest
Jul 17th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.69 KB | None | 0 0
  1. #[derive(Debug)]
  2. pub struct Token {
  3. data: u32,
  4. }
  5.  
  6. pub trait TokenHandler {
  7. fn handle(self, token: &mut Token);
  8. }
  9.  
  10. impl<F: FnOnce(&mut Token)> TokenHandler for F {
  11. fn handle(self, token: &mut Token) {
  12. self(token)
  13. }
  14. }
  15.  
  16. // example generic caller
  17. fn handle_with<H: TokenHandler>(token: &mut Token, handler: H) {
  18. handler.handle(token);
  19. }
  20.  
  21. fn main() {
  22. let mut token = Token { data: 10 };
  23.  
  24. let mut seen_tokens = 0;
  25.  
  26. handle_with(&mut token, |t: &mut Token| {
  27. // example of modifying token
  28. t.data *= 2;
  29. // example of modifying internal state (for closures - scope)
  30. seen_tokens += 1;
  31. });
  32.  
  33. println!("{:?} ({})", token, seen_tokens);
  34. }
Add Comment
Please, Sign In to add comment