Rm infesible guarantee in ZipStreamVisitor::visit_additional_metadata
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
parent
ef1846e121
commit
89ff32d93b
1 changed files with 17 additions and 21 deletions
|
@ -116,8 +116,6 @@ pub trait ZipStreamVisitor {
|
||||||
fn visit_file(&mut self, file: &mut ZipFile<'_>) -> ZipResult<()>;
|
fn visit_file(&mut self, file: &mut ZipFile<'_>) -> ZipResult<()>;
|
||||||
|
|
||||||
/// This function is guranteed to be called after all `visit_file`s.
|
/// This function is guranteed to be called after all `visit_file`s.
|
||||||
/// For every file, there must be corresponding visit_additional_metadata
|
|
||||||
/// unless the input is incomplete.
|
|
||||||
///
|
///
|
||||||
/// * `metadata` - Provides missing metadata in `visit_file`.
|
/// * `metadata` - Provides missing metadata in `visit_file`.
|
||||||
fn visit_additional_metadata(&mut self, metadata: &ZipStreamFileMetadata) -> ZipResult<()>;
|
fn visit_additional_metadata(&mut self, metadata: &ZipStreamFileMetadata) -> ZipResult<()>;
|
||||||
|
@ -214,7 +212,7 @@ impl ZipStreamFileMetadata {
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeSet;
|
||||||
use std::io;
|
use std::io;
|
||||||
|
|
||||||
struct DummyVisitor;
|
struct DummyVisitor;
|
||||||
|
@ -301,12 +299,12 @@ mod test {
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
struct V {
|
struct V {
|
||||||
filenames: BTreeMap<Box<str>, u8>,
|
filenames: BTreeSet<Box<str>>,
|
||||||
}
|
}
|
||||||
impl ZipStreamVisitor for V {
|
impl ZipStreamVisitor for V {
|
||||||
fn visit_file(&mut self, file: &mut ZipFile<'_>) -> ZipResult<()> {
|
fn visit_file(&mut self, file: &mut ZipFile<'_>) -> ZipResult<()> {
|
||||||
if file.is_file() {
|
if file.is_file() {
|
||||||
self.filenames.insert(file.name().into(), 1);
|
self.filenames.insert(file.name().into());
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -316,19 +314,18 @@ mod test {
|
||||||
metadata: &ZipStreamFileMetadata,
|
metadata: &ZipStreamFileMetadata,
|
||||||
) -> ZipResult<()> {
|
) -> ZipResult<()> {
|
||||||
if metadata.is_file() {
|
if metadata.is_file() {
|
||||||
let v = self.filenames.get_mut(metadata.name()).unwrap();
|
assert!(
|
||||||
*v += 1;
|
self.filenames.contains(metadata.name()),
|
||||||
|
"{} is missing its file content",
|
||||||
|
metadata.name()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut visitor = V::default();
|
reader.visit(&mut V::default()).unwrap();
|
||||||
reader.visit(&mut visitor).unwrap();
|
|
||||||
for (filename, cnt) in visitor.filenames {
|
|
||||||
assert_eq!(cnt, 2, "{filename} does not have visit_additional_metadata");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -339,7 +336,7 @@ mod test {
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
struct V {
|
struct V {
|
||||||
filenames: BTreeMap<Box<str>, u8>,
|
filenames: BTreeSet<Box<str>>,
|
||||||
}
|
}
|
||||||
impl ZipStreamVisitor for V {
|
impl ZipStreamVisitor for V {
|
||||||
fn visit_file(&mut self, file: &mut ZipFile<'_>) -> ZipResult<()> {
|
fn visit_file(&mut self, file: &mut ZipFile<'_>) -> ZipResult<()> {
|
||||||
|
@ -351,7 +348,7 @@ mod test {
|
||||||
);
|
);
|
||||||
|
|
||||||
if file.is_file() {
|
if file.is_file() {
|
||||||
self.filenames.insert(file.name().into(), 1);
|
self.filenames.insert(file.name().into());
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -361,19 +358,18 @@ mod test {
|
||||||
metadata: &ZipStreamFileMetadata,
|
metadata: &ZipStreamFileMetadata,
|
||||||
) -> ZipResult<()> {
|
) -> ZipResult<()> {
|
||||||
if metadata.is_file() {
|
if metadata.is_file() {
|
||||||
let v = self.filenames.get_mut(metadata.name()).unwrap();
|
assert!(
|
||||||
*v += 1;
|
self.filenames.contains(metadata.name()),
|
||||||
|
"{} is missing its file content",
|
||||||
|
metadata.name()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut visitor = V::default();
|
reader.visit(&mut V::default()).unwrap();
|
||||||
reader.visit(&mut visitor).unwrap();
|
|
||||||
for (filename, cnt) in visitor.filenames {
|
|
||||||
assert_eq!(cnt, 2, "{filename} does not have visit_additional_metadata");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// test case to ensure we don't preemptively over allocate based on the
|
/// test case to ensure we don't preemptively over allocate based on the
|
||||||
|
|
Loading…
Add table
Reference in a new issue