diameter_interface/modeling/message/
application_id.rs

1use crate::errors::Error;
2use crate::errors::Error::DecodeError;
3
4#[derive(Debug)]
5pub enum ApplicationId {
6    Common,
7    Accounting,
8    CreditControl,
9    Gx,
10    Rx,
11    Sy,
12}
13
14impl ApplicationId {
15    pub fn value(&self) -> u32 {
16        match self {
17            ApplicationId::Common => 0,
18            ApplicationId::Accounting => 3,
19            ApplicationId::CreditControl => 4,
20            ApplicationId::Rx => 16777236,
21            ApplicationId::Gx => 16777238,
22            ApplicationId::Sy => 16777302,
23        }
24    }
25}
26
27impl ApplicationId {
28    pub fn get_code(&self) -> u32 {
29        match self {
30            ApplicationId::Common => 0,
31            ApplicationId::Accounting => 3,
32            ApplicationId::CreditControl => 4,
33            ApplicationId::Rx => 16777236,
34            ApplicationId::Gx => 16777238,
35            ApplicationId::Sy => 16777302,
36        }
37    }
38}
39
40impl TryFrom<u32> for ApplicationId {
41    type Error = Error;
42
43    fn try_from(value: u32) -> Result<Self, Self::Error> {
44        match value {
45            0 => Ok(ApplicationId::Common),
46            3 => Ok(ApplicationId::Accounting),
47            4 => Ok(ApplicationId::CreditControl),
48            16777236 => Ok(ApplicationId::Rx),
49            16777238 => Ok(ApplicationId::Gx),
50            16777302 => Ok(ApplicationId::Sy),
51            _ => Err(DecodeError("Undefined application id"))?,
52        }
53    }
54}