rust-auth-utils 1.0.0

A rust port of @better-auth/utils.
Documentation
use crate::base32::{Base32, Base32Hex};

#[test]
fn test_base32_encode() {
    let test_cases: Vec<(&[u8], &str)> = vec![
        (b"Hello, World!", "JBSWY3DPFQQFO33SNRSCC==="),
        (b"", ""),
        (b"f", "MY======"),
        (b"fo", "MZXQ===="),
        (b"foo", "MZXW6==="),
        (b"foob", "MZXW6YQ="),
        (b"fooba", "MZXW6YTB"),
        (b"foobar", "MZXW6YTBOI======"),
    ];

    for (input, expected) in test_cases {
        assert_eq!(Base32::encode(input, None), expected);
    }
}

#[test]
fn test_base32_decode() {
    let test_cases: Vec<(&str, &[u8])> = vec![
        ("JBSWY3DPFQQFO33SNRSCC===", b"Hello, World!"),
        ("", b""),
        ("MY======", b"f"),
        ("MZXQ====", b"fo"),
        ("MZXW6===", b"foo"),
        ("MZXW6YQ=", b"foob"),
        ("MZXW6YTB", b"fooba"),
        ("MZXW6YTBOI======", b"foobar"),
    ];

    for (input, expected) in test_cases {
        assert_eq!(Base32::decode(input).unwrap(), expected);
    }
}

#[test]
fn test_base32hex_encode() {
    let test_cases: Vec<(&[u8], &str)> = vec![
        (b"Hello, World!", "91IMOR3F5GG5ERRIDHI22==="),
        (b"", ""),
        (b"f", "CO======"),
        (b"fo", "CPNG===="),
        (b"foo", "CPNMU==="),
        (b"foob", "CPNMUOG="),
        (b"fooba", "CPNMUOJ1"),
        (b"foobar", "CPNMUOJ1E8======"),
    ];

    for (input, expected) in test_cases {
        let output = Base32Hex::encode(input, None);
        assert_eq!(output.replace(" ", ""), expected.replace(" ", ""));
    }
}

#[test]
fn test_base32hex_decode() {
    let test_cases: Vec<(&str, &[u8])> = vec![
        ("91IMOR3F5GG5ERRIDHI22===", b"Hello, World!"),
        ("", b""),
        ("CO======", b"f"),
        ("CPNG====", b"fo"),
        ("CPNMU===", b"foo"),
        ("CPNMUOG=", b"foob"),
        ("CPNMUOJ1", b"fooba"),
        ("CPNMUOJ1E8======", b"foobar"),
    ];

    for (input, expected) in test_cases {
        assert_eq!(Base32Hex::decode(input).unwrap(), expected);
    }
}

#[test]
fn test_padding_options() {
    let input = b"Hello";
    assert_eq!(Base32::encode(input, Some(true)), "JBSWY3DP");
    assert_eq!(Base32::encode(input, Some(false)), "JBSWY3DP");
}

#[test]
fn test_invalid_input() {
    let result = Base32::decode("!@#$%^&*");
    assert!(result.is_err());

    let error = result.unwrap_err();
    assert!(error.contains("Invalid Base32 character"));
}