autosar_data_abstraction/communication/transport_layer/
mod.rs1use crate::{AbstractionElement, AutosarAbstractionError, IdentifiableAbstractionElement, abstraction_element};
2use autosar_data::{Element, ElementName};
3
4mod can_tp;
5mod doip_tp;
6mod flexray_ar_tp;
7mod flexray_tp;
8
9pub use can_tp::*;
10pub use doip_tp::*;
11pub use flexray_ar_tp::*;
12pub use flexray_tp::*;
13
14#[derive(Debug, Clone, PartialEq, Eq, Hash)]
20pub struct TpAddress(Element);
21abstraction_element!(TpAddress, TpAddress);
22impl IdentifiableAbstractionElement for TpAddress {}
23
24impl TpAddress {
25 pub(crate) fn new(name: &str, parent: &Element, address: u32) -> Result<Self, AutosarAbstractionError> {
26 let tp_address_elem = parent.create_named_sub_element(ElementName::TpAddress, name)?;
27 let tp_address = Self(tp_address_elem);
28 tp_address.set_address(address)?;
29
30 Ok(tp_address)
31 }
32
33 pub fn set_address(&self, address: u32) -> Result<(), AutosarAbstractionError> {
35 self.element()
36 .get_or_create_sub_element(ElementName::TpAddress)?
37 .set_character_data(u64::from(address))?;
38 Ok(())
39 }
40
41 #[must_use]
43 pub fn address(&self) -> Option<u32> {
44 self.element()
45 .get_sub_element(ElementName::TpAddress)?
46 .character_data()?
47 .parse_integer()
48 }
49}