jsonbuilder 0.1.0

A json builder used to create JSON structures using a simple DSL
Documentation
use serde_json::Value;

use super::error::*;
use crate::{context::Context, error::*, parser::Expression as ExpressionAST};

pub fn evaluate(expression: ExpressionAST, context: &Context) -> Result<Value> {
    match expression {
        ExpressionAST::Identifier(identifier) => Ok(context.get(&identifier).unwrap().clone()),
        ExpressionAST::Namespace(namespace) => {
            let value = context.get(&namespace[0]);

            if value.is_none() {
                return Err(JsonBuilderError::BuilderError(BuilderError::from_error(
                    BuilderErrorKind::VariableNotFound(namespace[0].clone()),
                )));
            }

            let mut value = value.unwrap().clone();

            for key in namespace.iter().skip(1) {
                value = value[key].clone();
            }

            Ok(value)
        }
        ExpressionAST::Current => Ok(Value::Null),
    }
}