     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29

    use bitflags::*;

    bitflags! {
        pub struct SignalFlags: u32 {
            const SIGINT    = 1 << 2;
            const SIGILL    = 1 << 4;
            const SIGABRT   = 1 << 6;
            const SIGFPE    = 1 << 8;
            const SIGSEGV   = 1 << 11;
        }
    }

    impl SignalFlags {
        pub fn check_error(&self) -> Option<(i32, &'static str)> {
            if self.contains(Self::SIGINT) {
                Some((-2, "Killed, SIGINT=2"))
            } else if self.contains(Self::SIGILL) {
                Some((-4, "Illegal Instruction, SIGILL=4"))
            } else if self.contains(Self::SIGABRT) {
                Some((-6, "Aborted, SIGABRT=6"))
            } else if self.contains(Self::SIGFPE) {
                Some((-8, "Erroneous Arithmetic Operation, SIGFPE=8"))
            } else if self.contains(Self::SIGSEGV) {
                Some((-11, "Segmentation Fault, SIGSEGV=11"))
            } else {
                None
            }
        }
    }