From 446c0f02647a39968c8c6bb6c57ae1cf56b30399 Mon Sep 17 00:00:00 2001 From: xenofem Date: Tue, 5 Jul 2022 19:28:25 -0400 Subject: [PATCH] cargo fmt --- src/store.rs | 2 +- src/upload.rs | 53 ++++++++++++++++++++++++------------------- src/zip.rs | 63 +++++++++++++++++++++++++++++++++++++-------------- 3 files changed, 77 insertions(+), 41 deletions(-) diff --git a/src/store.rs b/src/store.rs index 670699e..8291ad2 100644 --- a/src/store.rs +++ b/src/store.rs @@ -11,7 +11,7 @@ use rand::{ }; use serde::{Deserialize, Serialize}; use serde_with::skip_serializing_none; -use serde_with::{serde_as, PickFirst, FromInto}; +use serde_with::{serde_as, FromInto, PickFirst}; use time::OffsetDateTime; use tokio::{ fs::File, diff --git a/src/upload.rs b/src/upload.rs index 0a4b492..4680cee 100644 --- a/src/upload.rs +++ b/src/upload.rs @@ -290,30 +290,37 @@ impl Uploader { .write(true) .create_new(true) .open(&storage_path)?; - let (writer, name, size, modtime, contents): (Box, _, _, _, _) = if files.len() > 1 { - info!("Wrapping in zipfile generator"); - let now = OffsetDateTime::now_utc(); - let collection_name = - collection_name.map(|f| sanitise(&f, 4)).unwrap_or_else(|| { - super::APP_NAME.to_owned() + &now.format(FILENAME_DATE_FORMAT).unwrap() - }); - let file_set = FileSet { - files, - directory_name: Some(collection_name.clone()), + let (writer, name, size, modtime, contents): (Box, _, _, _, _) = + if files.len() > 1 { + info!("Wrapping in zipfile generator"); + let now = OffsetDateTime::now_utc(); + let collection_name = + collection_name.map(|f| sanitise(&f, 4)).unwrap_or_else(|| { + super::APP_NAME.to_owned() + + &now.format(FILENAME_DATE_FORMAT).unwrap() + }); + let file_set = FileSet { + files, + directory_name: Some(collection_name.clone()), + }; + let zip_writer = super::zip::ZipGenerator::new(file_set.clone(), writer); + let size = zip_writer.total_size(); + ( + Box::new(zip_writer), + collection_name + ".zip", + size, + now, + Some(file_set), + ) + } else { + ( + Box::new(writer), + files[0].name.clone(), + files[0].size, + files[0].modtime, + None, + ) }; - let zip_writer = - super::zip::ZipGenerator::new(file_set.clone(), writer); - let size = zip_writer.total_size(); - (Box::new(zip_writer), collection_name + ".zip", size, now, Some(file_set)) - } else { - ( - Box::new(writer), - files[0].name.clone(), - files[0].size, - files[0].modtime, - None - ) - }; self.writer = Some(writer); let stored_file = StoredFile { name, diff --git a/src/zip.rs b/src/zip.rs index 38d42e2..99d0995 100644 --- a/src/zip.rs +++ b/src/zip.rs @@ -37,16 +37,20 @@ pub struct FileSet { impl From> for FileSet { fn from(files: Vec) -> Self { - Self { files, directory_name: None } + Self { + files, + directory_name: None, + } } } fn full_file_name_len(file: &UploadedFile, directory_name: &Option) -> u64 { - file.name.len() as u64 + if let Some(d) = directory_name { - d.len() as u64 + 1 - } else { - 0 - } + file.name.len() as u64 + + if let Some(d) = directory_name { + d.len() as u64 + 1 + } else { + 0 + } } fn file_entry_size(file: &UploadedFile, directory_name: &Option) -> u64 { @@ -55,7 +59,11 @@ fn file_entry_size(file: &UploadedFile, directory_name: &Option) -> u64 fn file_entries_size(files: &FileSet, bound: Option) -> u64 { let mut total = 0; - let fs = if let Some(n) = bound { &files.files[..n] } else { &files.files }; + let fs = if let Some(n) = bound { + &files.files[..n] + } else { + &files.files + }; for file in fs.iter() { total += file_entry_size(file, &files.directory_name) } @@ -72,7 +80,8 @@ pub fn file_data_offsets(files: &FileSet) -> Vec { let mut offsets = Vec::new(); let mut offset: u64 = 0; for file in files.files.iter() { - offset += LOCAL_HEADER_SIZE_MINUS_FILENAME + full_file_name_len(file, &files.directory_name); + offset += + LOCAL_HEADER_SIZE_MINUS_FILENAME + full_file_name_len(file, &files.directory_name); offsets.push(offset); offset += file.size + DATA_DESCRIPTOR_SIZE; } @@ -82,7 +91,8 @@ pub fn file_data_offsets(files: &FileSet) -> Vec { fn central_directory_size(files: &FileSet) -> u64 { let mut total = 0; for file in files.files.iter() { - total += CENTRAL_DIRECTORY_HEADER_SIZE_MINUS_FILENAME + full_file_name_len(file, &files.directory_name); + total += CENTRAL_DIRECTORY_HEADER_SIZE_MINUS_FILENAME + + full_file_name_len(file, &files.directory_name); } total } @@ -185,7 +195,12 @@ impl UploadedFile { header } - fn central_directory_header(&self, directory_name: &Option, local_header_offset: u64, hash: u32) -> Vec { + fn central_directory_header( + &self, + directory_name: &Option, + local_header_offset: u64, + hash: u32, + ) -> Vec { let mut header = vec![ 0x50, 0x4b, 0x01, 0x02, // Central directory file header signature 45, 3, // Made by a Unix system supporting version 4.5 @@ -286,13 +301,16 @@ impl ZipGenerator { fn start_new_file(&mut self) { let mut offset = file_entries_size(&self.files, Some(self.file_index)); - while self.file_index < self.files.files.len() && self.files.files[self.file_index].size == 0 { + while self.file_index < self.files.files.len() + && self.files.files[self.file_index].size == 0 + { debug!( "Empty file entry in zipfile: {}", self.files.files[self.file_index].name ); self.hashes.push(EMPTY_STRING_CRC32); - let mut local_header = self.files.files[self.file_index].local_header(&self.files.directory_name, offset); + let mut local_header = + self.files.files[self.file_index].local_header(&self.files.directory_name, offset); let mut data_descriptor = self.files.files[self.file_index].data_descriptor(EMPTY_STRING_CRC32); offset += local_header.len() as u64 + data_descriptor.len() as u64; @@ -306,8 +324,10 @@ impl ZipGenerator { self.files.files[self.file_index].name ); self.byte_index = 0; - self.pending_metadata - .append(&mut self.files.files[self.file_index].local_header(&self.files.directory_name, offset)); + self.pending_metadata.append( + &mut self.files.files[self.file_index] + .local_header(&self.files.directory_name, offset), + ); } else { self.finish_zipfile(); } @@ -322,7 +342,11 @@ impl ZipGenerator { file.name, self.hashes[i] ); self.pending_metadata - .append(&mut file.central_directory_header(&self.files.directory_name, offset, self.hashes[i])); + .append(&mut file.central_directory_header( + &self.files.directory_name, + offset, + self.hashes[i], + )); offset += file_entry_size(file, &self.files.directory_name); } debug!("Writing end of central directory"); @@ -383,8 +407,13 @@ mod tests { fn test_no_files() { let mut output: Vec = vec![]; { - let mut zipgen = - ZipGenerator::new(FileSet { files: vec![], directory_name: "test".to_owned() }, Box::new(std::io::Cursor::new(&mut output))); + let mut zipgen = ZipGenerator::new( + FileSet { + files: vec![], + directory_name: "test".to_owned(), + }, + Box::new(std::io::Cursor::new(&mut output)), + ); zipgen.write_all(&[]).unwrap(); zipgen.flush().unwrap(); }