use colored::Colorize;
pub const COMMAND_COUNT: usize = 27;
pub const WORKSPACE_CRATE_COUNT: usize = 10;
pub const API_SERVICE_COUNT: usize = 8;
#[allow(dead_code)]
pub const HELP_BRAND: &str = concat!(
"\x1b[1;33mraps\x1b[0m v",
env!("CARGO_PKG_VERSION"),
" \x1b[32m·\x1b[0m Rust Autodesk Platform Services CLI"
);
pub fn print_version() {
let version = env!("CARGO_PKG_VERSION");
let mcp_tool_count = crate::mcp::tools::TOOLS.len();
println!();
println!(" {}", "▄▄▀█▄▄ ▄▄▀█▄".yellow().bold());
println!(" {}", "█▄ █▄█ ▀█".yellow().bold());
println!(" {}", " ▀█▄▄▀▀▄▄▄▄▄▀".yellow().bold());
println!(" {}", "▄▄█▀▀ ▄█▄ ▀▀█".yellow().bold());
println!(" {}", "█ ▄█▀ ▀▄▄▄█".yellow().bold());
println!(" {}", "▀▀▀▀▀ ▀▀".yellow().bold());
println!(" {}", "▄▄▄ ▄▄▄ ▄▄▄▄ ▄▄▄▄".yellow().bold());
println!(" {}", "█▄▄▀ █▄▄█ █▄▄█ █▄▄▄".yellow().bold());
println!(" {}", "█ █ █ █ █ ▄▄▄█".yellow().bold());
println!(" {}", "═══════════════════════════════════".green());
println!(" {}", "Rust Autodesk Platform Services".bright_yellow());
println!(
" {}",
"───────────────────────────────────".green().dimmed()
);
credit_line("version", version);
credit_line("author", "dmytro yemelianov");
credit_line("license", "Apache-2.0");
credit_line("edition", "Rust 2024");
println!(
" {}",
"───────────────────────────────────".green().dimmed()
);
credit_line("commands", &COMMAND_COUNT.to_string());
credit_line("mcp tools", &mcp_tool_count.to_string());
credit_line("workspace", &format!("{WORKSPACE_CRATE_COUNT} crates"));
credit_line("apis", &format!("{API_SERVICE_COUNT} services"));
println!(
" {}",
"───────────────────────────────────".green().dimmed()
);
credit_line("web", "rapscli.xyz");
credit_line("docs", "rapscli.xyz/docs");
println!(" {}", "═══════════════════════════════════".green());
println!();
}
fn credit_line(label: &str, value: &str) {
let dot_count = 20usize.saturating_sub(label.len() + 1);
let dots = "·".repeat(dot_count);
println!(
" {} {} {}",
label.dimmed(),
dots.green().dimmed(),
value.yellow().bold()
);
}
pub fn shell_welcome() {
let version = env!("CARGO_PKG_VERSION");
let mcp_tool_count = crate::mcp::tools::TOOLS.len();
let sep = " · ".green().dimmed();
println!(
"{}{}{}{}{}{}{}",
"raps".yellow().bold(),
format_args!(" v{version}").to_string().bright_yellow(),
sep,
format_args!("{COMMAND_COUNT} commands")
.to_string()
.bright_yellow(),
sep,
format_args!("{mcp_tool_count} MCP tools")
.to_string()
.bright_yellow(),
format_args!("{sep}rapscli.xyz"),
);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_command_count() {
assert_eq!(
COMMAND_COUNT, 27,
"COMMAND_COUNT drifted — update credits.rs"
);
}
#[test]
fn test_help_brand_contains_version() {
let version = env!("CARGO_PKG_VERSION");
assert!(
HELP_BRAND.contains(version),
"HELP_BRAND should contain the package version"
);
assert!(HELP_BRAND.contains("raps"));
}
#[test]
fn test_version_not_empty() {
let version = env!("CARGO_PKG_VERSION");
assert!(!version.is_empty());
}
#[test]
fn test_mcp_tool_count_reasonable() {
let count = crate::mcp::tools::TOOLS.len();
assert!(count >= 70, "Expected at least 70 MCP tools, got {count}");
}
}