12 releases

0.1.12 May 27, 2021
0.1.10 Nov 2, 2020
0.1.8 Feb 22, 2020
0.1.7 Apr 22, 2019
0.1.1 Nov 18, 2017

#260 in Encoding

Download history 37329/week @ 2022-12-02 36485/week @ 2022-12-09 35021/week @ 2022-12-16 20539/week @ 2022-12-23 25499/week @ 2022-12-30 36247/week @ 2023-01-06 40028/week @ 2023-01-13 41845/week @ 2023-01-20 46768/week @ 2023-01-27 43583/week @ 2023-02-03 50701/week @ 2023-02-10 49075/week @ 2023-02-17 59762/week @ 2023-02-24 49005/week @ 2023-03-03 62225/week @ 2023-03-10 58715/week @ 2023-03-17

238,122 downloads per month
Used in 410 crates (12 directly)

MIT license

120KB
1.5K SLoC

This library provides macros to define compile-time byte slices and arrays from encoded strings (using common bases like base64, base32, or hexadecimal, and also custom bases). It also provides a macro to define compile-time custom encodings to be used with the data-encoding crate.

See the documentation for more details.

Up to Rust 1.50, you may need to add the following to your .cargo/config.toml to use this library in no-std or no-alloc environments:

[unstable]
features = ["host_dep"]

From Rust 1.51, you may need to add the following to your Cargo.toml:

[package]
resolver = "2"

lib.rs:

Macros for data-encoding

This library provides macros to define compile-time byte arrays from encoded strings (using common bases like base64, base32, or hexadecimal, and also custom bases). It also provides a macro to define compile-time custom encodings to be used with the data-encoding crate at run-time.

Up to Rust 1.50, you may need to add the following to your .cargo/config.toml to use this library in no-std or no-alloc environments:

[unstable]
features = ["host_dep"]

From Rust 1.51, you may need to add the following to your Cargo.toml:

[package]
resolver = "2"

Examples

You can define a compile-time byte slice from an encoded string literal:

const HELLO_SLICE: &'static [u8] = &data_encoding_macro::hexlower!("68656c6c6f");
const FOOBAR_SLICE: &'static [u8] = &data_encoding_macro::base64!("Zm9vYmFy");
# fn main() {}

You can also define a compile-time byte array from an encoded string literal:

data_encoding_macro::hexlower_array!("const HELLO" = "68656c6c6f");
data_encoding_macro::base64_array!("const FOOBAR" = "Zm9vYmFy");
# fn main() {}

You can define a compile-time custom encoding from its specification:

const HEX: data_encoding::Encoding = data_encoding_macro::new_encoding! {
    symbols: "0123456789abcdef",
    translate_from: "ABCDEF",
    translate_to: "abcdef",
};
const BASE64: data_encoding::Encoding = data_encoding_macro::new_encoding! {
    symbols: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
    padding: '=',
};
# fn main() {}

Dependencies

~0.7–1MB
~26K SLoC