Skip to main content

eure_schema/
codegen.rs

1//! Schema-model code generation metadata types.
2
3use eure_macros::{FromEure, IntoEure};
4
5/// Root-level codegen settings (`$codegen`).
6#[derive(Debug, Clone, Default, PartialEq, Eq, FromEure, IntoEure)]
7#[eure(crate = eure_document)]
8pub struct RootCodegen {
9    /// Override root generated type name.
10    #[eure(rename = "type", default)]
11    pub type_name: Option<String>,
12}
13
14/// Root-level default codegen settings (`$codegen-defaults`).
15#[derive(Debug, Clone, Default, PartialEq, Eq, FromEure, IntoEure)]
16#[eure(crate = eure_document, rename_all = "kebab-case")]
17pub struct CodegenDefaults {
18    /// Default derives for emitted Rust types.
19    #[eure(default)]
20    pub derive: Option<Vec<String>>,
21    /// Default derives for generated inline companion types.
22    #[eure(default)]
23    pub inline_derive: Option<Vec<String>>,
24    /// Default derives for generated `variant_types` companion types.
25    #[eure(default)]
26    pub variant_type_derive: Option<Vec<String>>,
27    /// Prefix for generated extension field names.
28    #[eure(default)]
29    pub ext_types_field_prefix: Option<String>,
30    /// Prefix for generated extension type names.
31    #[eure(default)]
32    pub ext_types_type_prefix: Option<String>,
33    /// Optional document node id field name.
34    #[eure(default)]
35    pub document_node_id_field: Option<String>,
36}
37
38/// Record type-level codegen metadata (`$codegen` on record schema nodes).
39#[derive(Debug, Clone, Default, PartialEq, Eq, FromEure, IntoEure)]
40#[eure(crate = eure_document, rename_all = "kebab-case")]
41pub struct RecordCodegen {
42    /// Override generated Rust type name.
43    #[eure(rename = "type", default)]
44    pub type_name: Option<String>,
45    /// Override derives for this type.
46    #[eure(default)]
47    pub derive: Option<Vec<String>>,
48    /// Override derives for generated inline companion types.
49    #[eure(default)]
50    pub inline_derive: Option<Vec<String>>,
51}
52
53/// Union type-level codegen metadata (`$codegen` on union schema nodes).
54#[derive(Debug, Clone, Default, PartialEq, Eq, FromEure, IntoEure)]
55#[eure(crate = eure_document, rename_all = "kebab-case")]
56pub struct UnionCodegen {
57    /// Override generated Rust type name.
58    #[eure(rename = "type", default)]
59    pub type_name: Option<String>,
60    /// Override derives for this type.
61    #[eure(default)]
62    pub derive: Option<Vec<String>>,
63    /// Override derives for generated inline companion types.
64    #[eure(default)]
65    pub inline_derive: Option<Vec<String>>,
66    /// Generate dedicated types for variants.
67    #[eure(default)]
68    pub variant_types: Option<bool>,
69    /// Suffix for generated variant types.
70    #[eure(default)]
71    pub variant_types_suffix: Option<String>,
72    /// Override derives for generated `variant_types` companion types.
73    #[eure(default)]
74    pub variant_type_derive: Option<Vec<String>>,
75}
76
77/// Field-level codegen metadata (`$codegen` on record field entries).
78#[derive(Debug, Clone, Default, PartialEq, Eq, FromEure, IntoEure)]
79#[eure(crate = eure_document)]
80pub struct FieldCodegen {
81    /// Override generated Rust field name.
82    #[eure(default)]
83    pub name: Option<String>,
84}
85
86/// Type-level codegen metadata for schema nodes.
87#[derive(Debug, Clone, Default, PartialEq, Eq)]
88pub enum TypeCodegen {
89    #[default]
90    None,
91    Record(RecordCodegen),
92    Union(UnionCodegen),
93}