hcl-rs

Build Status crates.io docs.rs MIT License

A rust library for interacting with the Hashicorp Configuration Language (HCL).

Features

Planned Features

Deserialization examples

Deserialize arbitrary HCL according to the HCL JSON Specification:

```rust use serde_json::{json, Value};

let input = r#" some_attr = { foo = [1, 2] bar = true }

some_block "some_block_label" {
  attr = "value"
}

"#;

let expected = json!({ "someattr": { "foo": [1, 2], "bar": true }, "someblock": { "someblocklabel": { "attr": "value" } } });

let value: Value = hcl::from_str(input).unwrap();

assert_eq!(value, expected); ```

If you need to preserve context about the HCL structure, deserialize into hcl::Body instead:

```rust use hcl::{Block, Body, Expression};

let input = r#" some_attr = { "foo" = [1, 2] "bar" = true }

some_block "some_block_label" {
  attr = "value"
}

"#;

let expected = Body::builder() .addattribute(( "someattr", Expression::fromiter([ ("foo", Expression::from(vec![1, 2])), ("bar", Expression::Bool(true)), ]), )) .addblock( Block::builder("someblock") .addlabel("someblocklabel") .add_attribute(("attr", "value")) .build(), ) .build();

let body: Body = hcl::from_str(input).unwrap();

assert_eq!(body, expected); ```

Serialization examples

A simple example to serialize some terraform configuration:

```rust use hcl::{Block, Body, RawExpression};

let body = Body::builder() .addblock( Block::builder("resource") .addlabel("awssnstopicsubscription") .addlabel("topic") .addattribute(("topicarn", RawExpression::new("awssnstopic.queue.arn"))) .addattribute(("protocol", "sqs")) .addattribute(("endpoint", RawExpression::new("awssqsqueue.queue.arn"))) .build(), ) .build();

let expected = r#" resource "awssnstopicsubscription" "topic" { topicarn = awssnstopic.queue.arn protocol = "sqs" endpoint = awssqsqueue.queue.arn } "#.trim_start();

let serialized = hcl::to_string(&body).unwrap();

assert_eq!(serialized, expected); ```

Also have a look at the other examples provided in the documentation of the ser module.

Macros

This crate provides a couple of macros to ease building HCL data structures. Have a look at their documentation for usage examples.

Contributing

Contributions are welcome! Please read CONTRIBUTING.md before creating a PR.

License

The source code of hcl-rs is released under the MIT License. See the bundled LICENSE file for details.