1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use super::*;

pub enum Cmd<C: Component> {
    None,
    Sub(C::Sub),
    Task(Box<dyn FnOnce(TaskResolver<C::Msg>)>),
    Batch(Box<dyn FnOnce(BatchResolver<C::Msg>)>),
}

impl<C: Component> Cmd<C> {
    pub fn none() -> Self {
        Self::None
    }
    pub fn task(task: impl FnOnce(TaskResolver<C::Msg>) + 'static) -> Self {
        Self::Task(Box::new(task))
    }
    pub fn batch(batch: impl FnOnce(BatchResolver<C::Msg>) + 'static) -> Self {
        Self::Batch(Box::new(batch))
    }
    pub fn chain(msg: C::Msg) -> Self {
        Self::task(|resolve| resolve(msg))
    }
}