arglite 0.1.0

A lightweight argument parser for command-line applications.
Documentation
pub mod parser;
pub mod error;

pub use parser::ArgParser;
pub use error::ArgLiteError;

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_parse_basic_args() {
        let mut parser = ArgParser::new();
        parser.add_flag("verbose");
        parser.add_positional("filename");

        let args = vec![
            "arglite".to_string(),
            "--verbose".to_string(),
            "example.txt".to_string(),
        ];

        let result = parser.parse(args);
        assert!(result.is_ok());
        assert_eq!(parser.get("verbose"), Some(&"true".to_string()));
        assert_eq!(parser.get("filename"), Some(&"example.txt".to_string()));
    }

    #[test]
    fn test_missing_positional_arg() {
        let mut parser = ArgParser::new();
        parser.add_positional("filename");

        let args = vec!["arglite".to_string()];

        let result = parser.parse(args);
        assert!(result.is_err());
    }

    #[test]
    fn test_unknown_flag() {
        let mut parser = ArgParser::new();
        parser.add_flag("verbose");

        let args = vec![
            "arglite".to_string(),
            "--unknown".to_string(),
        ];

        let result = parser.parse(args);
        assert!(matches!(result, Err(ArgLiteError::UnknownFlag(_))));
    }

    #[test]
    fn test_unexpected_arg() {
        let mut parser = ArgParser::new();
        parser.add_positional("filename");

        let args = vec![
            "arglite".to_string(),
            "example.txt".to_string(),
            "unexpected".to_string(),
        ];

        let result = parser.parse(args);
        assert!(matches!(result, Err(ArgLiteError::ParseError(_))));
    }
}