#jsonnet #bindings #idiomatic #run #json #string #go-jsonnet

jsonnet-go

Idiomatic rust bindings for go-jsonnet

1 unstable release

0.1.0 Sep 22, 2024

#922 in Encoding

Download history 65/week @ 2024-11-15 84/week @ 2024-11-22 162/week @ 2024-11-29 83/week @ 2024-12-06 84/week @ 2024-12-13 63/week @ 2024-12-20 199/week @ 2024-12-27 95/week @ 2025-01-03 197/week @ 2025-01-10 43/week @ 2025-01-17 91/week @ 2025-01-24 108/week @ 2025-01-31 349/week @ 2025-02-07 84/week @ 2025-02-14 150/week @ 2025-02-21 153/week @ 2025-02-28

748 downloads per month

MIT/Apache

80KB
1.5K SLoC

jsonnet-go

Run jsonnet programs in rust!

This crate provides idiomatic Rust bindings for the go-jsonnet library.

Quick Start

Create a JsonnetVm and then call evaluate_file or evaluate_snippet to run jsonnet code. These will return a string containing the resulting JSON:

use jsonnet_go::JsonnetVm;

fn main() -> jsonnet_go::Result<()> {
    let mut vm = JsonnetVm::new();
    let jsonnet = "{ field: std.base64('Hello, World!') }";
    let json = vm.evaluate_snippet("<inline>", jsonnet)?;

    println!("{json}");
    Ok(())
}

Alternatively, you could enable the json feature and use evaluate_json to deserialize the returned JSON string:

use jsonnet_go::{JsonnetVm, EvaluateOptions};
use serde::Deserialize;

#[derive(Deserialize)]
struct Output {
    field: String
}

fn main() -> jsonnet_go::Result<()> {
    let mut vm = JsonnetVm::new();
    let jsonnet = "{ field: std.base64('Hello, World!') }";
    let options = EvaluateOptions::new("<inline>").snippet(jsonnet);
    let output: Output = vm.evaluate_json(options)?;

    assert_eq!(output.field, "SGVsbG8sIFdvcmxkIQ==");

    Ok(())
}

Build Dependencies

You will need go 1.12+ installed in order to build go-jsonnet. You can install it via:

On older distros the packaged version of go may not be new enough. In that case you will need to install it from the official website.

See Also

  • The jsonnet-rs is a similar set of bindings for the libjsonnet C++ library. However, it has not been updated since jsonnet 0.17 and optimizations now mainly added to go-jsonnet and not libjsonnet.

Dependencies

~12MB
~323K SLoC