pub const ALPHABET_LEN: usize = 64;
pub const REV_ALPHABET_LEN: usize = 256;
pub const STD_ALPHABET: &Base64Alphabet =
b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
pub const STD_REV_ALPHABET: &Base64ReverseAlphabet = &base64_reverse_alphabet(STD_ALPHABET);
pub const URL_ALPHABET: &Base64Alphabet =
b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
pub const URL_REV_ALPHABET: &Base64ReverseAlphabet = &base64_reverse_alphabet(URL_ALPHABET);
pub const PAD_BYTE: u8 = b"="[0];
pub const IN_GROUP_BYTES: usize = 3;
pub const OUT_GROUP_BYTES: usize = 4;
pub type Base64Alphabet = [u8; ALPHABET_LEN];
pub type Base64ReverseAlphabet = [u8; REV_ALPHABET_LEN];
pub const fn base64_reverse_alphabet(alphabet: &Base64Alphabet) -> Base64ReverseAlphabet {
let mut rev = [0u8; REV_ALPHABET_LEN];
let mut i = 0;
while i < ALPHABET_LEN {
rev[alphabet[i] as usize] = i as u8;
i += 1;
}
rev
}