use crate::ast::generic::{GenericParams, TyParamBound};
use crate::ast::ty::TyKind;
use crate::ffi::{FfiOption, FfiSlice};
use super::CommonItemData;
#[repr(C)]
#[derive(Debug)]
pub struct TyAliasItem<'ast> {
data: CommonItemData<'ast>,
generics: GenericParams<'ast>,
bounds: FfiSlice<'ast, TyParamBound<'ast>>,
aliased_ty: FfiOption<TyKind<'ast>>,
}
super::impl_item_data!(TyAliasItem, TyAlias);
impl<'ast> TyAliasItem<'ast> {
pub fn generics(&self) -> &GenericParams<'ast> {
&self.generics
}
pub fn bounds(&self) -> &[TyParamBound<'ast>] {
self.bounds.get()
}
pub fn aliased_ty(&self) -> Option<TyKind> {
self.aliased_ty.copy()
}
}
#[cfg(feature = "driver-api")]
impl<'ast> TyAliasItem<'ast> {
pub fn new(
data: CommonItemData<'ast>,
generics: GenericParams<'ast>,
bounds: &'ast [TyParamBound<'ast>],
aliased_ty: Option<TyKind<'ast>>,
) -> Self {
Self {
data,
generics,
bounds: bounds.into(),
aliased_ty: aliased_ty.into(),
}
}
}