serde-query 0.1.3

Serde-compatible streaming data-query language with a jq-like syntax
Documentation

Serde Query: An efficient query language for Serde

sere-query provides a query language for Serde data model.

serde-query is:

  • Efficient. You can extract only the target parts from a potentially large document with a jq-like syntax. It works like a streaming parser and touches only a minimal amount of elements.
  • Flexible. serde-query can work with any serde-compatible formats.
  • Zero-cost. The traversal structure is encoded as types in compile time.

Example

use serde_query::{DeserializeQuery, Query};

#[derive(DeserializeQuery)]
struct Data {
    #[query(".commit.authors.[0]")]
    first_author: String,
    #[query(".hash")]
    hash_value: u64,
}

let document = serde_json::to_string(&serde_json::json!({
    "commit": {
        "authors": ["Kou", "Kasumi", "Masaru"],
        "date": "2020-09-10",
    },
    "hash": 0xabcd,
}))?;

// You can use `Query<T>` as a `Deserialize` type for any `Deserializer`
// and convert the result to the desired type using `From`/`Into`.
let data: Data = serde_json::from_str::<Query<Data>>(&document)?.into();

assert_eq!(data.first_author, "Kou");
assert_eq!(data.hash_value, 0xabcd);

Note

This library generates Rust types for each query segment (e.g., .commit, .commit.message, etc.), which may lead to binary bloat and longer compile time.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.