hcl/structure/
attribute.rs1use crate::expr::Expression;
4use crate::{Identifier, Value};
5use serde::Deserialize;
6use std::iter;
7
8#[derive(Deserialize, Debug, PartialEq, Eq, Clone)]
19pub struct Attribute {
20 pub key: Identifier,
22 pub expr: Expression,
24}
25
26impl Attribute {
27 pub fn new<K, V>(key: K, expr: V) -> Attribute
30 where
31 K: Into<Identifier>,
32 V: Into<Expression>,
33 {
34 Attribute {
35 key: key.into(),
36 expr: expr.into(),
37 }
38 }
39
40 pub fn key(&self) -> &str {
42 &self.key
43 }
44
45 pub fn expr(&self) -> &Expression {
47 &self.expr
48 }
49}
50
51impl From<Attribute> for Value {
52 fn from(attr: Attribute) -> Value {
53 iter::once((attr.key.into_inner(), attr.expr)).collect()
54 }
55}
56
57impl<K, V> From<(K, V)> for Attribute
58where
59 K: Into<Identifier>,
60 V: Into<Expression>,
61{
62 fn from((key, expr): (K, V)) -> Attribute {
63 Attribute::new(key, expr)
64 }
65}