kona_interop/
safety.rs

1//! Message safety level for interoperability.
2use derive_more::Display;
3/// The safety level of a message.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Display)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
7pub enum SafetyLevel {
8    /// The message is finalized.
9    Finalized,
10    /// The message is safe.
11    Safe,
12    /// The message is safe locally.
13    LocalSafe,
14    /// The message is unsafe across chains.
15    CrossUnsafe,
16    /// The message is unsafe.
17    Unsafe,
18    /// The message is invalid.
19    Invalid,
20}
21
22#[cfg(test)]
23#[cfg(feature = "serde")]
24mod tests {
25    use super::*;
26
27    #[test]
28    fn test_safety_level_serde() {
29        let level = SafetyLevel::Finalized;
30        let json = serde_json::to_string(&level).unwrap();
31        assert_eq!(json, r#""finalized""#);
32
33        let level: SafetyLevel = serde_json::from_str(&json).unwrap();
34        assert_eq!(level, SafetyLevel::Finalized);
35    }
36
37    #[test]
38    fn test_serde_safety_level_fails() {
39        let json = r#""failed""#;
40        let level: Result<SafetyLevel, _> = serde_json::from_str(json);
41        assert!(level.is_err());
42    }
43}