use airl_ir::effects::Effect;
use airl_ir::ids::{FuncId, NodeId};
use airl_ir::module::{FuncDef, Import};
use airl_ir::node::Node;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(tag = "kind")]
pub enum PatchOp {
ReplaceNode {
target: NodeId,
replacement: Node,
},
AddFunction {
func: FuncDef,
},
RemoveFunction {
func_id: FuncId,
},
AddImport {
import: Import,
},
RemoveImport {
import: Import,
},
RenameSymbol {
old_name: String,
new_name: String,
scope: Option<FuncId>,
},
AddEffect {
func_id: FuncId,
effect: Effect,
},
RemoveEffect {
func_id: FuncId,
effect: Effect,
},
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Patch {
pub id: String,
pub parent_version: String,
pub operations: Vec<PatchOp>,
pub rationale: String,
pub author: String,
}