radix64

Crates.ioradix64
lib.rsradix64
version0.6.2
sourcesrc
created_at2019-07-19 15:36:39.632274
updated_at2019-07-28 14:06:41.196131
descriptionA base64 library by another name
homepagehttps://github.com/ggriffiniii/radix64
repositoryhttps://github.com/ggriffiniii/radix64
max_upload_size
id150147
size208,981
(ggriffiniii)

documentation

https://docs.rs/radix64

README

radix64

Docs build status

Fast and easy base64 encoding and decoding.

Usage

Encode and decode with the standard alphabet

use radix64::STD;
let encoded = STD.encode("my message");
let decoded = STD.decode(&encoded).unwrap();
assert_eq!("my message".as_bytes(), &decoded);

Encode and decode with the url safe alphabet

use radix64::URL_SAFE;
let encoded = URL_SAFE.encode("my message");
let decoded = URL_SAFE.decode(&encoded).unwrap();
assert_eq!("my message".as_bytes(), &decoded);

Encode multiple messages reusing the same allocated buffer for each message.

use radix64::STD;
let mut buf = Vec::new();
let encoded = STD.encode_with_buffer("my message", &buf);
let encoded = STD.encode_with_buffer("my second message", &buf);

Decode multiple messages reusing the same allocated buffer for each message.

use radix64::STD;
let mut buf = Vec::new();
let decoded = STD.decode_with_buffer("AABB", &buf);
let decoded = STD.decode_with_buffer("AA==", &buf);

Define and use a custom alphabet

use radix64::ConfigBuilder;
let my_cfg =
    ConfigBuilder::with_alphabet("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#&")
        .no_padding()
        .build()
        .unwrap();
let encoded = my_cfg.encode("my message");
let decoded = my_cfg.decode(&encoded).unwrap();

Performance

The standard alphabets (STD, URL_SAFE, and CRYPT) along with the NO_PAD variants all have an AVX2 optimized encoder and decoder. This provides a huge performance boost if running on an AVX2 enabled CPU. A runtime check will be performed by default to see if AVX2 is available. If you specify compiling for an AVX2 enabled platform the runtime check will be avoided. If you want to avoid using the AVX2 implementation you can disable the "simd" feature when compiling the crate.

See a sample of benchmark runs here

Commit count: 62

cargo fmt