1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
// The worker trait defines what should be done when provided with input. This
// trait is automatically implemented for any Fn(I) -> O.
pub trait Worker<I> {
    type Output;

    fn run(&self, input: I) -> Self::Output;
}

impl<T, I, O> Worker<I> for T
where
    T: Fn(I) -> O,
{
    type Output = O;

    fn run(&self, input: I) -> O {
        self(input)
    }
}