Use iterators

This commit is contained in:
Greg Fitzgerald 2018-04-10 21:43:53 -06:00
parent d1948b5a00
commit e5f7eeedbf
1 changed files with 15 additions and 15 deletions

View File

@ -152,21 +152,16 @@ impl<W: Write + Send + 'static> AccountantSkel<W> {
fn process_packets( fn process_packets(
obj: &Arc<Mutex<AccountantSkel<W>>>, obj: &Arc<Mutex<AccountantSkel<W>>>,
reqs: Vec<Option<(Request, SocketAddr)>>, req_vers: Vec<(Request, SocketAddr, u8)>,
vers: Vec<u8>,
) -> Vec<(Response, SocketAddr)> { ) -> Vec<(Response, SocketAddr)> {
let mut rsps = Vec::new(); req_vers
for (data, v) in reqs.into_iter().zip(vers) { .into_iter()
if let Some((req, rsp_addr)) = data { .filter_map(|(req, rsp_addr, v)| {
if !req.verify() { let mut skel = obj.lock().unwrap();
continue; skel.log_verified_request(req, v)
} .map(|resp| (resp, rsp_addr))
if let Some(resp) = obj.lock().unwrap().log_verified_request(req, v) { })
rsps.push((resp, rsp_addr)); .collect()
}
}
}
rsps
} }
fn serialize_response( fn serialize_response(
@ -208,7 +203,12 @@ impl<W: Write + Send + 'static> AccountantSkel<W> {
let mms = verified_receiver.recv_timeout(timer)?; let mms = verified_receiver.recv_timeout(timer)?;
for (msgs, vers) in mms { for (msgs, vers) in mms {
let reqs = Self::deserialize_packets(&msgs.read().unwrap()); let reqs = Self::deserialize_packets(&msgs.read().unwrap());
let rsps = Self::process_packets(obj, reqs, vers); let req_vers = reqs.into_iter()
.zip(vers)
.filter_map(|(req, ver)| req.map(|(msg, addr)| (msg, addr, ver)))
.filter(|x| x.0.verify())
.collect();
let rsps = Self::process_packets(obj, req_vers);
let blobs = Self::serialize_responses(rsps, blob_recycler)?; let blobs = Self::serialize_responses(rsps, blob_recycler)?;
if !blobs.is_empty() { if !blobs.is_empty() {
//don't wake up the other side if there is nothing //don't wake up the other side if there is nothing