use crate::engine::ASTRegApply;
use crate::executor::registry::converter::{ConvertError, MutationConverter};
use crate::executor::registry::converters::ResolveTargetSymbol;
use crate::executor::spec::MutationSpec;
use ryo_analysis::AnalysisContext;
use ryo_mutations::AddItemMutation;
pub struct AddItemConverter;
impl AddItemConverter {
pub fn new() -> Self {
Self
}
}
impl Default for AddItemConverter {
fn default() -> Self {
Self::new()
}
}
impl ResolveTargetSymbol for AddItemConverter {}
impl MutationConverter for AddItemConverter {
fn spec_kinds(&self) -> &'static [&'static str] {
&["AddItem"]
}
fn convert_v2(
&self,
spec: &MutationSpec,
ctx: &AnalysisContext,
) -> Result<Vec<Box<dyn ASTRegApply>>, ConvertError> {
match spec {
MutationSpec::AddItem {
target, content, ..
} => {
let symbol_id = self.resolve_target_symbol(target, ctx)?;
let mutation = AddItemMutation::new(symbol_id, content.clone());
Ok(vec![Box::new(mutation)])
}
_ => Err(ConvertError::TypeMismatch {
expected: "AddItem",
actual: spec.kind_name().to_string(),
}),
}
}
}