use clang;
use ir::context::{BindgenContext, ItemId};
use ir::ty::TypeKind;
#[derive(Debug)]
pub enum ParseError {
Recurse,
Continue,
}
#[derive(Debug)]
pub enum ParseResult<T> {
AlreadyResolved(ItemId),
New(T, Option<clang::Cursor>),
}
pub trait ClangSubItemParser: Sized {
fn parse(cursor: clang::Cursor,
context: &mut BindgenContext)
-> Result<ParseResult<Self>, ParseError>;
}
pub trait ClangItemParser: Sized {
fn parse(cursor: clang::Cursor,
parent: Option<ItemId>,
context: &mut BindgenContext)
-> Result<ItemId, ParseError>;
fn from_ty(ty: &clang::Type,
location: Option<clang::Cursor>,
parent: Option<ItemId>,
ctx: &mut BindgenContext)
-> Result<ItemId, ParseError>;
fn from_ty_with_id(id: ItemId,
ty: &clang::Type,
location: Option<clang::Cursor>,
parent: Option<ItemId>,
ctx: &mut BindgenContext)
-> Result<ItemId, ParseError>;
fn from_ty_or_ref(ty: clang::Type,
location: Option<clang::Cursor>,
parent_id: Option<ItemId>,
context: &mut BindgenContext)
-> ItemId;
fn from_ty_or_ref_with_id(potential_id: ItemId,
ty: clang::Type,
location: Option<clang::Cursor>,
parent_id: Option<ItemId>,
context: &mut BindgenContext)
-> ItemId;
fn named_type<S>(name: S,
parent: ItemId,
context: &mut BindgenContext)
-> ItemId
where S: Into<String>;
fn named_type_with_id<S>(id: ItemId,
name: S,
parent: ItemId,
context: &mut BindgenContext)
-> ItemId
where S: Into<String>;
fn builtin_type(kind: TypeKind,
is_const: bool,
context: &mut BindgenContext)
-> ItemId;
}