use crate::parsed_type::ParsedType;
#[derive(Clone)]
pub(crate) struct AstFnArgument {
pub name: String,
pub ty: ParsedType,
}
#[derive(Clone)]
pub(crate) struct AstFnSignature {
pub visibility: syn::Visibility,
pub name: String,
pub arguments: Vec<AstFnArgument>,
pub output_type: Option<ParsedType>,
}
#[derive(Clone)]
pub(crate) struct AstRecord {
pub name: String,
pub fields: AstRecordFields,
pub original: syn::ItemStruct,
}
#[derive(Debug, Clone, PartialEq)]
pub(crate) enum AstRecordFields {
Named(Vec<AstRecordField>),
#[allow(dead_code)] Unnamed(Vec<AstRecordField>),
#[allow(dead_code)] Unit,
}
#[derive(Debug, Clone, PartialEq)]
pub(crate) struct AstRecordField {
pub name: Option<String>,
pub ty: ParsedType,
}
#[derive(Clone)]
pub(crate) struct AstExternFn {
pub link_name: Option<String>,
pub signature: AstFnSignature,
}
#[derive(Clone)]
pub(crate) struct AstExternMod {
pub namespace: String,
pub imports: Vec<AstExternFn>,
pub original: syn::ItemForeignMod,
}
#[derive(Clone)]
pub(crate) struct AstFn {
pub signature: AstFnSignature,
pub original: syn::ItemFn,
}
#[derive(Clone)]
pub(crate) enum MarineAst {
Function(AstFn),
ExternMod(AstExternMod),
Record(AstRecord),
}