use crate::r#type::Type;
#[derive(Clone, Copy)]
pub struct Signature<'a> {
pub arguments: &'a [Type<'a>],
pub return_type: Type<'a>,
}
impl<'a> Signature<'a> {
pub fn new(arguments: &'a [Type<'a>], return_type: Type<'a>) -> Signature<'a> {
Signature {
arguments,
return_type,
}
}
}
impl<'a> From<Signature<'a>> for String {
fn from(value: Signature) -> Self {
let mut signature = String::new();
signature.push('(');
for arg in value.arguments {
signature.push_str(&<Type as Into<String>>::into(*arg));
}
signature.push(')');
signature.push_str(&<Type as Into<String>>::into(value.return_type));
signature
}
}