| 1 | use notebook::discover::{Limits, Local, discover}; |
| 2 | |
| 3 | fn main() -> Result<(), Box<dyn std::error::Error>> { |
| 4 | let args: Vec<_> = std::env::args_os().skip(1).collect(); |
| 5 | let limits = Limits { |
| 6 | entries: 100_000, |
| 7 | bytes_per_file: 256 * 1024 * 1024, |
| 8 | depth: 64, |
| 9 | }; |
| 10 | let catalog = match args.as_slice() { |
| 11 | [root] => discover(&mut Local::open(root)?, limits)?, |
| 12 | #[cfg(feature = "smb")] |
| 13 | [flag, address, share, root] if flag == "--smb" => { |
| 14 | use notebook::smb::{Client, Credentials}; |
| 15 | let username = std::env::var("ONESTORE_SMB_USERNAME").unwrap_or_default(); |
| 16 | let password = std::env::var("ONESTORE_SMB_PASSWORD").unwrap_or_default(); |
| 17 | let domain = std::env::var("ONESTORE_SMB_DOMAIN").unwrap_or_default(); |
| 18 | let client = Client::connect( |
| 19 | address.to_str().ok_or("Use a UTF-8 server address")?, |
| 20 | share.to_str().ok_or("Use a UTF-8 share name")?, |
| 21 | Credentials { |
| 22 | username: &username, |
| 23 | password: &password, |
| 24 | domain: &domain, |
| 25 | }, |
| 26 | std::time::Duration::from_secs(5), |
| 27 | )?; |
| 28 | discover( |
| 29 | &mut notebook::discover::Smb::new( |
| 30 | &client, |
| 31 | root.to_str().ok_or("Use a UTF-8 notebook path")?, |
| 32 | )?, |
| 33 | limits, |
| 34 | )? |
| 35 | } |
| 36 | _ => return Err("Provide ROOT, or --smb ADDRESS SHARE ROOT with the smb feature".into()), |
| 37 | }; |
| 38 | serde_json::to_writer_pretty(std::io::stdout().lock(), &catalog)?; |
| 39 | Ok(()) |
| 40 | } |