Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.91 KB | None | 0 0
  1. struct TaskRunner<'a> {
  2. cb: Option<&'a TaskFinished>,
  3. }
  4.  
  5. impl<'a> TaskRunner<'a> {
  6. fn new() -> Self { TaskRunner { cb: None } }
  7.  
  8. fn start_task(&mut self, cb: &'a TaskFinished) {
  9. self.cb = Some(cb);
  10. }
  11.  
  12. fn finish_task(&mut self) {
  13. if let Some(cb) = self.cb.take() {
  14. cb.task_finished();
  15. }
  16. }
  17. }
  18.  
  19. trait TaskFinished {
  20. fn task_finished(&self);
  21. }
  22.  
  23. struct Manager<'a> {
  24. task_runner: TaskRunner<'a>,
  25. }
  26.  
  27. impl<'a> Manager<'a> {
  28. fn new() -> Self {
  29. Manager {
  30. task_runner: TaskRunner::new(),
  31. }
  32. }
  33.  
  34. fn run_task(&'a mut self) {
  35. self.task_runner.start_task(self);
  36. self.task_runner.finish_task();
  37. }
  38. }
  39.  
  40. impl<'a> TaskFinished for Manager<'a> {
  41. fn task_finished(&self) {
  42. println!("Task finished! Going to do the next thing!");
  43. }
  44. }
  45.  
  46. fn main() {
  47. let mut manager = Manager::new();
  48. manager.run_task();
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement