Clean a bit

This commit is contained in:
asonix 2018-06-28 19:36:41 -05:00
parent 17fefd0224
commit 60569fc384

View file

@ -77,12 +77,24 @@ impl Jobs {
} }
} }
impl Default for Jobs {
fn default() -> Self {
Jobs {
inner: Default::default(),
}
}
}
pub struct Processors { pub struct Processors {
inner: HashMap<String, Box<Processor + Send + Sync + 'static>>, inner: HashMap<String, Box<Processor + Send + Sync + 'static>>,
jobs: Option<Jobs>, jobs: Option<Jobs>,
} }
impl Processors { impl Processors {
pub fn new() -> Self {
Default::default()
}
pub fn register_processor<P>(&mut self, processor: P) pub fn register_processor<P>(&mut self, processor: P)
where where
P: Processor + Send + Sync + 'static, P: Processor + Send + Sync + 'static,
@ -107,41 +119,51 @@ impl Processors {
name: String, name: String,
job: JobInfo, job: JobInfo,
) -> impl Future<Item = Self, Error = JobError> { ) -> impl Future<Item = Self, Error = JobError> {
let mut jobs = self.jobs.take().unwrap(); let jobs = self.jobs.take().unwrap();
let args = job.args.clone();
let processor = self.inner.remove(&name); let processor = self.inner.remove(&name);
processor processor
.ok_or(JobError::MissingProcessor) .ok_or(JobError::MissingProcessor)
.into_future() .into_future()
.and_then(move |processor| { .and_then(move |processor| process(self, jobs, processor, job, name))
}
}
impl Default for Processors {
fn default() -> Self {
Processors {
inner: Default::default(),
jobs: Default::default(),
}
}
}
fn process(
mut processors: Processors,
mut jobs: Jobs,
processor: Box<Processor + Send + Sync + 'static>,
job: JobInfo,
name: String,
) -> impl Future<Item = Processors, Error = JobError> {
let args = job.args.clone();
let local_name = name.clone(); let local_name = name.clone();
let local_name_2 = name.clone(); let local_name_2 = name.clone();
let fut = processor.process(args).then(move |res| match res { let fut = processor.process(args).then(move |res| match res {
Ok(_) => Ok(info!("Job completed, {}", name)), Ok(_) => Ok(info!("Job completed, {}", name)),
Err(e) => { Err(e) => Err(error!("Job errored, {}, {}", name, e)),
error!("Job errored, {}, {}", name, e);
Err(JobError::Processing(e))
}
}); });
self.inner.insert(local_name, processor); processors.inner.insert(local_name, processor);
fut.then(move |res| { fut.then(move |res| {
match res { if res.is_err() {
Ok(_) => (),
Err(_) => {
jobs.requeue(&local_name_2, job); jobs.requeue(&local_name_2, job);
} }
}
self.jobs = Some(jobs); processors.jobs = Some(jobs);
Ok(self) Ok(processors)
})
}) })
} }
}