1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4pub 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
18pub 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}