#![cfg_attr(feature = "cargo-clippy", allow(cast_lossless))]
#![deny(
missing_docs,
trivial_casts,
trivial_numeric_casts,
unused_extern_crates,
unused_import_braces,
unused_results,
variant_size_differences,
warnings,
unsafe_code
)]
extern crate byteorder;
mod chunked_encoder;
pub mod display;
mod tables;
pub mod write;
mod encode;
pub use encode::{encode, encode_config, encode_config_buf, encode_config_slice};
mod decode;
pub use decode::{decode, decode_config, decode_config_buf, decode_config_slice, DecodeError};
#[cfg(test)]
mod tests;
#[derive(Clone, Copy, Debug)]
pub enum CharacterSet {
Standard,
UrlSafe,
Crypt,
}
impl CharacterSet {
fn encode_table(self) -> &'static [u8; 64] {
match self {
CharacterSet::Standard => tables::STANDARD_ENCODE,
CharacterSet::UrlSafe => tables::URL_SAFE_ENCODE,
CharacterSet::Crypt => tables::CRYPT_ENCODE,
}
}
fn decode_table(self) -> &'static [u8; 256] {
match self {
CharacterSet::Standard => tables::STANDARD_DECODE,
CharacterSet::UrlSafe => tables::URL_SAFE_DECODE,
CharacterSet::Crypt => tables::CRYPT_DECODE,
}
}
}
#[derive(Clone, Copy, Debug)]
pub struct Config {
char_set: CharacterSet,
pad: bool,
decode_allow_trailing_bits: bool,
}
impl Config {
pub fn new(char_set: CharacterSet, pad: bool) -> Config {
Config { char_set, pad, decode_allow_trailing_bits: false }
}
pub fn pad(self, pad: bool) -> Config {
Config { pad, ..self }
}
pub fn decode_allow_trailing_bits(self, allow: bool) -> Config {
Config { decode_allow_trailing_bits: allow, ..self }
}
}
pub const STANDARD: Config = Config {
char_set: CharacterSet::Standard,
pad: true,
decode_allow_trailing_bits: false,
};
pub const STANDARD_NO_PAD: Config = Config {
char_set: CharacterSet::Standard,
pad: false,
decode_allow_trailing_bits: false,
};
pub const URL_SAFE: Config = Config {
char_set: CharacterSet::UrlSafe,
pad: true,
decode_allow_trailing_bits: false,
};
pub const URL_SAFE_NO_PAD: Config = Config {
char_set: CharacterSet::UrlSafe,
pad: false,
decode_allow_trailing_bits: false,
};
pub const CRYPT: Config = Config {
char_set: CharacterSet::Crypt,
pad: false,
decode_allow_trailing_bits: false,
};