use crate::lang::{FunctionId, TypeId};
#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Hash)]
pub enum RvalTransform {
PassThrough,
AsyncTask(TypeId),
}
#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Hash)]
pub enum ArgTransform {
PassThrough,
Ref,
WrapDelegate,
}
#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Hash)]
pub struct FnTransforms {
pub rval: RvalTransform,
pub args: Vec<ArgTransform>,
}
#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Hash)]
pub enum OverloadKind {
Simple,
Body(FnTransforms),
Async(FnTransforms),
}
#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Hash)]
pub struct Overload {
pub kind: OverloadKind,
pub base: FunctionId,
}