Skip to main content

cfdp_simplified/transaction/
fault_handler.rs

1use std::str::FromStr;
2
3#[repr(u8)]
4#[derive(Clone, Debug, PartialEq, Eq)]
5/// Available actions which can be taken when a fault has occurred.
6pub enum FaultHandlerAction {
7    /// Ignore the fault.
8    Ignore,
9    /// Halt the transaction immediately. Do not wait for handshakes.
10    Abandon,
11}
12impl FromStr for FaultHandlerAction {
13    type Err = ();
14
15    fn from_str(input: &str) -> Result<Self, Self::Err> {
16        match input.trim().to_lowercase().as_str() {
17            "ignore" => Ok(Self::Ignore),
18            "abandon" => Ok(Self::Abandon),
19            _ => Err(()),
20        }
21    }
22}
23
24#[cfg(test)]
25mod test {
26    use super::*;
27    use rstest::rstest;
28
29    #[rstest]
30    #[case("Ignore", FaultHandlerAction::Ignore)]
31    #[case("Abandon", FaultHandlerAction::Abandon)]
32    #[case("IGNORE", FaultHandlerAction::Ignore)]
33    #[case("ABANDON", FaultHandlerAction::Abandon)]
34    fn fault_action(#[case] input: &str, #[case] action: FaultHandlerAction) {
35        assert_eq!(action, FaultHandlerAction::from_str(input).unwrap())
36    }
37
38    #[test]
39    fn fault_error() {
40        assert!(FaultHandlerAction::from_str("Hello, World").is_err())
41    }
42}