network_communicator/
task.rs

1use curl::easy::Easy;
2use std::boxed::Box;
3use super::Error;
4
5/// Task for network manager.
6pub 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	/// Creates new task with payload
16	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}