use super::{ExecuteError, Result};
use super::tags::{Container, StaticPolicy, StaticPolicyMonoInput, StaticPolicyMonoResult};
use crate::ast2::JsonPlusEntity;
pub struct IncludePolicy;
impl StaticPolicy for IncludePolicy {
fn mono(inputs: StaticPolicyMonoInput) -> Result<StaticPolicyMonoResult> {
let (mut result, residual) = StaticPolicyMonoResult::from_inputs(inputs);
let tag = match residual.container {
Container::Tag(tag) => tag,
_ => {
panic!("!?!?!? cannot be anchor in static tag !?!?!?"); }
};
let included_context_name = residual
.arguments
.arguments
.get(0)
.ok_or_else(|| ExecuteError::MissingIncludeArgument { range: tag.range })?
.value
.clone();
let data = match residual.parameters.get("data") {
Some(JsonPlusEntity::Object(data)) => Some(data),
Some(_) => {
return Err(ExecuteError::UnsupportedDataParameter { range: tag.range });
}
None => None,
};
result.collector =
match residual
.worker
._execute(result.collector, &included_context_name, 0, data)?
{
Some(collector) => collector,
None => {
return Err(ExecuteError::IncludeExecutionFailed {
context: included_context_name,
range: tag.range,
});
}
};
Ok(result)
}
}