Skip to main content

use_cli/
lib.rs

1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4//! Facade for `RustUse` CLI-adjacent primitive crates.
5
6pub use use_arg as arg;
7pub use use_command_name as command_name;
8pub use use_env_var as env_var;
9pub use use_exit_code as exit_code;
10pub use use_flag as flag;
11pub use use_option as option;
12pub use use_prompt as prompt;
13pub use use_stderr as stderr;
14pub use use_stdin as stdin;
15pub use use_stdout as stdout;
16pub use use_terminal as terminal;
17
18/// Commonly used CLI primitive types from the focused crates.
19pub mod prelude {
20    pub use crate::arg::{Arg, RawArgs};
21    pub use crate::command_name::{CommandName, ExecutableName};
22    pub use crate::env_var::{EnvVarName, EnvVarValue};
23    pub use crate::exit_code::{CONFIG_ERROR, ExitCode, FAILURE, SUCCESS, USAGE_ERROR};
24    pub use crate::flag::{BooleanFlag, Flag, LongFlag, ShortFlag};
25    pub use crate::option::{CliOption, CliOptionName, OptionValue};
26    pub use crate::prompt::{PromptText, YesNoAnswer};
27    pub use crate::stderr::StderrDestination;
28    pub use crate::stdin::StdinSource;
29    pub use crate::stdout::{NewlineBehavior, StdoutDestination};
30    pub use crate::terminal::{
31        ColorSupport, Interactivity, TerminalHeight, TerminalSize, TerminalWidth,
32    };
33}
34
35#[cfg(test)]
36mod tests {
37    use super::{arg, command_name, exit_code, flag, option, terminal};
38
39    #[test]
40    fn facade_exposes_cli_primitives() -> Result<(), Box<dyn std::error::Error>> {
41        let command = command_name::CommandName::new("rustuse")?;
42        let verbose = flag::BooleanFlag::enabled(flag::Flag::try_from_token("--verbose")?);
43        let output = option::CliOption::from_name_value("format", "json")?;
44        let input = arg::Arg::from("README.md");
45        let size = terminal::TerminalSize::try_new(80, 24)?;
46
47        assert_eq!(command.as_str(), "rustuse");
48        assert!(verbose.is_enabled());
49        assert_eq!(output.to_equals_token(), "--format=json");
50        assert!(input.is_positional());
51        assert_eq!(exit_code::SUCCESS.as_i32(), 0);
52        assert_eq!(size.width().columns(), 80);
53        Ok(())
54    }
55}