use ir::instruction::{Filter, Kind}; use crate::value::Dynamic; mod instructions; pub struct Executor; impl crate::Executor for Executor { fn execute(instruction: Kind, input: Option) -> Option { match instruction { Kind::Read(read_instruction) => { Some(Dynamic::Image(instructions::read::read(read_instruction))) } Kind::Write(write_instruction) => { instructions::write::write( write_instruction, match input { Some(Dynamic::Image(ref img)) => img, _ => panic!("awawwawwa"), }, ); None } Kind::Math(_) => todo!(), Kind::Blend(_) => todo!(), Kind::Noise(_) => todo!(), Kind::Filter(filter_instruction) => match filter_instruction { Filter::Invert => Some(Dynamic::Image(instructions::filters::invert::invert( match input { Some(Dynamic::Image(img)) => img, _ => panic!("invalid value type for invert"), }, ))), }, } } }