use crate::ast::TypeExpr;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum BuiltinReturn {
Named(&'static str),
Union(&'static [&'static str]),
Never,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct BuiltinMetadata {
pub name: &'static str,
pub return_types: &'static [&'static str],
}
#[derive(Debug, Clone, Copy)]
pub(crate) struct BuiltinSig {
pub name: &'static str,
pub return_type: Option<BuiltinReturn>,
}
#[derive(Debug, Clone)]
pub(crate) struct BuiltinGenericSig {
pub type_params: Vec<String>,
pub params: Vec<TypeExpr>,
pub return_type: TypeExpr,
}
pub(crate) const UNION_STRING_NIL: &[&str] = &["string", "nil"];
pub(crate) const UNION_DICT_NIL: &[&str] = &["dict", "nil"];
pub(crate) const EMPTY_RETURN_TYPES: &[&str] = &[];
pub(crate) const RETURN_BOOL: &[&str] = &["bool"];
pub(crate) const RETURN_BYTES: &[&str] = &["bytes"];
pub(crate) const RETURN_DICT: &[&str] = &["dict"];
pub(crate) const RETURN_FLOAT: &[&str] = &["float"];
pub(crate) const RETURN_INT: &[&str] = &["int"];
pub(crate) const RETURN_LIST: &[&str] = &["list"];
pub(crate) const RETURN_NEVER: &[&str] = &["never"];
pub(crate) const RETURN_NIL: &[&str] = &["nil"];
pub(crate) const RETURN_STRING: &[&str] = &["string"];