srad_types/
quality.rs

1use crate::{payload::DataType, traits, FromValueTypeError, PropertyValue};
2
3/// Represents the different quality property values of a metric
4pub enum Quality {
5    Good = 0,
6    Bad = 192,
7    Stale = 500,
8}
9
10impl TryFrom<i32> for Quality {
11    type Error = ();
12
13    fn try_from(v: i32) -> Result<Self, Self::Error> {
14        match v {
15            x if x == Quality::Good as i32 => Ok(Quality::Good),
16            x if x == Quality::Bad as i32 => Ok(Quality::Bad),
17            x if x == Quality::Stale as i32 => Ok(Quality::Stale),
18            _ => Err(()),
19        }
20    }
21}
22
23impl traits::HasDataType for Quality {
24    fn supported_datatypes() -> &'static [DataType] {
25        static SUPPORTED_TYPES: [DataType; 1] = [DataType::Int32];
26        &SUPPORTED_TYPES
27    }
28}
29
30impl TryFrom<PropertyValue> for Quality {
31    type Error = FromValueTypeError;
32
33    fn try_from(value: PropertyValue) -> Result<Self, Self::Error> {
34        let value: i32 = value.try_into()?;
35        match value.try_into() {
36            Ok(value) => Ok(value),
37            Err(_) => Err(FromValueTypeError::InvalidValue(
38                "int value was not a valid quality enum value".to_string(),
39            )),
40        }
41    }
42}
43
44impl From<Quality> for PropertyValue {
45    fn from(value: Quality) -> Self {
46        (value as i32).into()
47    }
48}
49
50impl traits::PropertyValue for Quality {}