dysk_cli/
lib.rs

1pub mod args;
2pub mod col;
3pub mod col_expr;
4pub mod cols;
5pub mod csv;
6pub mod filter;
7pub mod help;
8pub mod json;
9pub mod list_cols;
10pub mod normal;
11pub mod order;
12pub mod sorting;
13pub mod table;
14pub mod units;
15
16use {
17    crate::{
18        args::*,
19        normal::*,
20    },
21    clap::Parser,
22};
23
24#[allow(clippy::match_like_matches_macro)]
25pub fn run() {
26    let args = Args::parse();
27    if args.version {
28        println!("dysk {}", env!("CARGO_PKG_VERSION"));
29        return;
30    }
31    if args.help {
32        help::print(args.ascii);
33        csi_reset();
34        return;
35    }
36    if args.list_cols {
37        list_cols::print(args.color(), args.ascii);
38        csi_reset();
39        return;
40    }
41    let mut options =
42        lfs_core::ReadOptions::default()
43        .remote_stats(args.remote_stats.unwrap_or_else(|| true));
44    if let Some(strategy) = &args.strategy {
45        match strategy.parse() {
46            Ok(strategy) => {
47                options = options.strategy(strategy);
48            }
49            Err(_) => {
50                eprintln!("Ignoring unrecognized strategy");
51            }
52        }
53    }
54    let mut mounts = match lfs_core::read_mounts(&options) {
55        Ok(mounts) => mounts,
56        Err(e) => {
57            eprintln!("Error reading mounts: {}", e);
58            return;
59        }
60    };
61    if !args.all {
62        mounts.retain(is_normal);
63    }
64    #[cfg(unix)]
65    if let Some(path) = &args.path {
66        use std::os::unix::fs::MetadataExt;
67        let md = match std::fs::metadata(path) {
68            Ok(md) => md,
69            Err(e) => {
70                eprintln!("Can't read {:?} : {}", path, e);
71                return;
72            }
73        };
74        let dev = lfs_core::DeviceId::from(md.dev());
75        mounts.retain(|m| m.info.dev == dev);
76    }
77    args.sort.sort(&mut mounts);
78    let mounts = match args.filter.clone().unwrap_or_default().filter(&mounts) {
79        Ok(mounts) => mounts,
80        Err(e) => {
81            eprintln!("Error in filter evaluation: {}", e);
82            return;
83        }
84    };
85    if args.csv {
86        csv::print(&mounts, &args).expect("writing csv failed");
87        return;
88    }
89    if args.json {
90        println!(
91            "{}",
92            serde_json::to_string_pretty(&json::output_value(&mounts, args.units)).unwrap()
93        );
94        return;
95    }
96    if mounts.is_empty() {
97        println!("no mount to display - try\n    dysk -a");
98        return;
99    }
100    table::print(&mounts, args.color(), &args);
101    csi_reset();
102}
103
104/// output a Reset CSI sequence
105fn csi_reset() {
106    print!("\u{1b}[0m");
107}