From 8a22e3191dd356961558de2f19b7be973bba5ba9 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 20 May 2021 02:52:22 +0100 Subject: [PATCH] bundles: Box progress so we can pass it to finish_upload Signed-off-by: Ian Jackson --- src/bundles.rs | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/bundles.rs b/src/bundles.rs index c43196c3..87e86f13 100644 --- a/src/bundles.rs +++ b/src/bundles.rs @@ -56,9 +56,10 @@ pub struct Uploading { } /// returned by start_upload -pub struct Uploaded { +pub struct Uploaded<'p> { id: Id, parsed: Parsed, + for_progress: Box, } #[derive(Debug,Copy,Clone,Error)] @@ -957,19 +958,17 @@ impl InstanceBundles { impl Uploading { #[throws(MgmtError)] - pub fn bulk(self, data: R, size: usize, expected: &Hash, + pub fn bulk<'p,R,PW>(self, data: R, size: usize, expected: &Hash, progress_mode: ProgressUpdateMode, - progress_stream: &mut ResponseWriter) -> Uploaded + progress_stream: &'p mut ResponseWriter) + -> Uploaded<'p> where R: Read, PW: Write { - let mut for_progress_buf; - let mut null_progress = (); - let for_progress: &mut dyn progress::Originator = + let mut for_progress: Box = if progress_mode >= PUM::Simplex { - for_progress_buf = progress::ResponseOriginator::new(progress_stream); - &mut for_progress_buf + Box::new(progress::ResponseOriginator::new(progress_stream)) } else { - &mut null_progress + Box::new(()) }; let Uploading { id, mut file, instance } = self; @@ -978,7 +977,7 @@ impl Uploading { let mut null_progress = (); let for_progress_upload: &mut dyn progress::Originator = if progress_mode >= PUM::Duplex - { for_progress } else { &mut null_progress }; + { &mut *for_progress } else { &mut null_progress }; let mut data_reporter = progress::ReadOriginator::new( for_progress_upload, Phase::Upload, size, data); @@ -1001,21 +1000,24 @@ impl Uploading { file.rewind().context("rewind"). map_err(IE::from)?; let (za, parsed) = parse_bundle(id, &instance, file, BundleParseUpload, - for_progress)?; + &mut *for_progress)?; - process_bundle(za, id, &*instance, for_progress)?; + process_bundle(za, id, &*instance, &mut *for_progress)?; - Uploaded { id, parsed } + Uploaded { id, parsed, for_progress } } } impl InstanceBundles { #[throws(MgmtError)] pub fn finish_upload(&mut self, ig: &mut Instance, - Uploaded { id, parsed }: Uploaded) -> Id { + Uploaded { id, parsed, for_progress }: Uploaded) + -> Id { let tmp = id.path_tmp(&ig.name); let install = id.path_(&ig.name); + let _ = for_progress; + incorporate_bundle(self, ig, id, parsed)?; self.updated(ig); -- 2.30.2