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 }