mod args;
mod param;
pub use args::*;
pub use param::*;
use crate::{ffi::FfiSlice, sem::ty::TyKind};
#[repr(C)]
#[derive(Debug)]
pub struct GenericArgs<'ast> {
args: FfiSlice<'ast, GenericArgKind<'ast>>,
}
impl<'ast> GenericArgs<'ast> {
pub fn args(&self) -> &[GenericArgKind<'ast>] {
self.args.get()
}
pub fn is_empty(&self) -> bool {
self.args.is_empty()
}
}
#[cfg(feature = "driver-api")]
impl<'ast> GenericArgs<'ast> {
pub fn new(args: &'ast [GenericArgKind<'ast>]) -> Self {
Self { args: args.into() }
}
}
#[repr(C)]
#[non_exhaustive]
#[derive(Debug)]
#[cfg_attr(feature = "driver-api", derive(Clone))]
pub enum GenericArgKind<'ast> {
Ty(TyKind<'ast>),
Binding(&'ast BindingArg<'ast>),
Const(&'ast ConstArg<'ast>),
}