network_communicator/
task.rs1use curl::easy::Easy;
2use std::boxed::Box;
3use super::Error;
4
5pub enum Task<T,E> {
7 Process {
8 data: T,
9 configurator: Box<Fn(&mut T,&mut Easy) -> Result<(),Error<E>> + Send + 'static>,
10 },
11 Terminate,
12}
13
14impl <T,E>Task<T,E> {
15 pub fn new<F>(payload: T,configurator: F) -> Task<T,E> where F: Send + 'static, F: Fn(&mut T,&mut Easy) -> Result<(),Error<E>> {
17 let task = Task::Process {
18 data: payload,
19 configurator: Box::new(configurator),
20 };
21 return task;
22 }
23}
24
25pub fn disassemble_task<T,E>(task: Task<T,E>) -> (T,Box<Fn(&mut T,&mut Easy) -> Result<(),Error<E>> + Send + 'static>) {
26 match task {
27 Task::Process { data, configurator } => {
28 return (data, configurator);
29 },
30 _ => {
31 panic!("Unable to disassemble task");
32 }
33 }
34}
35pub fn generate_terminate_task<T,E>() -> Task<T,E> {
36 Task::Terminate
37}
38
39pub fn is_terminate_task<T,E>(task: &Task<T,E>) -> bool {
40 match task {
41 &Task::Terminate => true,
42 _ => false,
43 }
44}