acts_next/model/act/
irq.rs

1use crate::{Act, Vars};
2use serde::{Deserialize, Serialize};
3
4/// Interrupt request
5#[derive(Debug, Default, Clone, Serialize, Deserialize)]
6pub struct Irq {
7    #[serde(default)]
8    pub key: String,
9
10    #[serde(default)]
11    pub tag: String,
12
13    #[serde(default)]
14    pub inputs: Vars,
15
16    #[serde(default)]
17    pub rets: Vars,
18
19    #[serde(default)]
20    pub outputs: Vars,
21}
22
23impl Irq {
24    pub fn new() -> Self {
25        Default::default()
26    }
27
28    pub fn with_tag(mut self, tag: &str) -> Self {
29        self.tag = tag.to_string();
30        self
31    }
32
33    pub fn with_key(mut self, key: &str) -> Self {
34        self.key = key.to_string();
35        self
36    }
37
38    pub fn with_input<T>(mut self, name: &str, value: T) -> Self
39    where
40        T: Serialize + Clone,
41    {
42        self.inputs.set(name, value);
43        self
44    }
45
46    pub fn with_output<T>(mut self, name: &str, value: T) -> Self
47    where
48        T: Serialize + Clone,
49    {
50        self.outputs.set(name, value);
51        self
52    }
53
54    pub fn with_ret<T>(mut self, name: &str, value: T) -> Self
55    where
56        T: Serialize + Clone,
57    {
58        self.rets.set(name, value);
59        self
60    }
61}
62
63impl From<Irq> for Act {
64    fn from(val: Irq) -> Self {
65        Act::irq(|_| val.clone())
66    }
67}