use async_trait::async_trait;
use drasi_query_ast::ast;
use crate::evaluation::{context::SideEffects, ExpressionEvaluationContext, FunctionError};
use super::ContextMutatorFunction;
pub struct RetainHistory {}
#[async_trait]
impl ContextMutatorFunction for RetainHistory {
async fn call<'a>(
&self,
context: &ExpressionEvaluationContext<'a>,
_expression: &ast::FunctionExpression,
) -> Result<ExpressionEvaluationContext<'a>, FunctionError> {
let mut new_context = context.clone();
match new_context.get_side_effects() {
SideEffects::RevertForUpdate => new_context.set_side_effects(SideEffects::Snapshot),
SideEffects::RevertForDelete => new_context.set_side_effects(SideEffects::Snapshot),
_ => {}
}
Ok(new_context)
}
}