Skip to main content

torsh_cli/
lib.rs

1//! ToRSh CLI Library
2//!
3//! This library provides the core functionality for the ToRSh command-line interface,
4//! including configuration management, command implementations, and utilities.
5
6pub mod commands;
7pub mod config;
8mod tls;
9pub mod utils;
10
11// Re-export commonly used types
12pub use config::Config;
13
14/// CLI version information
15pub const VERSION: &str = env!("CARGO_PKG_VERSION");
16pub const VERSION_MAJOR: u32 = 0;
17pub const VERSION_MINOR: u32 = 1;
18pub const VERSION_PATCH: u32 = 0;
19
20/// Error returned when the running CLI is older than a required version.
21#[derive(Debug, thiserror::Error)]
22#[error("ToRSh CLI version {required_major}.{required_minor} or higher required, but got {have_major}.{have_minor}")]
23pub struct VersionMismatch {
24    /// Required major version.
25    pub required_major: u32,
26    /// Required minor version.
27    pub required_minor: u32,
28    /// Running major version.
29    pub have_major: u32,
30    /// Running minor version.
31    pub have_minor: u32,
32}
33
34/// Check if CLI version is compatible with required version.
35pub fn check_version(required_major: u32, required_minor: u32) -> Result<(), VersionMismatch> {
36    if VERSION_MAJOR < required_major
37        || (VERSION_MAJOR == required_major && VERSION_MINOR < required_minor)
38    {
39        return Err(VersionMismatch {
40            required_major,
41            required_minor,
42            have_major: VERSION_MAJOR,
43            have_minor: VERSION_MINOR,
44        });
45    }
46    Ok(())
47}
48
49#[cfg(test)]
50mod tests {
51    use super::*;
52
53    #[test]
54    fn test_version_check() {
55        assert!(check_version(0, 1).is_ok());
56        assert!(check_version(1, 0).is_err());
57    }
58}