1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
use actix::prelude::*; struct RunOnce<F> where F: FnOnce() + 'static, { call: Option<F>, } impl<F> RunOnce<F> where F: FnOnce() + 'static, { fn new(call: F) -> Self { RunOnce { call: Some(call) } } } impl<F> Actor for RunOnce<F> where F: FnOnce() + 'static, { type Context = Context<Self>; fn started(&mut self, ctx: &mut <Self as Actor>::Context) { match self.call.take() { Some(call) => call(), None => (), } ctx.stop(); } } pub fn run_once<F>(f: F) where F: FnOnce() + 'static, { RunOnce::new(f).start(); }