Thanks to visit codestin.com
Credit goes to lib.rs

25 releases

new 0.4.4 May 22, 2026
0.4.1 Sep 26, 2025
0.3.1 Apr 17, 2025
0.3.0 Feb 7, 2025
0.1.6 Jun 19, 2024

#805 in Filesystem


Used in 2 crates

Apache-2.0

30KB
862 lines

What is it?

A tool to help you build CLI programs quickly.

Motivating Example

#[derive(Acts)]
#[acts(desc = "salt")]
#[allow(dead_code)]
pub struct Main(
    Printscreen,
    Copy,
    Paste,
    Headset,
    # ...
);

#[derive(Args)]
#[args(desc = "Take a screenshot.")]
struct Printscreen {
    # Static defaults
    #[arg(desc = "The saved image.", s = ("/tmp/image.png"))]
    pub path: String,
}
impl Run<C> for Printscreen {
    type R = ();
    fn run(_: &C, a: Self) -> Result<Self::R, String> {
        sh::printscreen(&a.path)
    }
}

#[derive(Args)]
#[args(desc = "Copy to clipboard.")]
struct Copy {}
impl Run<C> for Copy {
    type R = ();
    fn run(_: &C, _: Self) -> Result<Self::R, String> {
        sh::copy()
    }
}

#[derive(Args)]
#[args(desc = "Paste from clipboard.")]
struct Paste {
    #[arg(desc = "Path to paste the file to.")]
    pub path: Option<String>
}
impl Run<C> for Paste {
    type R = String;
    fn run(_: &C, a: Self) -> Result<Self::R, String> {
        let r = sh::paste()?;
        println!("{r}");
        if let Some(p) => a.path {
            # ...
        }
        Ok(r)
    }
}

# Submenus
#[derive(Acts)]
#[acts(desc = "Headset controls.")]
#[allow(dead_code)]
pub struct Headset(Con, Dis);

#[derive(Args)]
#[args(desc = "Disconnect.")]
struct Dis {
    # Dynamic defaults
    #[arg(desc = "Headphone identifier.", d = |c| c.get_headphone())]
    pub path: String,
}
impl Run<C> for Dis {
    type R = ();
    fn run(c: &C, _: Self) -> Result<Self::R, String> {
        # ...
    }
}
$ salt
Expected an act.
? Choose an action.
> printscreen   Take a screenshot.
  headset       Headset controls.
  copy          Copy to clipboard.
  paste         Paste from clipboard.
[↑↓ to move, enter to select, type to filter]
# Submenus
$ salt
Expected an act.
> Choose an action. headset       Headset controls.
Expected an act.
? Choose an action.
  con Connect.
> dis Disconnect.
[↑↓ to move, enter to select, type to filter]
Operation was interrupted by the user
# Print help when needed.
$ salt gopro
Failed to parse opts.
Error parsing option '--dev.'
Required.
Usage: salt gopro <opts...>
Opts:
--dev Req<String> The device name for the GoPro. ex) /dev/sde1

Example projects

More to be published soon.

Dependencies

~9–15MB
~300K SLoC