tytanic_filter/ast/
atom.rs1use super::{Id, Num, Pat, Str};
2use crate::eval::{Context, Error, Eval, Test, Value};
3
4#[derive(Debug, Clone, PartialEq, Eq, Hash)]
6pub enum Atom {
7 Id(Id),
9
10 Num(Num),
12
13 Str(Str),
15
16 Pat(Pat),
18}
19
20impl<T: Test> Eval<T> for Atom {
21 fn eval(&self, ctx: &Context<T>) -> Result<Value<T>, Error> {
22 Ok(match self {
23 Self::Id(id) => id.eval(ctx)?,
24 Self::Num(n) => Value::Num(*n),
25 Self::Str(s) => Value::Str(s.clone()),
26 Self::Pat(pat) => pat.eval(ctx)?,
27 })
28 }
29}