use crate::Result;
#[cfg(feature = "serde-derive")]
use serde::{Deserialize, Serialize};
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde-derive", derive(Serialize, Deserialize))]
pub enum SessionStatus {
Ok = 0,
OkMobileTerminatedTooLarge = 1,
OkLocationUnacceptableQuality = 2,
Timeout = 10,
MobileOriginatedTooLarge = 12,
RFLinkLoss = 13,
IMEIProtocolAnomaly = 14,
Prohibited = 15,
}
impl SessionStatus {
pub fn new(n: u8) -> Result<SessionStatus> {
use crate::Error;
match n {
0 => Ok(SessionStatus::Ok),
1 => Ok(SessionStatus::OkMobileTerminatedTooLarge),
2 => Ok(SessionStatus::OkLocationUnacceptableQuality),
10 => Ok(SessionStatus::Timeout),
12 => Ok(SessionStatus::MobileOriginatedTooLarge),
13 => Ok(SessionStatus::RFLinkLoss),
14 => Ok(SessionStatus::IMEIProtocolAnomaly),
15 => Ok(SessionStatus::Prohibited),
_ => Err(Error::UnknownSessionStatus(n)),
}
}
pub fn value(&self) -> i8 {
*self as i8
}
pub fn is_ok(&self) -> bool {
match self {
SessionStatus::Ok
| SessionStatus::OkMobileTerminatedTooLarge
| SessionStatus::OkLocationUnacceptableQuality => true,
SessionStatus::Timeout => false,
SessionStatus::MobileOriginatedTooLarge => false,
SessionStatus::RFLinkLoss => false,
SessionStatus::IMEIProtocolAnomaly => false,
SessionStatus::Prohibited => false,
}
}
}