use bacnet_types::constructed::{BACnetLandingDoorStatus, LandingDoor};
use bacnet_types::enums::DoorStatus;
use bacnet_types::error::Error;
use bytes::BytesMut;
use super::floor_pairs::{decode_floor_pairs, encode_floor_pairs, PairNames};
const NAMES: PairNames = PairNames {
value: "landing door status",
frame: "landing door status landing-doors",
floor: "landing door floor-number",
second: "landing door door-status",
second_oversized: "door-status [1] exceeds 32 bits",
};
pub fn encode_landing_door_status(buf: &mut BytesMut, value: &BACnetLandingDoorStatus) {
encode_floor_pairs(
buf,
value
.landing_doors
.iter()
.map(|door| (door.floor_number, door.door_status.to_raw())),
);
}
pub fn decode_landing_door_status(
data: &[u8],
offset: usize,
) -> Result<(BACnetLandingDoorStatus, usize), Error> {
let (pairs, end) = decode_floor_pairs(data, offset, &NAMES)?;
let landing_doors = pairs
.into_iter()
.map(|(floor_number, status)| LandingDoor {
floor_number,
door_status: DoorStatus::from_raw(status),
})
.collect();
Ok((BACnetLandingDoorStatus { landing_doors }, end))
}