1use crate::{payload::DataType, traits, FromValueTypeError, PropertyValue};
2
3pub 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 {}