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    /// Prefix for generated extension field names.
22    #[eure(default)]
23    pub ext_types_field_prefix: Option<String>,
24    /// Prefix for generated extension type names.
25    #[eure(default)]
26    pub ext_types_type_prefix: Option<String>,
27    /// Optional document node id field name.
28    #[eure(default)]
29    pub document_node_id_field: Option<String>,
30}
31
32/// Record type-level codegen metadata (`$codegen` on record schema nodes).
33#[derive(Debug, Clone, Default, PartialEq, Eq, FromEure, IntoEure)]
34#[eure(crate = eure_document)]
35pub struct RecordCodegen {
36    /// Override generated Rust type name.
37    #[eure(rename = "type", default)]
38    pub type_name: Option<String>,
39    /// Override derives for this type.
40    #[eure(default)]
41    pub derive: Option<Vec<String>>,
42}
43
44/// Union type-level codegen metadata (`$codegen` on union schema nodes).
45#[derive(Debug, Clone, Default, PartialEq, Eq, FromEure, IntoEure)]
46#[eure(crate = eure_document, rename_all = "kebab-case")]
47pub struct UnionCodegen {
48    /// Override generated Rust type name.
49    #[eure(rename = "type", default)]
50    pub type_name: Option<String>,
51    /// Override derives for this type.
52    #[eure(default)]
53    pub derive: Option<Vec<String>>,
54    /// Generate dedicated types for variants.
55    #[eure(default)]
56    pub variant_types: Option<bool>,
57    /// Suffix for generated variant types.
58    #[eure(default)]
59    pub variant_types_suffix: Option<String>,
60}
61
62/// Field-level codegen metadata (`$codegen` on record field entries).
63#[derive(Debug, Clone, Default, PartialEq, Eq, FromEure, IntoEure)]
64#[eure(crate = eure_document)]
65pub struct FieldCodegen {
66    /// Override generated Rust field name.
67    #[eure(default)]
68    pub name: Option<String>,
69}
70
71/// Type-level codegen metadata for schema nodes.
72#[derive(Debug, Clone, Default, PartialEq, Eq)]
73pub enum TypeCodegen {
74    #[default]
75    None,
76    Record(RecordCodegen),
77    Union(UnionCodegen),
78}