json_in_type 0.1.0

a library for fast json serialization
json_in_type-0.1.0 doesn't have any documentation.

json_in_type

Fast json encoder in rust, that does more at compile time, and less at run time. One notable feature is the ability to encode the structure of JSON objects in their type.

This allows for a very compact representation of objects in memory, and up to an order of magnitude better performance than the traditional approach (used by serde's json! marco, for instance) where JSON objects are stored as HashMaps.

Exemple use

extern crate json_in_type;

use json_in_type::*;

fn main() {
    let void = ();
    let list = json_list![1,2,3];
    let dynamic_key = "hello";
    
    let json_val = JSON(json_object!{
        void, list,
        [dynamic_key]: "world"
    });
    /* The type of json_val is:
    
    json_in_type::JSON<
        main::InlinedJSONObjectEntry<
            (),
        main::InlinedJSONObjectEntry<
            json_in_type::JSONListElem<{integer},
                json_in_type::JSONListElem<{integer},
                json_in_type::JSONListElem<{integer},
                json_in_type::JSONListEnd>>>,
        json_in_type::JSONObjectEntry<
            &str, &str,
        json_in_type::JSONObjectEnd>>>>
    */

    assert_eq!(
        r#"{"void":null,"list":[1,2,3],"hello":"world"}"#,
        format!("{}", json_val)
    );
}

Performance

This library is generally faster than SERDE. Here are detailed comparison results on different json serialization tasks realized on an AMD Ryzen 5 1600X. See detailed benchmark results.

Encoding 8 nested json objects using a rust macro

Encoded object

{"nested":{"nested":{"nested":{"nested":{"nested":{"nested":{"nested":{"nested":{"value":n}}}}}}}}}

Benchmark result

nested json objects comparison

Encoding a very simple json object using a rust macro

Encoded object

{
        "void": null,
        "list": [1, 2, 3, 3],
        "hello": "world"
}

Benchmark result

simple object

Encoding a very simple json object using #[derive(...)]

Encoded object

{
        "void": null,
        "list": [1, 2, 3, 3],
        "hello": "world"
}

created from the following rust struct

#[derive(Serialize, JSONValue)]
struct MyObject {
    void: (),
    list: Vec<f64>,
    hello: String,
}

Benchmark result

simple object