use crate::expr::Expression;
use crate::{Identifier, Value};
use serde::Deserialize;
use std::iter;
#[derive(Deserialize, Debug, PartialEq, Eq, Clone)]
pub struct Attribute {
pub key: Identifier,
pub expr: Expression,
}
impl Attribute {
pub fn new<K, V>(key: K, expr: V) -> Attribute
where
K: Into<Identifier>,
V: Into<Expression>,
{
Attribute {
key: key.into(),
expr: expr.into(),
}
}
pub fn key(&self) -> &str {
&self.key
}
pub fn expr(&self) -> &Expression {
&self.expr
}
}
impl From<Attribute> for Value {
fn from(attr: Attribute) -> Value {
iter::once((attr.key.into_inner(), attr.expr)).collect()
}
}
impl<K, V> From<(K, V)> for Attribute
where
K: Into<Identifier>,
V: Into<Expression>,
{
fn from((key, expr): (K, V)) -> Attribute {
Attribute::new(key, expr)
}
}