use vantage_expressions::{Expression, Expressive};
use crate::{AnySurrealType, Expr};
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct Variable {
name: String,
}
impl Variable {
pub fn new(name: impl Into<String>) -> Self {
Self { name: name.into() }
}
}
impl Expressive<AnySurrealType> for Variable {
fn expr(&self) -> Expr {
Expression::new(format!("${}", self.name), vec![])
}
}
impl From<Variable> for Expr {
fn from(val: Variable) -> Self {
val.expr()
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::primitives::field;
#[test]
fn variable_renders_dollar_name() {
assert_eq!(Variable::new("parent").expr().preview(), "$parent");
assert_eq!(Variable::new("this").expr().preview(), "$this");
}
#[test]
fn field_tail_matches_legacy_parent() {
assert_eq!(field(Variable::new("parent"), "id").preview(), "$parent.id");
}
}