kona_interop/
safety.rs

1//! Message safety level for interoperability.
2use alloc::string::String;
3use thiserror::Error;
4
5/// Error when parsing SafetyLevel from string.
6#[derive(Error, Debug)]
7#[error("Invalid SafetyLevel, error: {0}")]
8pub struct SafetyLevelParseError(pub String);
9
10#[cfg(test)]
11mod tests {
12    use core::str::FromStr;
13    use op_alloy_consensus::interop::SafetyLevel;
14
15    #[test]
16    #[cfg(feature = "serde")]
17    fn test_safety_level_serde() {
18        let level = SafetyLevel::Finalized;
19        let json = serde_json::to_string(&level).unwrap();
20        assert_eq!(json, r#""finalized""#);
21
22        let level: SafetyLevel = serde_json::from_str(&json).unwrap();
23        assert_eq!(level, SafetyLevel::Finalized);
24    }
25
26    #[test]
27    #[cfg(feature = "serde")]
28    fn test_serde_safety_level_fails() {
29        let json = r#""failed""#;
30        let level: Result<SafetyLevel, _> = serde_json::from_str(json);
31        assert!(level.is_err());
32    }
33
34    #[test]
35    fn test_safety_level_from_str_valid() {
36        assert_eq!(SafetyLevel::from_str("finalized").unwrap(), SafetyLevel::Finalized);
37        assert_eq!(SafetyLevel::from_str("safe").unwrap(), SafetyLevel::CrossSafe);
38        assert_eq!(SafetyLevel::from_str("local-safe").unwrap(), SafetyLevel::LocalSafe);
39        assert_eq!(SafetyLevel::from_str("localsafe").unwrap(), SafetyLevel::LocalSafe);
40        assert_eq!(SafetyLevel::from_str("cross-unsafe").unwrap(), SafetyLevel::CrossUnsafe);
41        assert_eq!(SafetyLevel::from_str("crossunsafe").unwrap(), SafetyLevel::CrossUnsafe);
42        assert_eq!(SafetyLevel::from_str("unsafe").unwrap(), SafetyLevel::LocalUnsafe);
43        assert_eq!(SafetyLevel::from_str("invalid").unwrap(), SafetyLevel::Invalid);
44    }
45
46    #[test]
47    fn test_safety_level_from_str_invalid() {
48        assert!(SafetyLevel::from_str("unknown").is_err());
49        assert!(SafetyLevel::from_str("123").is_err());
50        assert!(SafetyLevel::from_str("").is_err());
51        assert!(SafetyLevel::from_str("safe ").is_err());
52    }
53}