1111//! - [`RecordCodegen`] - Codegen settings for record types
1212//! - [`FieldCodegen`] - Codegen settings for individual record fields
1313
14- use eure_document :: parse :: { ParseContext , ParseDocument , ParseError } ;
14+ use eure_macros :: ParseDocument ;
1515
1616// ============================================================================
1717// Root-Level Codegen Types
@@ -29,25 +29,14 @@ use eure_document::parse::{ParseContext, ParseDocument, ParseError};
2929/// type = "MyRootType"
3030/// }
3131/// ```
32- #[ derive( Debug , Clone , Default ) ]
32+ #[ derive( Debug , Clone , Default , ParseDocument ) ]
33+ #[ eure( crate = eure_document) ]
3334pub struct RootCodegen {
3435 /// The root type name for the generated code.
36+ #[ eure( rename = "type" , default ) ]
3537 pub type_name : Option < String > ,
3638}
3739
38- impl ParseDocument < ' _ > for RootCodegen {
39- type Error = ParseError ;
40- fn parse ( ctx : & ParseContext < ' _ > ) -> Result < Self , Self :: Error > {
41- let rec = ctx. parse_record ( ) ?;
42-
43- let type_name = rec. parse_field_optional :: < String > ( "type" ) ?;
44-
45- rec. deny_unknown_fields ( ) ?;
46-
47- Ok ( RootCodegen { type_name } )
48- }
49- }
50-
5140/// Default codegen settings applied to all types.
5241///
5342/// Corresponds to `$types.codegen-defaults` in the schema.
@@ -63,41 +52,23 @@ impl ParseDocument<'_> for RootCodegen {
6352/// document-node-id-field = "doc_node"
6453/// }
6554/// ```
66- #[ derive( Debug , Clone , Default ) ]
55+ #[ derive( Debug , Clone , Default , ParseDocument ) ]
56+ #[ eure( crate = eure_document, rename_all = "kebab-case" ) ]
6757pub struct CodegenDefaults {
6858 /// Default derive macros for all generated types.
59+ #[ eure( default ) ]
6960 pub derive : Option < Vec < String > > ,
7061 /// Prefix for extension type field names (e.g., "ext_" -> ext_types).
62+ #[ eure( default ) ]
7163 pub ext_types_field_prefix : Option < String > ,
7264 /// Prefix for extension type names (e.g., "Ext" -> ExtTypes).
65+ #[ eure( default ) ]
7366 pub ext_types_type_prefix : Option < String > ,
7467 /// Field name for storing document node ID in generated types.
68+ #[ eure( default ) ]
7569 pub document_node_id_field : Option < String > ,
7670}
7771
78- impl ParseDocument < ' _ > for CodegenDefaults {
79- type Error = ParseError ;
80- fn parse ( ctx : & ParseContext < ' _ > ) -> Result < Self , Self :: Error > {
81- let rec = ctx. parse_record ( ) ?;
82-
83- let derive = rec. parse_field_optional :: < Vec < String > > ( "derive" ) ?;
84- let ext_types_field_prefix =
85- rec. parse_field_optional :: < String > ( "ext-types-field-prefix" ) ?;
86- let ext_types_type_prefix = rec. parse_field_optional :: < String > ( "ext-types-type-prefix" ) ?;
87- let document_node_id_field =
88- rec. parse_field_optional :: < String > ( "document-node-id-field" ) ?;
89-
90- rec. deny_unknown_fields ( ) ?;
91-
92- Ok ( CodegenDefaults {
93- derive,
94- ext_types_field_prefix,
95- ext_types_type_prefix,
96- document_node_id_field,
97- } )
98- }
99- }
100-
10172// ============================================================================
10273// Type-Level Codegen Types
10374// ============================================================================
@@ -122,42 +93,23 @@ impl ParseDocument<'_> for CodegenDefaults {
12293/// variants.b = `integer`
12394/// }
12495/// ```
125- #[ derive( Debug , Clone , Default ) ]
96+ #[ derive( Debug , Clone , Default , ParseDocument ) ]
97+ #[ eure( crate = eure_document, rename_all = "kebab-case" ) ]
12698pub struct UnionCodegen {
12799 /// Override the generated type name (from base-codegen).
100+ #[ eure( rename = "type" , default ) ]
128101 pub type_name : Option < String > ,
129102 /// Override the list of derive macros (from base-codegen).
103+ #[ eure( default ) ]
130104 pub derive : Option < Vec < String > > ,
131105 /// Generate separate types for each variant instead of struct-like variants.
106+ #[ eure( default ) ]
132107 pub variant_types : Option < bool > ,
133108 /// Suffix for variant type names (e.g., "Type" -> TextType, IntegerType).
109+ #[ eure( default ) ]
134110 pub variant_types_suffix : Option < String > ,
135111}
136112
137- impl ParseDocument < ' _ > for UnionCodegen {
138- type Error = ParseError ;
139- fn parse ( ctx : & ParseContext < ' _ > ) -> Result < Self , Self :: Error > {
140- let rec = ctx. parse_record ( ) ?;
141-
142- // Parse base-codegen fields (flattened)
143- let type_name = rec. parse_field_optional :: < String > ( "type" ) ?;
144- let derive = rec. parse_field_optional :: < Vec < String > > ( "derive" ) ?;
145-
146- // Parse union-specific fields
147- let variant_types = rec. parse_field_optional :: < bool > ( "variant-types" ) ?;
148- let variant_types_suffix = rec. parse_field_optional :: < String > ( "variant-types-suffix" ) ?;
149-
150- rec. deny_unknown_fields ( ) ?;
151-
152- Ok ( UnionCodegen {
153- type_name,
154- derive,
155- variant_types,
156- variant_types_suffix,
157- } )
158- }
159- }
160-
161113/// Codegen settings for record types.
162114///
163115/// Corresponds to `$types.record-codegen` in the schema.
@@ -179,29 +131,17 @@ impl ParseDocument<'_> for UnionCodegen {
179131/// age = `integer`
180132/// }
181133/// ```
182- #[ derive( Debug , Clone , Default ) ]
134+ #[ derive( Debug , Clone , Default , ParseDocument ) ]
135+ #[ eure( crate = eure_document) ]
183136pub struct RecordCodegen {
184137 /// Override the generated type name (from base-codegen).
138+ #[ eure( rename = "type" , default ) ]
185139 pub type_name : Option < String > ,
186140 /// Override the list of derive macros (from base-codegen).
141+ #[ eure( default ) ]
187142 pub derive : Option < Vec < String > > ,
188143}
189144
190- impl ParseDocument < ' _ > for RecordCodegen {
191- type Error = ParseError ;
192- fn parse ( ctx : & ParseContext < ' _ > ) -> Result < Self , Self :: Error > {
193- let rec = ctx. parse_record ( ) ?;
194-
195- // Parse base-codegen fields (flattened)
196- let type_name = rec. parse_field_optional :: < String > ( "type" ) ?;
197- let derive = rec. parse_field_optional :: < Vec < String > > ( "derive" ) ?;
198-
199- rec. deny_unknown_fields ( ) ?;
200-
201- Ok ( RecordCodegen { type_name, derive } )
202- }
203- }
204-
205145/// Codegen settings for individual record fields.
206146///
207147/// Corresponds to `$types.field-codegen` in the schema.
@@ -215,25 +155,14 @@ impl ParseDocument<'_> for RecordCodegen {
215155/// user-name.$codegen.name = "username" // Rename to `username` in Rust
216156/// }
217157/// ```
218- #[ derive( Debug , Clone , Default ) ]
158+ #[ derive( Debug , Clone , Default , ParseDocument ) ]
159+ #[ eure( crate = eure_document) ]
219160pub struct FieldCodegen {
220161 /// Override the field name in generated Rust code.
162+ #[ eure( default ) ]
221163 pub name : Option < String > ,
222164}
223165
224- impl ParseDocument < ' _ > for FieldCodegen {
225- type Error = ParseError ;
226- fn parse ( ctx : & ParseContext < ' _ > ) -> Result < Self , Self :: Error > {
227- let rec = ctx. parse_record ( ) ?;
228-
229- let name = rec. parse_field_optional :: < String > ( "name" ) ?;
230-
231- rec. deny_unknown_fields ( ) ?;
232-
233- Ok ( FieldCodegen { name } )
234- }
235- }
236-
237166#[ cfg( test) ]
238167mod tests {
239168 use super :: * ;
0 commit comments