xq 0.1.0

A reimplementation of jq.
Documentation

test

XQ

JQ reimplemented purely in Rust.

Caution

This program is under development. You probably want to use the original implementation of jq, or pure Go implementation of it called gojq built by itchyny instead.

Current state

Most of the jq components that require syntactical support are, hmm, implemented and tested against queries taken from the jq user manual. Exceptions are string format (@base64 etc.), imports, and module headers. Many builtin functions are missing, include those require intrinsic implementation. Need more unit tests. Most of the CLI options are missing.

Goals

  • Learn jq.

Ideas

  • Since we use serde to deserialize input / serialize output, we should be able to support any format which has serde implementation without too much effort, except those require scheme (protobuf, thrift, etc.).

  • As a library, we should be able to make anything that implements Serialize as the input type, and anything implements Deserialize as the output type. So in theory, we should be able to write a library that can handle following;

    #[derive(Serialize)]
    struct GitHubRepo {
        user_name: String,
        repo_name: String,
        stars: usize,
    }
    #[derive(Deserialize)]
    struct User {
        name: String,
        total_stars: usize,
    }
    let repos: Vec<GitHubRepo> = fetch_repos();
    let users: Vec<User> = xq::somefunction_slurp<GitHubRepo, User>(repos, r#"
        group_by(.user_name)[]
        | { name: .[0].user_name, total_stars: ([.[].stars] | add) }
    "#).collect();
    

    I mean, it's not something that one should really use. It's just something possible and interesting... isn't it?

Usage

Do you really want to use it??? Currently, you need to clone this repository and do

cat whatever.json | cargo run -- 'query goes here'

Acknowledgements

  • Although this isn't a direct translation at all, I referred to jq built by Stephen Dolan and gojq built by itchyny. Thank you for the interesting product!

Credits

Author

Mi_Sawa

LICENSE

MIT. Please refer to LICENSE file.