1use notebook::discover::{Limits, Local, discover};
2
3fn 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}