1use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub enum Interrupt {
9 Before(String),
11 After(String),
13 Dynamic {
15 message: String,
17 data: Option<Value>,
19 },
20}
21
22impl std::fmt::Display for Interrupt {
23 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24 match self {
25 Self::Before(node) => write!(f, "Interrupt before '{}'", node),
26 Self::After(node) => write!(f, "Interrupt after '{}'", node),
27 Self::Dynamic { message, .. } => write!(f, "Dynamic interrupt: {}", message),
28 }
29 }
30}
31
32pub fn interrupt(message: &str) -> Interrupt {
34 Interrupt::Dynamic { message: message.to_string(), data: None }
35}
36
37pub fn interrupt_with_data(message: &str, data: Value) -> Interrupt {
39 Interrupt::Dynamic { message: message.to_string(), data: Some(data) }
40}