pub mod builder;
pub mod config;
pub mod context;
pub mod error;
pub mod executor;
pub mod help;
pub mod interface;
pub mod parser;
pub mod registry;
pub mod utils;
pub mod validator;
pub use context::{downcast_mut, downcast_ref, ExecutionContext};
pub use executor::CommandHandler;
pub use error::{DynamicCliError, Result};
pub use config::schema::{
ArgumentDefinition, ArgumentType, CommandDefinition, CommandsConfig, Metadata,
OptionDefinition, ValidationRule,
};
pub use registry::CommandRegistry;
pub use parser::{CliParser, ParsedCommand, ReplParser};
pub use validator::{validate_file_exists, validate_file_extension, validate_range};
pub use interface::{CliInterface, ReplInterface};
pub use builder::{CliApp, CliBuilder};
pub use help::{DefaultHelpFormatter, HelpFormatter};
pub use utils::{
detect_type, format_bytes, format_duration, get_extension, has_extension, is_blank, normalize,
normalize_path, parse_bool, parse_float, parse_int, truncate,
};
pub mod prelude {
pub use crate::context::{downcast_mut, downcast_ref, ExecutionContext};
pub use crate::executor::CommandHandler;
pub use crate::error::{DynamicCliError, Result};
pub use crate::config::schema::{ArgumentType, CommandsConfig};
pub use crate::registry::CommandRegistry;
pub use crate::parser::{CliParser, ParsedCommand, ReplParser};
pub use crate::validator::{validate_file_exists, validate_file_extension, validate_range};
pub use crate::interface::{CliInterface, ReplInterface};
pub use crate::builder::{CliApp, CliBuilder};
pub use crate::help::{DefaultHelpFormatter, HelpFormatter};
pub use crate::utils::{detect_type, is_blank, normalize, parse_bool, parse_float, parse_int};
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_prelude_imports() {
use crate::prelude::*;
let _: Option<&dyn ExecutionContext> = None;
let _: Option<&dyn CommandHandler> = None;
}
#[test]
fn test_module_imports() {
use crate::config::schema::CommandsConfig;
use crate::parser::ParsedCommand;
use crate::registry::CommandRegistry;
let _config = CommandsConfig::minimal();
let _registry = CommandRegistry::new();
let _parsed = ParsedCommand {
command_name: "test".to_string(),
arguments: std::collections::HashMap::new(),
};
}
#[test]
fn test_reexports() {
let _: Option<&dyn ExecutionContext> = None;
let _: Option<&dyn CommandHandler> = None;
let _registry = CommandRegistry::new();
}
#[test]
fn test_help_prelude_imports() {
use crate::config::schema::{CommandsConfig, Metadata};
use crate::prelude::*;
let config = CommandsConfig {
metadata: Metadata {
version: "1.0.0".to_string(),
prompt: "test".to_string(),
prompt_suffix: " > ".to_string(),
},
commands: vec![],
global_options: vec![],
};
let f = DefaultHelpFormatter::new();
let _ = f.format_app(&config);
let _: Box<dyn HelpFormatter> = Box::new(DefaultHelpFormatter::new());
}
}