Comments (3)
your use case is already supported, just use a nested map and serialize it as a hcl::Value
via hcl::to_value(map)
.
Here is a example (i'm using IndexMap
here, but other maps like HashMap
will also do):
use hcl::eval::Context;
use indexmap::indexmap;
use serde::Deserialize;
#[derive(Deserialize, Debug, PartialEq, Eq)]
struct Config {
stages: u64,
}
let stages = indexmap! {
"project_test" => indexmap! {
"id" => 1,
}
};
let mut ctx = Context::new();
ctx.declare_var("stage", hcl::to_value(stages).unwrap());
let input = "stages = stage.project_test.id";
let config: Config = hcl::eval::from_str(input, &ctx).unwrap();
assert_eq!(config, Config { stages: 1 });
It's also possible to do this with a map of structs or even just a struct as long as the struct implements Serialize
:
use hcl::eval::Context;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Deserialize, Debug, PartialEq, Eq)]
struct Config {
stages: u64,
}
#[derive(Serialize)]
struct Stage {
id: u64,
}
let mut stages = HashMap::new();
stages.insert("project_test", Stage { id: 1 });
let mut ctx = Context::new();
ctx.declare_var("stage", hcl::to_value(stages).unwrap());
let input = "stages = stage.project_test.id";
let config: Config = hcl::eval::from_str(input, &ctx).unwrap();
assert_eq!(config, Config { stages: 1 });
from hcl-rs.
I'm planning to add some testable examples for use cases like this, but I'm currently short on time, so not sure when I will get to this.
from hcl-rs.
Thank you! I've also found that declaring variables as "body" also works:
let mut ctx = hcl::eval::Context::new();
let inner_body = hcl::Body::builder()
.add_attribute(("id", 1))
.build();
let body = hcl::Body::builder()
.add_attribute(("project_test", inner_body))
.build();
ctx.declare_var("stage", body);
from hcl-rs.
Related Issues (20)
- unknown variant `${identifier.attr.subattr}`, expected one of `Null`, `Bool`, `Number`... HOT 1
- `$${` should be evaluated to `${` HOT 1
- incorrect handling of interpolation/directive start markers in `Expression::String`
- Deserializing a nested custom struct? HOT 1
- incorrect handling of escaped template interpolations and directives
- hcl-edit: hardcoded newline for Body HOT 6
- Using jsonencode HOT 5
- parser panics instead of returning an error HOT 3
- hcl-edit: attribute key has no span information HOT 2
- Feature parity with go-hcl HOT 6
- Fraction-less floats are coerced into integers HOT 1
- Question: How do you correctly encode references to other terraform resources HOT 2
- Understanding where `EvalError::NoSuchKey` comes from HOT 2
- parser fails when given a multi-line ternary expression within parenthesis HOT 2
- `Deserialize` impl for `Block` is wrong HOT 2
- restricting eval body to subset of Expression variants HOT 2
- Namespaced functions HOT 3
- Expression serialization is broken HOT 6
- create `hcl::value::from_value` function just like `hcl::value::to_value` HOT 2
- HCL Parsing fails on valid UTF-8 identifier HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hcl-rs.