1use super::{new_node, Config, Element, Encode, EncodeError};
2
3use crate::svd::Cpu;
4impl Encode for Cpu {
5 type Error = EncodeError;
6
7 fn encode_with_config(&self, _config: &Config) -> Result<Element, EncodeError> {
8 let mut children = vec![
9 new_node("name", self.name.clone()),
10 new_node("revision", self.revision.clone()),
11 self.endian.encode_node()?,
12 new_node("mpuPresent", format!("{}", self.mpu_present)),
13 new_node("fpuPresent", format!("{}", self.fpu_present)),
14 ];
15 if let Some(v) = &self.fpu_double_precision {
16 children.push(new_node("fpuDP", format!("{}", v)));
17 }
18 if let Some(v) = &self.dsp_present {
19 children.push(new_node("dspPresent", format!("{}", v)));
20 }
21 if let Some(v) = &self.icache_present {
22 children.push(new_node("icachePresent", format!("{}", v)));
23 }
24 if let Some(v) = &self.dcache_present {
25 children.push(new_node("dcachePresent", format!("{}", v)));
26 }
27 if let Some(v) = &self.itcm_present {
28 children.push(new_node("itcmPresent", format!("{}", v)));
29 }
30 if let Some(v) = &self.dtcm_present {
31 children.push(new_node("dtcmPresent", format!("{}", v)));
32 }
33 if let Some(v) = &self.vtor_present {
34 children.push(new_node("vtorPresent", format!("{}", v)));
35 }
36 children.push(new_node(
37 "nvicPrioBits",
38 format!("{}", self.nvic_priority_bits),
39 ));
40 children.push(new_node(
41 "vendorSystickConfig",
42 format!("{}", self.has_vendor_systick),
43 ));
44
45 if let Some(v) = &self.device_num_interrupts {
46 children.push(new_node("deviceNumInterrupts", format!("{}", v)));
47 }
48 if let Some(v) = &self.sau_num_regions {
49 children.push(new_node("sauNumRegions", format!("{}", v)));
50 }
51
52 let mut elem = Element::new("cpu");
53 elem.children = children;
54 Ok(elem)
55 }
56}