encoder 0.2.3

Blazing fast encoder written in Rust
Documentation

Encoder

Blazing fast encoder written in Rust

Crates.io MIT licensed Documentation Build Status Build Status Build Status

Quick Start

Number encoding

use encoder::number::Encode;

fn main() {
    let mut buf = vec![];
    1_i32.encode(&mut buf);
    2_u32.encode(&mut buf);
    1_f32.encode(&mut buf);
    2_f64.encode(&mut buf);
    assert_eq!(String::from_utf8_lossy(&buf), r#"121.02.0"#);

    assert_eq!(1_i32.stringify(), "1");
    assert_eq!(2_u32.stringify(), "2");
    assert_eq!(1_f32.stringify(), "1.0");
    assert_eq!(2_f64.stringify(), "2.0");
}

Json encoding

use encoder::json::Encode;

fn main() {
    let mut buf = vec![];
    "Hello, δΈ–η•Œ! πŸ‘‹".encode(&mut buf);
    assert_eq!(String::from_utf8_lossy(&buf), r#""Hello, δΈ–η•Œ! πŸ‘‹""#);

    assert_eq!("Hello, δΈ–η•Œ! πŸ‘‹".stringify(), r#""Hello, δΈ–η•Œ! πŸ‘‹""#);
}

Benchmark

  • MacBook Air, Apple M2 24G, Sonoma 14.2.1
Module Name Time
number i8_max [1.1761 ns 1.1767 ns 1.1775 ns]
number i8_min [1.1752 ns 1.1754 ns 1.1757 ns]
number u8_max [1.1759 ns 1.1761 ns 1.1764 ns]
number u8_min [1.1759 ns 1.1761 ns 1.1763 ns]
number i16_max [8.0300 ns 8.0445 ns 8.0584 ns]
number i16_min [8.1324 ns 8.1535 ns 8.1812 ns]
number u16_max [1.4697 ns 1.4698 ns 1.4700 ns]
number u16_min [1.1757 ns 1.1759 ns 1.1762 ns]
number i32_max [7.0862 ns 7.0872 ns 7.0883 ns]
number i32_min [8.5705 ns 8.6005 ns 8.6398 ns]
number u32_max [1.3195 ns 1.3198 ns 1.3201 ns]
number u32_min [1.1770 ns 1.1808 ns 1.1861 ns]
number i64_max [10.288 ns 10.290 ns 10.292 ns]
number i64_min [10.855 ns 10.865 ns 10.879 ns]
number u64_max [1.3718 ns 1.3733 ns 1.3750 ns]
number u64_min [1.1759 ns 1.1763 ns 1.1769 ns]
number i128_max [19.546 ns 19.550 ns 19.555 ns]
number i128_min [17.532 ns 17.539 ns 17.549 ns]
number u128_max [13.521 ns 13.523 ns 13.526 ns]
number u128_min [4.7052 ns 4.7076 ns 4.7108 ns]
number isize_max [10.283 ns 10.286 ns 10.288 ns]
number isize_min [10.868 ns 10.873 ns 10.877 ns]
number usize_max [1.3723 ns 1.3737 ns 1.3751 ns]
number usize_min [1.1758 ns 1.1760 ns 1.1763 ns]
number true [1.1758 ns 1.1760 ns 1.1762 ns]
number false [1.1759 ns 1.1760 ns 1.1763 ns]
number f32_max [8.3351 ns 8.3541 ns 8.3808 ns]
number f32_min [8.5761 ns 8.6520 ns 8.7527 ns]
number f64_max [13.214 ns 13.250 ns 13.300 ns]
number f64_min [13.563 ns 13.655 ns 13.744 ns]
json char [6.4216 ns 6.4337 ns 6.4483 ns]
json str [13.003 ns 13.151 ns 13.319 ns]
json string [12.717 ns 12.776 ns 12.849 ns]
json option [6.7864 ns 6.8134 ns 6.8431 ns]
json array_raw [23.851 ns 23.895 ns 23.955 ns]
json array_vec [16.519 ns 16.547 ns 16.585 ns]
json array_vec_deque [20.612 ns 21.718 ns 23.281 ns]
json set_hash [19.402 ns 19.498 ns 19.622 ns]
json set_btree [25.521 ns 25.752 ns 26.026 ns]
json set_index [16.864 ns 16.914 ns 16.978 ns]
json object_hash [57.765 ns 58.195 ns 58.669 ns]
json object_btree [62.765 ns 63.046 ns 63.337 ns]
json object_index [56.811 ns 57.271 ns 57.810 ns]
  • AWS c5.2xlarge, 8C 16G, Ubuntu 22.04
Module Name Time
number i8_max [3.0653 ns 3.0656 ns 3.0661 ns]
number i8_min [2.7852 ns 2.7853 ns 2.7854 ns]
number u8_max [3.0634 ns 3.0635 ns 3.0637 ns]
number u8_min [2.7856 ns 2.7859 ns 2.7863 ns]
number i16_max [11.146 ns 11.146 ns 11.147 ns]
number i16_min [12.272 ns 12.273 ns 12.274 ns]
number u16_max [3.0640 ns 3.0643 ns 3.0646 ns]
number u16_min [2.7854 ns 2.7857 ns 2.7861 ns]
number i32_max [11.994 ns 11.998 ns 12.002 ns]
number i32_min [13.939 ns 13.940 ns 13.941 ns]
number u32_max [3.0633 ns 3.0634 ns 3.0635 ns]
number u32_min [2.7852 ns 2.7853 ns 2.7855 ns]
number i64_max [15.952 ns 15.957 ns 15.963 ns]
number i64_min [16.437 ns 16.438 ns 16.439 ns]
number u64_max [3.0642 ns 3.0644 ns 3.0646 ns]
number u64_min [2.7852 ns 2.7854 ns 2.7857 ns]
number i128_max [32.384 ns 32.387 ns 32.391 ns]
number i128_min [32.707 ns 32.711 ns 32.716 ns]
number u128_max [19.774 ns 19.776 ns 19.778 ns]
number u128_min [9.1635 ns 9.1670 ns 9.1705 ns]
number isize_max [15.943 ns 15.947 ns 15.952 ns]
number isize_min [16.446 ns 16.451 ns 16.459 ns]
number usize_max [3.0647 ns 3.0651 ns 3.0655 ns]
number usize_min [2.7860 ns 2.7863 ns 2.7866 ns]
number true [2.7849 ns 2.7850 ns 2.7850 ns]
number false [3.0634 ns 3.0644 ns 3.0657 ns]
number f32_max [18.413 ns 18.436 ns 18.459 ns]
number f32_min [18.370 ns 18.382 ns 18.395 ns]
number f64_max [25.477 ns 25.483 ns 25.488 ns]
number f64_min [25.473 ns 25.477 ns 25.480 ns]
json char [10.996 ns 10.996 ns 10.997 ns]
json str [21.990 ns 21.994 ns 21.997 ns]
json string [22.347 ns 22.362 ns 22.377 ns]
json option [9.8923 ns 9.9044 ns 9.9168 ns]
json array_raw [45.982 ns 45.985 ns 45.988 ns]
json array_vec [35.649 ns 35.651 ns 35.655 ns]
json array_vec_deque [41.837 ns 41.849 ns 41.861 ns]
json set_hash [37.887 ns 37.892 ns 37.896 ns]
json set_btree [61.903 ns 61.945 ns 61.981 ns]
json set_index [35.652 ns 35.655 ns 35.660 ns]
json object_hash [89.120 ns 89.157 ns 89.203 ns]
json object_btree [107.65 ns 107.74 ns 107.82 ns]
json object_index [86.747 ns 86.799 ns 86.850 ns]

License

This software is released under the MIT License.

Third-party libraries used herein remain the property of their respective authors. Modified library code resides in the 'lib' directory. Our sincere thanks to these authors.