use deku::prelude::*;
#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default, DekuRead, DekuWrite)]
#[deku(endian = "endian", ctx = "endian: deku::ctx::Endian")]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ContextAssociationLists {
w1: u32,
w2: u32,
#[deku(count = "((w1 >> 16) & 0x3FF)")]
source_list: Vec<u32>,
#[deku(count = "(w1 & 0x3FF)")]
system_list: Vec<u32>,
#[deku(count = "(w2 >> 16)")]
vector_component_list: Vec<u32>,
#[deku(count = "(w2 & 0x1FF)")]
async_channel_list: Vec<u32>,
#[deku(cond = "(w2 & (1 << 15) > 1)", count = "(w2 & 0x1FF)")]
async_channel_tag_list: Vec<u32>,
}
impl ContextAssociationLists {
pub fn size_words(&self) -> u16 {
let mut ret = 2;
ret += self.source_list.len();
ret += self.system_list.len();
ret += self.vector_component_list.len();
ret += self.async_channel_list.len();
ret += self.async_channel_tag_list.len();
ret as u16
}
}