/ examples / adls-async.rs
adls-async.rs
 1  use macro_rules_attribute::apply;
 2  use smol::stream::StreamExt;
 3  use smol_macros::{Executor, main};
 4  use std::{env, process};
 5  
 6  #[apply(main!)]
 7  async fn main(ex: &Executor<'_>) -> anyhow::Result<()> {
 8      let args: Vec<String> = env::args().collect();
 9      if args.len() < 2 {
10          eprintln!("Usage: {} <DIR>", args[0]);
11          process::exit(1);
12      }
13  
14      let path = &args[1];
15      let Ok(mut entries) = adfs::read_dir_async(path).await else {
16          eprintln!("failed to scan directory");
17          process::exit(1);
18      };
19  
20      while let Ok(Some(dirent)) = entries.try_next().await {
21          if let Some(finf) = &dirent.finder_info {
22              println!(
23                  "{:?}, {:?} rsrc={:?} {:?}, {:?}",
24                  dirent.inner.path(),
25                  dirent.total_size().await,
26                  dirent.rsrc_size,
27                  finf.file_type(),
28                  finf.creator()
29              );
30          } else {
31              println!(
32                  "{:?}, {:?} rsrc={:?} {:?}, {:?}",
33                  dirent.inner.path(),
34                  dirent.total_size().await,
35                  dirent.rsrc_size,
36                  adfs::FourCC(*b"????"),
37                  adfs::FourCC(*b"????")
38              );
39          }
40      }
41      Ok(())
42  }