use crate::lower::ir;
use microcad_lang_base::{Identifier, SrcRef};
use microcad_lang_proc_macros::SrcReferrer;
#[derive(Clone, Debug, SrcReferrer)]
pub struct FunctionSignature {
pub parameters: ir::ParameterList,
pub return_type: Option<ir::TypeAnnotation>,
pub src_ref: SrcRef,
}
impl FunctionSignature {
pub fn parameter_by_name(&self, name: &Identifier) -> Option<&ir::Parameter> {
use crate::lower::Identifiable;
self.parameters.iter().find(|arg| arg.id_ref() == name)
}
}
impl std::fmt::Display for FunctionSignature {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"({}){}",
self.parameters,
if let Some(ret) = &self.return_type {
format!("-> {ret}")
} else {
String::default()
}
)
}
}