1#![feature(exit_status_error)]
6
7use std::process::Command;
8
9use rootcause::prelude::ResultExt;
10use rootcause::report;
11use ytil_sys::cli::Args;
12
13#[ytil_sys::main]
15fn main() -> rootcause::Result<()> {
16 let args = ytil_sys::cli::get();
17
18 if args.has_help() {
19 println!(include_str!("../help.txt"));
20 return Ok(());
21 }
22
23 let path = args
24 .first()
25 .ok_or_else(|| {
26 eprintln!("{}", include_str!("../help.txt"));
27 report!("missing path arg")
28 })
29 .attach_with(|| format!("args={args:#?}"))?;
30
31 let metadata = std::fs::metadata(path)?;
32
33 if metadata.is_dir() {
34 return Ok(Command::new("ls")
35 .args(["-llAtrh", "--color=always", path])
36 .status()?
37 .exit_ok()?);
38 }
39
40 if metadata.is_file() || metadata.is_symlink() {
41 return Ok(Command::new("cat").args([path]).status()?.exit_ok()?);
42 }
43
44 Err(report!("unsupported file type").attach(format!("path={path:?}")))
45}