microcad_lang/lower/ir/parameter/
mod.rs1mod parameter_list;
7
8use crate::lower::ir;
9
10use microcad_lang_base::{Identifier, OrdMapValue, SrcRef};
11use microcad_lang_proc_macros::{Identifiable, SrcReferrer};
12pub use parameter_list::*;
13
14#[derive(Clone, Debug, Default, SrcReferrer, Identifiable)]
16pub struct Parameter {
17 pub(crate) id: Identifier,
19 pub specified_type: Option<ir::TypeAnnotation>,
21 pub default_value: Option<ir::Expression>,
23 pub src_ref: SrcRef,
25}
26
27impl OrdMapValue<Identifier> for Parameter {
28 fn key(&self) -> Option<Identifier> {
29 Some(self.id.clone())
30 }
31}
32
33impl std::fmt::Display for Parameter {
34 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
35 match (&self.specified_type, &self.default_value) {
36 (Some(t), Some(v)) => write!(f, "{}: {t} = {v}", self.id),
37 (Some(t), None) => write!(f, "{}: {t}", self.id),
38 (None, Some(v)) => write!(f, "{} = {v}", self.id),
39 _ => Ok(()),
40 }
41 }
42}