ap33772s_rs/commands/data_objects/
all_source_power_data_object.rs1use super::standard_power_range_data_object::StandardPowerRangeDataObject;
2use crate::commands::data_objects::source_power_range_data_object::SourcePowerRangeDataObject;
3use crate::commands::{
4 data_objects::extended_power_range_data_object::ExtendedPowerRangeDataObject,
5 power_delivery::power_delivery_request_message::PowerDataObject,
6};
7
8pub(crate) const MAX_STANDARD_POWER_DATA_OBJECTS: usize = 7;
10pub(crate) const MAX_EXTENDED_POWER_DATA_OBJECTS: usize = 6;
12
13#[derive(Debug, PartialEq, Clone)]
17pub struct AllSourceDataPowerDataObject {
18 pub power_data_objects: [SourcePowerRangeDataObject;
19 MAX_STANDARD_POWER_DATA_OBJECTS + MAX_EXTENDED_POWER_DATA_OBJECTS],
20}
21
22impl core::fmt::Display for AllSourceDataPowerDataObject {
23 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
24 writeln!(f, "AllSourceDataPowerDataObject {{")?;
25 writeln!(f, " power_data_objects: [")?;
26 for (i, power_obj) in self.power_data_objects.iter().enumerate() {
27 writeln!(f, " [{i}]: {power_obj}")?;
28 }
29 writeln!(f, " ]")?;
30 write!(f, "}}")
31 }
32}
33
34#[cfg(feature = "defmt")]
35impl defmt::Format for AllSourceDataPowerDataObject {
36 fn format(&self, f: defmt::Formatter) {
37 defmt::write!(f, "AllSourceDataPowerDataObject {{\n");
38 defmt::write!(f, " power_data_objects: [\n");
39 for (i, power_obj) in self.power_data_objects.iter().enumerate() {
40 defmt::write!(f, " [{:?}] : {=?}\n", i, power_obj);
41 }
42 defmt::write!(f, " ]\n");
43 defmt::write!(f, "}}");
44 }
45}
46
47impl Default for AllSourceDataPowerDataObject {
48 fn default() -> Self {
50 AllSourceDataPowerDataObject {
51 power_data_objects: [
52 SourcePowerRangeDataObject::Standard(StandardPowerRangeDataObject::default()),
54 SourcePowerRangeDataObject::Standard(StandardPowerRangeDataObject::default()),
55 SourcePowerRangeDataObject::Standard(StandardPowerRangeDataObject::default()),
56 SourcePowerRangeDataObject::Standard(StandardPowerRangeDataObject::default()),
57 SourcePowerRangeDataObject::Standard(StandardPowerRangeDataObject::default()),
58 SourcePowerRangeDataObject::Standard(StandardPowerRangeDataObject::default()),
59 SourcePowerRangeDataObject::Standard(StandardPowerRangeDataObject::default()),
60 SourcePowerRangeDataObject::Extended(ExtendedPowerRangeDataObject::default()),
62 SourcePowerRangeDataObject::Extended(ExtendedPowerRangeDataObject::default()),
63 SourcePowerRangeDataObject::Extended(ExtendedPowerRangeDataObject::default()),
64 SourcePowerRangeDataObject::Extended(ExtendedPowerRangeDataObject::default()),
65 SourcePowerRangeDataObject::Extended(ExtendedPowerRangeDataObject::default()),
66 SourcePowerRangeDataObject::Extended(ExtendedPowerRangeDataObject::default()),
67 ],
68 }
69 }
70}
71
72impl AllSourceDataPowerDataObject {
73 pub fn get_power_data_object(&self, index: PowerDataObject) -> &SourcePowerRangeDataObject {
75 assert!(
77 usize::from(index) < self.power_data_objects.len(),
78 "Index out of bounds for power data objects"
79 );
80 assert_ne!(
81 usize::from(index),
82 0,
83 "Power Data Object Should never be zero!"
84 );
85 let index = usize::from(index) - 1;
86 &self.power_data_objects[index]
87 }
88}