use crate::{
common::{Abi, Mutability, Safety},
ffi::FfiSlice,
};
use super::{CommonTyData, TyKind};
#[repr(C)]
#[derive(Debug)]
#[cfg_attr(feature = "driver-api", derive(typed_builder::TypedBuilder))]
pub struct RefTy<'ast> {
data: CommonTyData<'ast>,
mutability: Mutability,
inner_ty: TyKind<'ast>,
}
impl<'ast> RefTy<'ast> {
pub fn mutability(&self) -> Mutability {
self.mutability
}
pub fn inner_ty(&self) -> TyKind<'ast> {
self.inner_ty
}
}
super::impl_ty_data!(RefTy<'ast>, Ref);
#[repr(C)]
#[derive(Debug)]
#[cfg_attr(feature = "driver-api", derive(typed_builder::TypedBuilder))]
pub struct RawPtrTy<'ast> {
data: CommonTyData<'ast>,
mutability: Mutability,
inner_ty: TyKind<'ast>,
}
impl<'ast> RawPtrTy<'ast> {
pub fn mutability(&self) -> Mutability {
self.mutability
}
pub fn inner_ty(&self) -> TyKind<'ast> {
self.inner_ty
}
}
super::impl_ty_data!(RawPtrTy<'ast>, RawPtr);
#[repr(C)]
#[derive(Debug)]
#[cfg_attr(feature = "driver-api", derive(typed_builder::TypedBuilder))]
pub struct FnPtrTy<'ast> {
data: CommonTyData<'ast>,
safety: Safety,
abi: Abi,
#[cfg_attr(feature = "driver-api", builder(setter(into)))]
params: FfiSlice<'ast, TyKind<'ast>>,
return_ty: TyKind<'ast>,
}
impl<'ast> FnPtrTy<'ast> {
pub fn safety(&self) -> Safety {
self.safety
}
pub fn abi(&self) -> Abi {
self.abi
}
pub fn params(&self) -> &[TyKind<'ast>] {
self.params.get()
}
pub fn return_ty(&self) -> TyKind<'ast> {
self.return_ty
}
}
super::impl_ty_data!(FnPtrTy<'ast>, FnPtr);