1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- use eliza_error::Error;
- use std::path::Path;
- use xml::writer::events::XmlEvent;
- struct DirWriter<W: std::io::Write> {
- writer: xml::writer::EventWriter<W>,
- }
- impl<W: std::io::Write> DirWriter<W> {
- fn walk_root(&mut self) -> Result<(), Error> {
- self.writer
- .write(XmlEvent::start_element("dir").attr("name", "."))?;
- self.walk(&Path::new("."))?;
- self.writer.write(XmlEvent::end_element())?;
- Ok(())
- }
- fn walk(&mut self, path: &Path) -> Result<(), Error> {
- for entry in std::fs::read_dir(path)? {
- let entry = entry?;
- let path = entry.path();
- let name = path.file_name().unwrap().to_str().unwrap();
- if path.is_dir() {
- self.writer
- .write(XmlEvent::start_element("dir").attr("name", name))?;
- self.walk(&path)?;
- self.writer.write(XmlEvent::end_element())?;
- } else {
- self.writer
- .write(XmlEvent::start_element("file").attr("name", name))?;
- let contents = std::fs::read_to_string(path)?;
- self.writer.write(XmlEvent::characters(&contents))?;
- self.writer.write(XmlEvent::end_element())?;
- }
- }
- Ok(())
- }
- }
- fn main() -> () {
- let mut writer = DirWriter {
- writer: xml::writer::EventWriter::new(std::io::stdout()),
- };
- if let Err(err) = writer.walk_root() {
- eprintln!("shit's fucked: {:?}", err);
- }
- }
|