#[cfg(not(feature = "std"))]
use alloc::vec::Vec;
use super::AuditPropertyReference;
use crate::enums::PropertyIdentifier;
use crate::error::Error;
use crate::primitives::ObjectIdentifier;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PropertyReference {
pub property_identifier: PropertyIdentifier,
pub property_array_index: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ReadAccessSpecification {
pub object_identifier: ObjectIdentifier,
pub list_of_property_references: Vec<PropertyReference>,
}
impl From<PropertyReference> for AuditPropertyReference {
fn from(value: PropertyReference) -> Self {
Self {
property_identifier: value.property_identifier,
property_array_index: value.property_array_index.map(u64::from),
}
}
}
impl TryFrom<AuditPropertyReference> for PropertyReference {
type Error = Error;
fn try_from(value: AuditPropertyReference) -> Result<Self, Self::Error> {
Ok(Self {
property_identifier: value.property_identifier,
property_array_index: value
.property_array_index
.map(u32::try_from)
.transpose()
.map_err(|_| {
Error::OutOfRange(
"Audit property-array-index exceeds shared PropertyReference u32 limit"
.into(),
)
})?,
})
}
}