marine_macro_impl/
ast_types.rs1use crate::parsed_type::ParsedType;
18
19#[derive(Clone)]
20pub(crate) struct AstFnArgument {
21 pub(crate) name: String,
22 pub(crate) ty: ParsedType,
23}
24
25#[derive(Clone)]
26pub(crate) struct AstFnSignature {
27 pub(crate) visibility: syn::Visibility,
28 pub(crate) name: String,
29 pub(crate) arguments: Vec<AstFnArgument>,
30 pub(crate) output_type: Option<ParsedType>,
33}
34
35#[derive(Clone)]
36pub(crate) struct AstRecord {
37 pub(crate) name: String,
38 pub(crate) fields: AstRecordFields,
39 pub(crate) original: syn::ItemStruct,
40}
41
42#[derive(Debug, Clone, PartialEq)]
43pub(crate) enum AstRecordFields {
44 Named(Vec<AstRecordField>),
45
46 #[allow(dead_code)] Unnamed(Vec<AstRecordField>),
50
51 #[allow(dead_code)] Unit,
53}
54
55#[derive(Debug, Clone, PartialEq)]
56pub(crate) struct AstRecordField {
57 pub(crate) name: Option<String>,
59 pub(crate) ty: ParsedType,
60}
61
62#[derive(Clone)]
63pub(crate) struct AstExternFn {
64 pub(crate) link_name: Option<String>,
65 pub(crate) signature: AstFnSignature,
67}
68
69#[derive(Clone)]
70pub(crate) struct AstExternMod {
71 pub(crate) namespace: String,
72 pub(crate) imports: Vec<AstExternFn>,
74}
75
76#[derive(Clone)]
77pub(crate) struct AstFn {
78 pub(crate) signature: AstFnSignature,
79 pub(crate) original: syn::ItemFn,
80}
81
82#[derive(Clone)]
83pub(crate) enum MarineAst {
84 Function(Box<AstFn>),
85 ExternMod(AstExternMod),
86 Record(Box<AstRecord>),
87}