#![allow(
clippy::all,
clippy::pedantic,
dead_code,
unreachable_pub,
unused_imports
)]
use crate::datatypes::SemanticTagStruct;
use crate::error::ClusterError;
use crate::types::Nullable;
use matter_codec::{ContainerKind, Element, Tag, TlvReader, TlvWriter, Value};
pub const CLUSTER_ID: u32 = 0x0403;
pub const CLUSTER_REVISION: u16 = 4;
pub mod command_id {}
pub mod attribute_id {
pub const MEASURED_VALUE: u32 = 0x0000;
pub const MIN_MEASURED_VALUE: u32 = 0x0001;
pub const MAX_MEASURED_VALUE: u32 = 0x0002;
pub const TOLERANCE: u32 = 0x0003;
pub const SCALED_VALUE: u32 = 0x0010;
pub const MIN_SCALED_VALUE: u32 = 0x0011;
pub const MAX_SCALED_VALUE: u32 = 0x0012;
pub const SCALED_TOLERANCE: u32 = 0x0013;
pub const SCALE: u32 = 0x0014;
}
bitflags::bitflags! {
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub struct Feature: u32 {
const EXT = 1 << 0;
}
}
pub fn decode_measured_value(tlv: &[u8]) -> Result<Nullable<i16>, ClusterError> {
let mut r = TlvReader::new(tlv);
match r.next()? {
Some(Element::Scalar {
value: Value::Null, ..
}) => Ok(Nullable::Null),
Some(Element::Scalar {
value: Value::Int(v),
..
}) => {
Ok(Nullable::Value(i16::try_from(v).map_err(|_| {
ClusterError::InvalidLength("MeasuredValue")
})?))
}
_ => Err(ClusterError::UnexpectedType {
context: "MeasuredValue",
}),
}
}
pub fn decode_min_measured_value(tlv: &[u8]) -> Result<Nullable<i16>, ClusterError> {
let mut r = TlvReader::new(tlv);
match r.next()? {
Some(Element::Scalar {
value: Value::Null, ..
}) => Ok(Nullable::Null),
Some(Element::Scalar {
value: Value::Int(v),
..
}) => {
Ok(Nullable::Value(i16::try_from(v).map_err(|_| {
ClusterError::InvalidLength("MinMeasuredValue")
})?))
}
_ => Err(ClusterError::UnexpectedType {
context: "MinMeasuredValue",
}),
}
}
pub fn decode_max_measured_value(tlv: &[u8]) -> Result<Nullable<i16>, ClusterError> {
let mut r = TlvReader::new(tlv);
match r.next()? {
Some(Element::Scalar {
value: Value::Null, ..
}) => Ok(Nullable::Null),
Some(Element::Scalar {
value: Value::Int(v),
..
}) => {
Ok(Nullable::Value(i16::try_from(v).map_err(|_| {
ClusterError::InvalidLength("MaxMeasuredValue")
})?))
}
_ => Err(ClusterError::UnexpectedType {
context: "MaxMeasuredValue",
}),
}
}
pub fn decode_tolerance(tlv: &[u8]) -> Result<u16, ClusterError> {
let mut r = TlvReader::new(tlv);
match r.next()? {
Some(Element::Scalar {
value: Value::Uint(v),
..
}) => Ok(u16::try_from(v).map_err(|_| ClusterError::InvalidLength("Tolerance"))?),
_ => Err(ClusterError::UnexpectedType {
context: "Tolerance",
}),
}
}
pub fn decode_scaled_value(tlv: &[u8]) -> Result<Nullable<i16>, ClusterError> {
let mut r = TlvReader::new(tlv);
match r.next()? {
Some(Element::Scalar {
value: Value::Null, ..
}) => Ok(Nullable::Null),
Some(Element::Scalar {
value: Value::Int(v),
..
}) => Ok(Nullable::Value(
i16::try_from(v).map_err(|_| ClusterError::InvalidLength("ScaledValue"))?,
)),
_ => Err(ClusterError::UnexpectedType {
context: "ScaledValue",
}),
}
}
pub fn decode_min_scaled_value(tlv: &[u8]) -> Result<Nullable<i16>, ClusterError> {
let mut r = TlvReader::new(tlv);
match r.next()? {
Some(Element::Scalar {
value: Value::Null, ..
}) => Ok(Nullable::Null),
Some(Element::Scalar {
value: Value::Int(v),
..
}) => {
Ok(Nullable::Value(i16::try_from(v).map_err(|_| {
ClusterError::InvalidLength("MinScaledValue")
})?))
}
_ => Err(ClusterError::UnexpectedType {
context: "MinScaledValue",
}),
}
}
pub fn decode_max_scaled_value(tlv: &[u8]) -> Result<Nullable<i16>, ClusterError> {
let mut r = TlvReader::new(tlv);
match r.next()? {
Some(Element::Scalar {
value: Value::Null, ..
}) => Ok(Nullable::Null),
Some(Element::Scalar {
value: Value::Int(v),
..
}) => {
Ok(Nullable::Value(i16::try_from(v).map_err(|_| {
ClusterError::InvalidLength("MaxScaledValue")
})?))
}
_ => Err(ClusterError::UnexpectedType {
context: "MaxScaledValue",
}),
}
}
pub fn decode_scaled_tolerance(tlv: &[u8]) -> Result<u16, ClusterError> {
let mut r = TlvReader::new(tlv);
match r.next()? {
Some(Element::Scalar {
value: Value::Uint(v),
..
}) => Ok(u16::try_from(v).map_err(|_| ClusterError::InvalidLength("ScaledTolerance"))?),
_ => Err(ClusterError::UnexpectedType {
context: "ScaledTolerance",
}),
}
}
pub fn decode_scale(tlv: &[u8]) -> Result<i8, ClusterError> {
let mut r = TlvReader::new(tlv);
match r.next()? {
Some(Element::Scalar {
value: Value::Int(v),
..
}) => Ok(i8::try_from(v).map_err(|_| ClusterError::InvalidLength("Scale"))?),
_ => Err(ClusterError::UnexpectedType { context: "Scale" }),
}
}