anyreader_walker/
stack.rs1use crate::entry::{EntryDetails, FileEntry};
2use crate::walkers::ArchiveVisitor;
3use anyreader::FormatKind;
4use std::io::Read;
5
6#[allow(unused_variables)]
7pub trait AnyWalker: Sized {
8 fn visit_file_entry(&mut self, entry: &mut FileEntry<impl Read>) -> std::io::Result<()>;
9
10 fn begin_visit_archive(
11 &mut self,
12 details: &EntryDetails,
13 format: FormatKind,
14 ) -> std::io::Result<bool> {
15 Ok(true)
16 }
17
18 fn end_visit_archive(
19 &mut self,
20 details: EntryDetails,
21 format: FormatKind,
22 ) -> std::io::Result<()> {
23 Ok(())
24 }
25
26 fn walk(&mut self, mut entry: FileEntry<impl Read>) -> std::io::Result<()> {
27 if entry.supports_recursion()
28 && self.begin_visit_archive(entry.details(), entry.format())?
29 {
30 let details = entry.details().clone();
31 let format = entry.format();
32 entry.visit(self)?;
33 self.end_visit_archive(details, format)?;
34 Ok(())
35 } else {
36 self.visit_file_entry(&mut entry)?;
37 Ok(())
38 }
39 }
40}