use crate::parser::Expression;
use crate::{FunctionContext, ResolveResult, Value};
pub trait Resolver {
fn resolve(&self, ctx: &FunctionContext) -> ResolveResult;
}
impl Resolver for Expression {
fn resolve(&self, ctx: &FunctionContext) -> ResolveResult {
Value::resolve(self, ctx.ptx)
}
}
pub(crate) struct AllArguments;
impl Resolver for AllArguments {
fn resolve(&self, ctx: &FunctionContext) -> ResolveResult {
let mut args = Vec::with_capacity(ctx.args.len());
for arg in ctx.args.iter() {
args.push(Value::try_from(arg.as_ref())?);
}
Ok(Value::List(args.into()))
}
}