use crate::{arena::NodeId, param::Param};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone)]
pub enum Command {
AddNode { id: NodeId },
RemoveNode { id: NodeId },
Connect { src: NodeId, dst: NodeId, slot: usize },
Disconnect { dst: NodeId, slot: usize },
UpdateParam { node: NodeId, param_index: usize, new_param: Param },
SetOutputNode { id: NodeId },
SetMute { muted: bool },
ClearGraph,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphSnapshot {
pub nodes: Vec<NodeSnapshot>,
pub edges: Vec<EdgeSnapshot>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NodeSnapshot {
pub id: u32,
pub generation: u32,
pub node_type: String,
pub params: Vec<f32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EdgeSnapshot {
pub src_id: u32,
pub dst_id: u32,
pub slot: usize,
}