microcad_lang/syntax/parameter/
parameter_list.rs1use crate::{ord_map::*, syntax::*};
7use derive_more::{Deref, DerefMut};
8use microcad_lang_base::{Refer, SrcRef, SrcReferrer, TreeDisplay, TreeState};
9
10#[derive(Clone, Default, Deref, DerefMut)]
12pub struct ParameterList(pub Refer<OrdMap<Identifier, Parameter>>);
13
14impl ParameterList {
15 pub fn ids(&self) -> impl Iterator<Item = Identifier> {
17 self.keys().cloned()
18 }
19
20 pub fn contains_key(&self, id: &Identifier) -> bool {
22 self.iter().any(|p| *id == p.id)
23 }
24}
25
26impl SrcReferrer for ParameterList {
27 fn src_ref(&self) -> SrcRef {
28 self.0.src_ref.clone()
29 }
30}
31
32impl std::fmt::Display for ParameterList {
33 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34 write!(
35 f,
36 "{}",
37 self.0
38 .iter()
39 .map(|p| p.to_string())
40 .collect::<Vec<_>>()
41 .join(", ")
42 )
43 }
44}
45
46impl std::fmt::Debug for ParameterList {
47 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
48 write!(
49 f,
50 "{}",
51 self.0
52 .iter()
53 .map(|p| format!("{p:?}"))
54 .collect::<Vec<_>>()
55 .join(", ")
56 )
57 }
58}
59
60impl TreeDisplay for ParameterList {
61 fn tree_print(&self, f: &mut std::fmt::Formatter, mut depth: TreeState) -> std::fmt::Result {
62 writeln!(f, "{:depth$}ParameterList:", "")?;
63 depth.indent();
64 self.0.iter().try_for_each(|p| p.tree_print(f, depth))
65 }
66}