Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct TaskRunner<'a> {
- cb: Option<&'a TaskFinished>,
- }
- impl<'a> TaskRunner<'a> {
- fn new() -> Self { TaskRunner { cb: None } }
- fn start_task(&mut self, cb: &'a TaskFinished) {
- self.cb = Some(cb);
- }
- fn finish_task(&mut self) {
- if let Some(cb) = self.cb.take() {
- cb.task_finished();
- }
- }
- }
- trait TaskFinished {
- fn task_finished(&self);
- }
- struct Manager<'a> {
- task_runner: TaskRunner<'a>,
- }
- impl<'a> Manager<'a> {
- fn new() -> Self {
- Manager {
- task_runner: TaskRunner::new(),
- }
- }
- fn run_task(&'a mut self) {
- self.task_runner.start_task(self);
- self.task_runner.finish_task();
- }
- }
- impl<'a> TaskFinished for Manager<'a> {
- fn task_finished(&self) {
- println!("Task finished! Going to do the next thing!");
- }
- }
- fn main() {
- let mut manager = Manager::new();
- manager.run_task();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement