wasmer_journal/
snapshot.rs1use super::*;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
6pub enum SnapshotTrigger {
7 Idle,
9 FirstListen,
11 FirstEnviron,
13 FirstStdin,
15 FirstSigint,
17 PeriodicInterval,
19 Sigint,
21 Sigalrm,
23 Sigtstp,
25 Sigstop,
27 NonDeterministicCall,
29 Bootstrap,
31 Transaction,
33 Explicit,
35}
36
37impl SnapshotTrigger {
38 pub fn only_once(&self) -> bool {
39 matches!(
40 self,
41 Self::FirstListen
42 | Self::FirstEnviron
43 | Self::FirstStdin
44 | Self::FirstSigint
45 | Self::Explicit
48 )
49 }
50}
51
52pub const DEFAULT_SNAPSHOT_TRIGGERS: [SnapshotTrigger; 5] = [
53 SnapshotTrigger::Idle,
54 SnapshotTrigger::FirstEnviron,
55 SnapshotTrigger::FirstListen,
56 SnapshotTrigger::FirstStdin,
57 SnapshotTrigger::Explicit,
58];
59
60impl FromStr for SnapshotTrigger {
61 type Err = anyhow::Error;
62
63 fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
64 let s = s.trim().to_lowercase();
65 Ok(match s.as_str() {
66 "idle" => Self::Idle,
67 "first-listen" => Self::FirstListen,
68 "first-stdin" => Self::FirstStdin,
69 "first-environ" => Self::FirstEnviron,
70 "first-intr" | "first-sigint" | "first-ctrlc" | "first-ctrl-c" => Self::FirstSigint,
71 "periodic-interval" => Self::PeriodicInterval,
72 "intr" | "sigint" | "ctrlc" | "ctrl-c" => Self::Sigint,
73 "alarm" | "timer" | "sigalrm" => Self::Sigalrm,
74 "sigtstp" | "ctrlz" | "ctrl-z" => Self::Sigtstp,
75 "stop" | "sigstop" => Self::Sigstop,
76 "non-deterministic-call" => Self::NonDeterministicCall,
77 "bootstrap" => Self::Bootstrap,
78 "transaction" => Self::Transaction,
79 "explicit" => Self::Explicit,
80 a => return Err(anyhow::format_err!("invalid or unknown trigger ({a})")),
81 })
82 }
83}