blob: 3f0178654a22509f29d06aae2bbb5a363b959775 [file] [log] [blame]
#![allow(dead_code, clippy::upper_case_acronyms)]
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
pub struct TypeName {
pub namespace: String,
pub name: String,
pub generics: Vec<Type>,
}
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
pub enum Type {
Void,
Bool,
Char,
I8,
U8,
I16,
U16,
I32,
U32,
I64,
U64,
F32,
F64,
ISize,
USize,
String,
GUID,
IUnknown,
IInspectable,
HRESULT,
PSTR,
PWSTR,
PCSTR,
PCWSTR,
BSTR,
TypeName,
TypeRef(TypeName),
GenericParam(u16),
MutPtr(Box<Self>, usize),
ConstPtr(Box<Self>, usize),
Win32Array(Box<Self>, usize),
WinrtArray(Box<Self>),
WinrtArrayRef(Box<Self>),
ConstRef(Box<Self>),
}
impl Type {
pub fn into_mut_ptr(self) -> Self {
match self {
Self::MutPtr(ty, count) => Self::MutPtr(ty, count + 1),
Self::ConstPtr(ty, count) => Self::MutPtr(ty, count + 1),
_ => Self::MutPtr(Box::new(self), 1),
}
}
pub fn into_const_ptr(self) -> Self {
match self {
Self::MutPtr(ty, count) => Self::ConstPtr(ty, count + 1),
Self::ConstPtr(ty, count) => Self::ConstPtr(ty, count + 1),
_ => Self::ConstPtr(Box::new(self), 1),
}
}
pub fn into_array(self, len: usize) -> Self {
Self::Win32Array(Box::new(self), len)
}
}
pub struct Signature {
pub params: Vec<SignatureParam>,
pub return_type: Type,
pub call_flags: u8,
}
// TODO: just Param?
pub struct SignatureParam {
pub name: String,
pub ty: Type,
}