use serde::{Deserialize, Serialize};
use super::expressions::*;
#[derive(Serialize, Deserialize, Eq, PartialEq, Clone, Debug)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE", tag = "kind")]
pub enum ActionPattern {
Silent,
Labeled(LabeledPattern),
}
#[derive(Serialize, Deserialize, Eq, PartialEq, Clone, Debug)]
pub struct LabeledPattern {
pub label: String,
pub arguments: Vec<PatternArgument>,
}
#[derive(Serialize, Deserialize, Eq, PartialEq, Clone, Debug)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE", tag = "direction")]
pub enum PatternArgument {
Write { value: Expression },
Read { identifier: String },
}
#[derive(Serialize, Deserialize, Eq, PartialEq, Clone, Debug)]
pub struct WriteArgument {
pub value: Expression,
}
#[derive(Serialize, Deserialize, Eq, PartialEq, Clone, Debug)]
pub struct ReadArgument {
pub identifier: String,
}