Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #[derive(Debug)]
- pub struct Token {
- data: u32,
- }
- pub trait TokenHandler {
- fn handle(self, token: &mut Token);
- }
- impl<F: FnOnce(&mut Token)> TokenHandler for F {
- fn handle(self, token: &mut Token) {
- self(token)
- }
- }
- // example generic caller
- fn handle_with<H: TokenHandler>(token: &mut Token, handler: H) {
- handler.handle(token);
- }
- fn main() {
- let mut token = Token { data: 10 };
- let mut seen_tokens = 0;
- handle_with(&mut token, |t: &mut Token| {
- // example of modifying token
- t.data *= 2;
- // example of modifying internal state (for closures - scope)
- seen_tokens += 1;
- });
- println!("{:?} ({})", token, seen_tokens);
- }
Add Comment
Please, Sign In to add comment