sunspec 0.8.0

SunSpec 1.1 compliant library with tokio support
Documentation
//! SunSpec Test Model 1
/// SunSpec Test Model 1
#[derive(Debug)]
#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
pub struct Model63001 {
    #[allow(missing_docs)]
    pub sunssf_1: Option<i16>,
    #[allow(missing_docs)]
    pub sunssf_2: Option<i16>,
    #[allow(missing_docs)]
    pub sunssf_3: Option<i16>,
    #[allow(missing_docs)]
    pub sunssf_4: Option<i16>,
    #[allow(missing_docs)]
    pub int16_1: Option<i16>,
    #[allow(missing_docs)]
    pub int16_2: Option<i16>,
    #[allow(missing_docs)]
    pub int16_3: Option<i16>,
    #[allow(missing_docs)]
    pub int16_4: Option<i16>,
    #[allow(missing_docs)]
    pub int16_5: Option<i16>,
    #[allow(missing_docs)]
    pub int16_u: Option<i16>,
    #[allow(missing_docs)]
    pub uint16_1: Option<u16>,
    #[allow(missing_docs)]
    pub uint16_2: Option<u16>,
    #[allow(missing_docs)]
    pub uint16_3: Option<u16>,
    #[allow(missing_docs)]
    pub uint16_4: Option<u16>,
    #[allow(missing_docs)]
    pub uint16_5: Option<u16>,
    #[allow(missing_docs)]
    pub uint16_u: Option<u16>,
    #[allow(missing_docs)]
    pub acc16: Option<u16>,
    #[allow(missing_docs)]
    pub acc16_u: Option<u16>,
    #[allow(missing_docs)]
    pub enum16: Option<u16>,
    #[allow(missing_docs)]
    pub enum16_u: Option<u16>,
    #[allow(missing_docs)]
    pub bitfield16: Option<Bitfield16>,
    #[allow(missing_docs)]
    pub bitfield16_u: Option<Bitfield16U>,
    #[allow(missing_docs)]
    pub int32_1: Option<i32>,
    #[allow(missing_docs)]
    pub int32_2: Option<i32>,
    #[allow(missing_docs)]
    pub int32_3: Option<i32>,
    #[allow(missing_docs)]
    pub int32_4: Option<i32>,
    #[allow(missing_docs)]
    pub int32_5: Option<i32>,
    #[allow(missing_docs)]
    pub int32_u: Option<i32>,
    #[allow(missing_docs)]
    pub uint32_1: Option<u32>,
    #[allow(missing_docs)]
    pub uint32_2: Option<u32>,
    #[allow(missing_docs)]
    pub uint32_3: Option<u32>,
    #[allow(missing_docs)]
    pub uint32_4: Option<u32>,
    #[allow(missing_docs)]
    pub uint32_5: Option<u32>,
    #[allow(missing_docs)]
    pub uint32_u: Option<u32>,
    #[allow(missing_docs)]
    pub acc32: Option<u32>,
    #[allow(missing_docs)]
    pub acc32_u: Option<u32>,
    #[allow(missing_docs)]
    pub enum32: Option<u32>,
    #[allow(missing_docs)]
    pub enum32_u: Option<u32>,
    #[allow(missing_docs)]
    pub bitfield32: Option<Bitfield32>,
    #[allow(missing_docs)]
    pub bitfield32_u: Option<Bitfield32U>,
    #[allow(missing_docs)]
    pub ipaddr: Option<std::net::Ipv4Addr>,
    #[allow(missing_docs)]
    pub ipaddr_u: Option<std::net::Ipv4Addr>,
    #[allow(missing_docs)]
    pub int64: Option<i64>,
    #[allow(missing_docs)]
    pub int64_u: Option<i64>,
    #[allow(missing_docs)]
    pub acc64: Option<u64>,
    #[allow(missing_docs)]
    pub acc64_u: Option<u64>,
    #[allow(missing_docs)]
    pub ipv6addr: Option<std::net::Ipv6Addr>,
    #[allow(missing_docs)]
    pub ipv6addr_u: Option<std::net::Ipv6Addr>,
    #[allow(missing_docs)]
    pub float32: Option<f32>,
    #[allow(missing_docs)]
    pub float32_u: Option<f32>,
    #[allow(missing_docs)]
    pub string: Option<String>,
    #[allow(missing_docs)]
    pub string_u: Option<String>,
    #[allow(missing_docs)]
    pub sunssf_5: Option<i16>,
    #[allow(missing_docs)]
    pub sunssf_6: Option<i16>,
    #[allow(missing_docs)]
    pub sunssf_7: Option<i16>,
}
#[allow(missing_docs)]
impl Model63001 {
    pub const SUNSSF_1: crate::Point<Self, Option<i16>> = crate::Point::new(0, 1, false);
    pub const SUNSSF_2: crate::Point<Self, Option<i16>> = crate::Point::new(1, 1, false);
    pub const SUNSSF_3: crate::Point<Self, Option<i16>> = crate::Point::new(2, 1, false);
    pub const SUNSSF_4: crate::Point<Self, Option<i16>> = crate::Point::new(3, 1, false);
    pub const INT16_1: crate::Point<Self, Option<i16>> = crate::Point::new(4, 1, false);
    pub const INT16_2: crate::Point<Self, Option<i16>> = crate::Point::new(5, 1, false);
    pub const INT16_3: crate::Point<Self, Option<i16>> = crate::Point::new(6, 1, false);
    pub const INT16_4: crate::Point<Self, Option<i16>> = crate::Point::new(7, 1, true);
    pub const INT16_5: crate::Point<Self, Option<i16>> = crate::Point::new(8, 1, false);
    pub const INT16_U: crate::Point<Self, Option<i16>> = crate::Point::new(9, 1, false);
    pub const UINT16_1: crate::Point<Self, Option<u16>> = crate::Point::new(10, 1, false);
    pub const UINT16_2: crate::Point<Self, Option<u16>> = crate::Point::new(11, 1, false);
    pub const UINT16_3: crate::Point<Self, Option<u16>> = crate::Point::new(12, 1, false);
    pub const UINT16_4: crate::Point<Self, Option<u16>> = crate::Point::new(13, 1, true);
    pub const UINT16_5: crate::Point<Self, Option<u16>> = crate::Point::new(14, 1, false);
    pub const UINT16_U: crate::Point<Self, Option<u16>> = crate::Point::new(15, 1, false);
    pub const ACC16: crate::Point<Self, Option<u16>> = crate::Point::new(16, 1, false);
    pub const ACC16_U: crate::Point<Self, Option<u16>> = crate::Point::new(17, 1, false);
    pub const ENUM16: crate::Point<Self, Option<u16>> = crate::Point::new(18, 1, false);
    pub const ENUM16_U: crate::Point<Self, Option<u16>> = crate::Point::new(19, 1, false);
    pub const BITFIELD16: crate::Point<Self, Option<Bitfield16>> = crate::Point::new(20, 1, false);
    pub const BITFIELD16_U: crate::Point<Self, Option<Bitfield16U>> =
        crate::Point::new(21, 1, false);
    pub const INT32_1: crate::Point<Self, Option<i32>> = crate::Point::new(22, 2, false);
    pub const INT32_2: crate::Point<Self, Option<i32>> = crate::Point::new(24, 2, false);
    pub const INT32_3: crate::Point<Self, Option<i32>> = crate::Point::new(26, 2, true);
    pub const INT32_4: crate::Point<Self, Option<i32>> = crate::Point::new(28, 2, false);
    pub const INT32_5: crate::Point<Self, Option<i32>> = crate::Point::new(30, 2, false);
    pub const INT32_U: crate::Point<Self, Option<i32>> = crate::Point::new(32, 2, false);
    pub const UINT32_1: crate::Point<Self, Option<u32>> = crate::Point::new(34, 2, false);
    pub const UINT32_2: crate::Point<Self, Option<u32>> = crate::Point::new(36, 2, false);
    pub const UINT32_3: crate::Point<Self, Option<u32>> = crate::Point::new(38, 2, true);
    pub const UINT32_4: crate::Point<Self, Option<u32>> = crate::Point::new(40, 2, false);
    pub const UINT32_5: crate::Point<Self, Option<u32>> = crate::Point::new(42, 2, false);
    pub const UINT32_U: crate::Point<Self, Option<u32>> = crate::Point::new(44, 2, false);
    pub const ACC32: crate::Point<Self, Option<u32>> = crate::Point::new(46, 2, false);
    pub const ACC32_U: crate::Point<Self, Option<u32>> = crate::Point::new(48, 2, false);
    pub const ENUM32: crate::Point<Self, Option<u32>> = crate::Point::new(50, 2, false);
    pub const ENUM32_U: crate::Point<Self, Option<u32>> = crate::Point::new(52, 2, false);
    pub const BITFIELD32: crate::Point<Self, Option<Bitfield32>> = crate::Point::new(54, 2, false);
    pub const BITFIELD32_U: crate::Point<Self, Option<Bitfield32U>> =
        crate::Point::new(56, 2, false);
    pub const IPADDR: crate::Point<Self, Option<std::net::Ipv4Addr>> =
        crate::Point::new(58, 2, true);
    pub const IPADDR_U: crate::Point<Self, Option<std::net::Ipv4Addr>> =
        crate::Point::new(60, 2, false);
    pub const INT64: crate::Point<Self, Option<i64>> = crate::Point::new(62, 4, true);
    pub const INT64_U: crate::Point<Self, Option<i64>> = crate::Point::new(66, 4, false);
    pub const ACC64: crate::Point<Self, Option<u64>> = crate::Point::new(70, 4, false);
    pub const ACC64_U: crate::Point<Self, Option<u64>> = crate::Point::new(74, 4, false);
    pub const IPV6ADDR: crate::Point<Self, Option<std::net::Ipv6Addr>> =
        crate::Point::new(78, 8, false);
    pub const IPV6ADDR_U: crate::Point<Self, Option<std::net::Ipv6Addr>> =
        crate::Point::new(86, 8, false);
    pub const FLOAT32: crate::Point<Self, Option<f32>> = crate::Point::new(94, 2, true);
    pub const FLOAT32_U: crate::Point<Self, Option<f32>> = crate::Point::new(96, 2, false);
    pub const STRING: crate::Point<Self, Option<String>> = crate::Point::new(98, 16, true);
    pub const STRING_U: crate::Point<Self, Option<String>> = crate::Point::new(114, 16, false);
    pub const SUNSSF_5: crate::Point<Self, Option<i16>> = crate::Point::new(130, 1, false);
    pub const SUNSSF_6: crate::Point<Self, Option<i16>> = crate::Point::new(131, 1, false);
    pub const SUNSSF_7: crate::Point<Self, Option<i16>> = crate::Point::new(132, 1, false);
}
impl crate::Model for Model63001 {
    const ID: u16 = 63001;
    fn from_data(data: &[u16]) -> Result<Self, crate::DecodeError> {
        Ok(Self {
            sunssf_1: Self::SUNSSF_1.from_data(data)?,
            sunssf_2: Self::SUNSSF_2.from_data(data)?,
            sunssf_3: Self::SUNSSF_3.from_data(data)?,
            sunssf_4: Self::SUNSSF_4.from_data(data)?,
            int16_1: Self::INT16_1.from_data(data)?,
            int16_2: Self::INT16_2.from_data(data)?,
            int16_3: Self::INT16_3.from_data(data)?,
            int16_4: Self::INT16_4.from_data(data)?,
            int16_5: Self::INT16_5.from_data(data)?,
            int16_u: Self::INT16_U.from_data(data)?,
            uint16_1: Self::UINT16_1.from_data(data)?,
            uint16_2: Self::UINT16_2.from_data(data)?,
            uint16_3: Self::UINT16_3.from_data(data)?,
            uint16_4: Self::UINT16_4.from_data(data)?,
            uint16_5: Self::UINT16_5.from_data(data)?,
            uint16_u: Self::UINT16_U.from_data(data)?,
            acc16: Self::ACC16.from_data(data)?,
            acc16_u: Self::ACC16_U.from_data(data)?,
            enum16: Self::ENUM16.from_data(data)?,
            enum16_u: Self::ENUM16_U.from_data(data)?,
            bitfield16: Self::BITFIELD16.from_data(data)?,
            bitfield16_u: Self::BITFIELD16_U.from_data(data)?,
            int32_1: Self::INT32_1.from_data(data)?,
            int32_2: Self::INT32_2.from_data(data)?,
            int32_3: Self::INT32_3.from_data(data)?,
            int32_4: Self::INT32_4.from_data(data)?,
            int32_5: Self::INT32_5.from_data(data)?,
            int32_u: Self::INT32_U.from_data(data)?,
            uint32_1: Self::UINT32_1.from_data(data)?,
            uint32_2: Self::UINT32_2.from_data(data)?,
            uint32_3: Self::UINT32_3.from_data(data)?,
            uint32_4: Self::UINT32_4.from_data(data)?,
            uint32_5: Self::UINT32_5.from_data(data)?,
            uint32_u: Self::UINT32_U.from_data(data)?,
            acc32: Self::ACC32.from_data(data)?,
            acc32_u: Self::ACC32_U.from_data(data)?,
            enum32: Self::ENUM32.from_data(data)?,
            enum32_u: Self::ENUM32_U.from_data(data)?,
            bitfield32: Self::BITFIELD32.from_data(data)?,
            bitfield32_u: Self::BITFIELD32_U.from_data(data)?,
            ipaddr: Self::IPADDR.from_data(data)?,
            ipaddr_u: Self::IPADDR_U.from_data(data)?,
            int64: Self::INT64.from_data(data)?,
            int64_u: Self::INT64_U.from_data(data)?,
            acc64: Self::ACC64.from_data(data)?,
            acc64_u: Self::ACC64_U.from_data(data)?,
            ipv6addr: Self::IPV6ADDR.from_data(data)?,
            ipv6addr_u: Self::IPV6ADDR_U.from_data(data)?,
            float32: Self::FLOAT32.from_data(data)?,
            float32_u: Self::FLOAT32_U.from_data(data)?,
            string: Self::STRING.from_data(data)?,
            string_u: Self::STRING_U.from_data(data)?,
            sunssf_5: Self::SUNSSF_5.from_data(data)?,
            sunssf_6: Self::SUNSSF_6.from_data(data)?,
            sunssf_7: Self::SUNSSF_7.from_data(data)?,
        })
    }
    fn addr(models: &crate::Models) -> crate::ModelAddr<Self> {
        models.m63001
    }
}
bitflags::bitflags! {
    #[allow(missing_docs)] #[derive(Copy, Clone, Debug, Eq, PartialEq)]
    #[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] pub
    struct Bitfield16 : u16 {}
}
impl crate::Value for Bitfield16 {
    fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
        let value = u16::decode(data)?;
        Ok(Self::from_bits_retain(value))
    }
    fn encode(self) -> Box<[u16]> {
        self.bits().encode()
    }
}
impl crate::Value for Option<Bitfield16> {
    fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
        let value = u16::decode(data)?;
        if value != 65535u16 {
            Ok(Some(Bitfield16::from_bits_retain(value)))
        } else {
            Ok(None)
        }
    }
    fn encode(self) -> Box<[u16]> {
        if let Some(value) = self {
            value.encode()
        } else {
            65535u16.encode()
        }
    }
}
bitflags::bitflags! {
    #[allow(missing_docs)] #[derive(Copy, Clone, Debug, Eq, PartialEq)]
    #[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] pub
    struct Bitfield16U : u16 {}
}
impl crate::Value for Bitfield16U {
    fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
        let value = u16::decode(data)?;
        Ok(Self::from_bits_retain(value))
    }
    fn encode(self) -> Box<[u16]> {
        self.bits().encode()
    }
}
impl crate::Value for Option<Bitfield16U> {
    fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
        let value = u16::decode(data)?;
        if value != 65535u16 {
            Ok(Some(Bitfield16U::from_bits_retain(value)))
        } else {
            Ok(None)
        }
    }
    fn encode(self) -> Box<[u16]> {
        if let Some(value) = self {
            value.encode()
        } else {
            65535u16.encode()
        }
    }
}
bitflags::bitflags! {
    #[allow(missing_docs)] #[derive(Copy, Clone, Debug, Eq, PartialEq)]
    #[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] pub
    struct Bitfield32 : u32 {}
}
impl crate::Value for Bitfield32 {
    fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
        let value = u32::decode(data)?;
        Ok(Self::from_bits_retain(value))
    }
    fn encode(self) -> Box<[u16]> {
        self.bits().encode()
    }
}
impl crate::Value for Option<Bitfield32> {
    fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
        let value = u32::decode(data)?;
        if value != 4294967295u32 {
            Ok(Some(Bitfield32::from_bits_retain(value)))
        } else {
            Ok(None)
        }
    }
    fn encode(self) -> Box<[u16]> {
        if let Some(value) = self {
            value.encode()
        } else {
            4294967295u32.encode()
        }
    }
}
bitflags::bitflags! {
    #[allow(missing_docs)] #[derive(Copy, Clone, Debug, Eq, PartialEq)]
    #[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] pub
    struct Bitfield32U : u32 {}
}
impl crate::Value for Bitfield32U {
    fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
        let value = u32::decode(data)?;
        Ok(Self::from_bits_retain(value))
    }
    fn encode(self) -> Box<[u16]> {
        self.bits().encode()
    }
}
impl crate::Value for Option<Bitfield32U> {
    fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
        let value = u32::decode(data)?;
        if value != 4294967295u32 {
            Ok(Some(Bitfield32U::from_bits_retain(value)))
        } else {
            Ok(None)
        }
    }
    fn encode(self) -> Box<[u16]> {
        if let Some(value) = self {
            value.encode()
        } else {
            4294967295u32.encode()
        }
    }
}