fraiseql_cli/schema/intermediate/
mod.rs1pub mod advanced_types;
7pub mod analytics;
8pub mod fragments;
9pub mod operations;
10pub mod subscriptions;
11pub mod types;
12
13pub use advanced_types::{
14 IntermediateInputField, IntermediateInputObject, IntermediateInterface, IntermediateUnion,
15};
16pub use analytics::{
17 IntermediateAggregateQuery, IntermediateDimensionPath, IntermediateDimensions,
18 IntermediateFactTable, IntermediateFilter, IntermediateMeasure,
19};
20pub use fragments::{
21 IntermediateAppliedDirective, IntermediateDirective, IntermediateFragment,
22 IntermediateFragmentField, IntermediateFragmentFieldDef,
23};
24use fraiseql_core::schema::{
25 DebugConfig, McpConfig, NamingConvention, RestConfig, SessionVariablesConfig,
26 SubscriptionsConfig, ValidationConfig,
27};
28pub use operations::{
29 IntermediateArgument, IntermediateAutoParams, IntermediateMutation, IntermediateQuery,
30 IntermediateQueryDefaults,
31};
32use serde::{Deserialize, Serialize};
33pub use subscriptions::{
34 IntermediateFilterCondition, IntermediateObserver, IntermediateObserverAction,
35 IntermediateRetryConfig, IntermediateSubscription, IntermediateSubscriptionFilter,
36};
37pub use types::{
38 IntermediateDeprecation, IntermediateEnum, IntermediateEnumValue, IntermediateField,
39 IntermediateScalar, IntermediateType,
40};
41
42#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
44pub struct IntermediateSchema {
45 #[serde(default = "default_version")]
47 pub version: String,
48
49 #[serde(default)]
51 pub types: Vec<IntermediateType>,
52
53 #[serde(default)]
55 pub enums: Vec<IntermediateEnum>,
56
57 #[serde(default)]
59 pub input_types: Vec<IntermediateInputObject>,
60
61 #[serde(default)]
63 pub interfaces: Vec<IntermediateInterface>,
64
65 #[serde(default)]
67 pub unions: Vec<IntermediateUnion>,
68
69 #[serde(default)]
71 pub queries: Vec<IntermediateQuery>,
72
73 #[serde(default)]
75 pub mutations: Vec<IntermediateMutation>,
76
77 #[serde(default)]
79 pub subscriptions: Vec<IntermediateSubscription>,
80
81 #[serde(default, skip_serializing_if = "Option::is_none")]
83 pub fragments: Option<Vec<IntermediateFragment>>,
84
85 #[serde(default, skip_serializing_if = "Option::is_none")]
87 pub directives: Option<Vec<IntermediateDirective>>,
88
89 #[serde(default, skip_serializing_if = "Option::is_none")]
91 pub fact_tables: Option<Vec<IntermediateFactTable>>,
92
93 #[serde(default, skip_serializing_if = "Option::is_none")]
95 pub aggregate_queries: Option<Vec<IntermediateAggregateQuery>>,
96
97 #[serde(default, skip_serializing_if = "Option::is_none")]
99 pub observers: Option<Vec<IntermediateObserver>>,
100
101 #[serde(default, skip_serializing_if = "Option::is_none")]
107 pub custom_scalars: Option<Vec<IntermediateScalar>>,
108
109 #[serde(default, skip_serializing_if = "Option::is_none")]
113 pub security: Option<serde_json::Value>,
114
115 #[serde(default, skip_serializing_if = "Option::is_none")]
120 pub observers_config: Option<serde_json::Value>,
121
122 #[serde(default, skip_serializing_if = "Option::is_none")]
127 pub federation_config: Option<serde_json::Value>,
128
129 #[serde(default, skip_serializing_if = "Option::is_none")]
134 pub subscriptions_config: Option<SubscriptionsConfig>,
135
136 #[serde(default, skip_serializing_if = "Option::is_none")]
141 pub validation_config: Option<ValidationConfig>,
142
143 #[serde(default, skip_serializing_if = "Option::is_none")]
148 pub debug_config: Option<DebugConfig>,
149
150 #[serde(default, skip_serializing_if = "Option::is_none")]
155 pub mcp_config: Option<McpConfig>,
156
157 #[serde(default, skip_serializing_if = "Option::is_none")]
162 pub rest_config: Option<RestConfig>,
163
164 #[serde(default, skip_serializing_if = "Option::is_none")]
169 pub query_defaults: Option<IntermediateQueryDefaults>,
170
171 #[serde(default)]
175 pub naming_convention: NamingConvention,
176
177 #[serde(default, skip_serializing_if = "Option::is_none")]
185 pub session_variables: Option<SessionVariablesConfig>,
186
187 #[serde(default, skip_serializing_if = "Option::is_none")]
192 pub hierarchies_config: Option<fraiseql_core::schema::HierarchiesConfig>,
193}
194
195fn default_version() -> String {
196 "2.0.0".to_string()
197}
198
199#[cfg(test)]
200mod tests;