Skip to content

Commit 633c583

Browse files
Reducing common structs types or #38 (#147)
Signed-off-by: Dawid Nowak <[email protected]> Co-authored-by: Shane Utt <[email protected]>
1 parent e4ba1ab commit 633c583

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+2745
-8127
lines changed

Cargo.lock

Lines changed: 377 additions & 66 deletions
Large diffs are not rendered by default.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[workspace]
2-
members = ["gateway-api", "gateway-api/examples", "xtask"]
2+
members = ["gateway-api", "gateway-api/examples", "xtask", "type-reducer"]
33
resolver = "2"
44

55
[workspace.package]

gateway-api/CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Changelog
2+
3+
## Next
4+
5+
>[!IMPORTANT]
6+
Breaking change
7+
8+
### Changed
9+
The structure of APIs has changed to promote the re-use of types in the generated code. The APIs are still generated with Kopium in the first step, but there is a second stage where additional task is executed to reduce and rename the Kopium-generated types.
10+
While with this approach we can significantly reduce the surface of exposed APIs, it is also a breaking change.
11+
See [issue](https://github.com/kube-rs/gateway-api-rs/issues/38) for more context.
12+
13+
## 0.16.0
14+
15+
### Changed
16+
Initial release. All types are generated with Kopium.

gateway-api/Cargo.toml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,13 @@ uuid.workspace = true
3838
features = ["k8s-openapi/v1_32"]
3939

4040
[features]
41-
default = []
41+
default = ["standard", "experimental"]
42+
standard = []
4243
experimental = []
44+
45+
46+
[lints.clippy]
47+
derivable_impls = "allow"
48+
doc_lazy_continuation = "allow"
49+
tabs_in_doc_comments = "allow"
50+
empty_line_after_doc_comments = "allow"
Lines changed: 351 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,351 @@
1+
// WARNING: generated file - manual changes will be overriden
2+
3+
#[allow(unused_imports)]
4+
mod prelude {
5+
pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition;
6+
pub use kube::CustomResource;
7+
pub use schemars::JsonSchema;
8+
pub use serde::{Deserialize, Serialize};
9+
pub use std::collections::BTreeMap;
10+
}
11+
use self::prelude::*;
12+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, PartialEq)]
13+
pub enum GRPCFilterType {
14+
ResponseHeaderModifier,
15+
RequestHeaderModifier,
16+
RequestMirror,
17+
ExtensionRef,
18+
}
19+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, PartialEq)]
20+
pub enum HTTPFilterType {
21+
RequestHeaderModifier,
22+
ResponseHeaderModifier,
23+
RequestMirror,
24+
RequestRedirect,
25+
#[serde(rename = "URLRewrite")]
26+
UrlRewrite,
27+
ExtensionRef,
28+
}
29+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, PartialEq)]
30+
pub enum HeaderMatchType {
31+
Exact,
32+
RegularExpression,
33+
}
34+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, PartialEq)]
35+
pub enum PersistenceCookieConfigLifetime {
36+
Permanent,
37+
Session,
38+
}
39+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, PartialEq)]
40+
pub enum RedirectStatusCode {
41+
#[serde(rename = "301")]
42+
r#_301,
43+
#[serde(rename = "302")]
44+
r#_302,
45+
}
46+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, PartialEq)]
47+
pub enum RequestOperationType {
48+
ReplaceFullPath,
49+
ReplacePrefixMatch,
50+
}
51+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, PartialEq)]
52+
pub enum RequestRedirectScheme {
53+
#[serde(rename = "http")]
54+
Http,
55+
#[serde(rename = "https")]
56+
Https,
57+
}
58+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, PartialEq)]
59+
pub enum SessionPersistenceType {
60+
Cookie,
61+
Header,
62+
}
63+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
64+
pub struct BackendReference {
65+
#[serde(default, skip_serializing_if = "Option::is_none")]
66+
pub group: Option<String>,
67+
#[serde(default, skip_serializing_if = "Option::is_none")]
68+
pub kind: Option<String>,
69+
pub name: String,
70+
#[serde(default, skip_serializing_if = "Option::is_none")]
71+
pub namespace: Option<String>,
72+
#[serde(default, skip_serializing_if = "Option::is_none")]
73+
pub port: Option<i32>,
74+
#[serde(default, skip_serializing_if = "Option::is_none")]
75+
pub weight: Option<i32>,
76+
}
77+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
78+
pub struct BackendTlsClientCertificateReference {
79+
#[serde(default, skip_serializing_if = "Option::is_none")]
80+
pub group: Option<String>,
81+
#[serde(default, skip_serializing_if = "Option::is_none")]
82+
pub kind: Option<String>,
83+
pub name: String,
84+
#[serde(default, skip_serializing_if = "Option::is_none")]
85+
pub namespace: Option<String>,
86+
}
87+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
88+
pub struct GatewayAddress {
89+
#[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
90+
pub r#type: Option<String>,
91+
pub value: String,
92+
}
93+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
94+
pub struct GatewayInfrastructureParametersReference {
95+
pub group: String,
96+
pub kind: String,
97+
pub name: String,
98+
}
99+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
100+
pub struct HTTPHeader {
101+
pub name: String,
102+
pub value: String,
103+
}
104+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
105+
pub struct Kind {
106+
#[serde(default, skip_serializing_if = "Option::is_none")]
107+
pub group: Option<String>,
108+
pub kind: String,
109+
}
110+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
111+
pub struct ParametersReference {
112+
pub group: String,
113+
pub kind: String,
114+
pub name: String,
115+
#[serde(default, skip_serializing_if = "Option::is_none")]
116+
pub namespace: Option<String>,
117+
}
118+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
119+
pub struct ParentReference {
120+
#[serde(default, skip_serializing_if = "Option::is_none")]
121+
pub group: Option<String>,
122+
#[serde(default, skip_serializing_if = "Option::is_none")]
123+
pub kind: Option<String>,
124+
pub name: String,
125+
#[serde(default, skip_serializing_if = "Option::is_none")]
126+
pub namespace: Option<String>,
127+
#[serde(default, skip_serializing_if = "Option::is_none")]
128+
pub port: Option<i32>,
129+
#[serde(
130+
default,
131+
skip_serializing_if = "Option::is_none",
132+
rename = "sectionName"
133+
)]
134+
pub section_name: Option<String>,
135+
}
136+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
137+
pub struct RequestMirrorFraction {
138+
#[serde(default, skip_serializing_if = "Option::is_none")]
139+
pub denominator: Option<i32>,
140+
pub numerator: i32,
141+
}
142+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
143+
pub struct RequestMirrorReference {
144+
#[serde(default, skip_serializing_if = "Option::is_none")]
145+
pub group: Option<String>,
146+
#[serde(default, skip_serializing_if = "Option::is_none")]
147+
pub kind: Option<String>,
148+
pub name: String,
149+
#[serde(default, skip_serializing_if = "Option::is_none")]
150+
pub namespace: Option<String>,
151+
#[serde(default, skip_serializing_if = "Option::is_none")]
152+
pub port: Option<i32>,
153+
}
154+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
155+
pub struct CommonRouteRule {
156+
#[serde(
157+
default,
158+
skip_serializing_if = "Option::is_none",
159+
rename = "backendRefs"
160+
)]
161+
pub backend_refs: Option<Vec<BackendReference>>,
162+
#[serde(default, skip_serializing_if = "Option::is_none")]
163+
pub name: Option<String>,
164+
}
165+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
166+
pub struct HeaderMatch {
167+
pub name: String,
168+
#[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
169+
pub r#type: Option<HeaderMatchType>,
170+
pub value: String,
171+
}
172+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
173+
pub struct HeaderModifier {
174+
#[serde(default, skip_serializing_if = "Option::is_none")]
175+
pub add: Option<Vec<HTTPHeader>>,
176+
#[serde(default, skip_serializing_if = "Option::is_none")]
177+
pub remove: Option<Vec<String>>,
178+
#[serde(default, skip_serializing_if = "Option::is_none")]
179+
pub set: Option<Vec<HTTPHeader>>,
180+
}
181+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
182+
pub struct ParentRouteStatus {
183+
#[serde(default, skip_serializing_if = "Option::is_none")]
184+
pub conditions: Option<Vec<Condition>>,
185+
#[serde(rename = "controllerName")]
186+
pub controller_name: String,
187+
#[serde(rename = "parentRef")]
188+
pub parent_ref: ParentReference,
189+
}
190+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
191+
pub struct RequestMirror {
192+
#[serde(rename = "backendRef")]
193+
pub backend_ref: RequestMirrorReference,
194+
#[serde(default, skip_serializing_if = "Option::is_none")]
195+
pub fraction: Option<RequestMirrorFraction>,
196+
#[serde(default, skip_serializing_if = "Option::is_none")]
197+
pub percent: Option<i32>,
198+
}
199+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
200+
pub struct RequestRedirectPath {
201+
#[serde(
202+
default,
203+
skip_serializing_if = "Option::is_none",
204+
rename = "replaceFullPath"
205+
)]
206+
pub replace_full_path: Option<String>,
207+
#[serde(
208+
default,
209+
skip_serializing_if = "Option::is_none",
210+
rename = "replacePrefixMatch"
211+
)]
212+
pub replace_prefix_match: Option<String>,
213+
#[serde(rename = "type")]
214+
pub r#type: RequestOperationType,
215+
}
216+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
217+
pub struct SessionPersistenceCookieConfig {
218+
#[serde(
219+
default,
220+
skip_serializing_if = "Option::is_none",
221+
rename = "lifetimeType"
222+
)]
223+
pub lifetime_type: Option<PersistenceCookieConfigLifetime>,
224+
}
225+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
226+
pub struct GRPCRouteFilter {
227+
#[serde(
228+
default,
229+
skip_serializing_if = "Option::is_none",
230+
rename = "extensionRef"
231+
)]
232+
pub extension_ref: Option<GatewayInfrastructureParametersReference>,
233+
#[serde(
234+
default,
235+
skip_serializing_if = "Option::is_none",
236+
rename = "requestHeaderModifier"
237+
)]
238+
pub request_header_modifier: Option<HeaderModifier>,
239+
#[serde(
240+
default,
241+
skip_serializing_if = "Option::is_none",
242+
rename = "requestMirror"
243+
)]
244+
pub request_mirror: Option<RequestMirror>,
245+
#[serde(
246+
default,
247+
skip_serializing_if = "Option::is_none",
248+
rename = "responseHeaderModifier"
249+
)]
250+
pub response_header_modifier: Option<HeaderModifier>,
251+
#[serde(rename = "type")]
252+
pub r#type: GRPCFilterType,
253+
}
254+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
255+
pub struct RequestRedirect {
256+
#[serde(default, skip_serializing_if = "Option::is_none")]
257+
pub hostname: Option<String>,
258+
#[serde(default, skip_serializing_if = "Option::is_none")]
259+
pub path: Option<RequestRedirectPath>,
260+
#[serde(default, skip_serializing_if = "Option::is_none")]
261+
pub port: Option<i32>,
262+
#[serde(default, skip_serializing_if = "Option::is_none")]
263+
pub scheme: Option<RequestRedirectScheme>,
264+
#[serde(
265+
default,
266+
skip_serializing_if = "Option::is_none",
267+
rename = "statusCode"
268+
)]
269+
pub status_code: Option<i64>,
270+
}
271+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
272+
pub struct HTTPRouteUrlRewrite {
273+
#[serde(default, skip_serializing_if = "Option::is_none")]
274+
pub hostname: Option<String>,
275+
#[serde(default, skip_serializing_if = "Option::is_none")]
276+
pub path: Option<RequestRedirectPath>,
277+
}
278+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
279+
pub struct RouteStatus {
280+
pub parents: Vec<ParentRouteStatus>,
281+
}
282+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
283+
pub struct SessionPersistence {
284+
#[serde(
285+
default,
286+
skip_serializing_if = "Option::is_none",
287+
rename = "absoluteTimeout"
288+
)]
289+
pub absolute_timeout: Option<String>,
290+
#[serde(
291+
default,
292+
skip_serializing_if = "Option::is_none",
293+
rename = "cookieConfig"
294+
)]
295+
pub cookie_config: Option<SessionPersistenceCookieConfig>,
296+
#[serde(
297+
default,
298+
skip_serializing_if = "Option::is_none",
299+
rename = "idleTimeout"
300+
)]
301+
pub idle_timeout: Option<String>,
302+
#[serde(
303+
default,
304+
skip_serializing_if = "Option::is_none",
305+
rename = "sessionName"
306+
)]
307+
pub session_name: Option<String>,
308+
#[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
309+
pub r#type: Option<SessionPersistenceType>,
310+
}
311+
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default, PartialEq)]
312+
pub struct HTTPRouteBackendFilters {
313+
#[serde(
314+
default,
315+
skip_serializing_if = "Option::is_none",
316+
rename = "extensionRef"
317+
)]
318+
pub extension_ref: Option<GatewayInfrastructureParametersReference>,
319+
#[serde(
320+
default,
321+
skip_serializing_if = "Option::is_none",
322+
rename = "requestHeaderModifier"
323+
)]
324+
pub request_header_modifier: Option<HeaderModifier>,
325+
#[serde(
326+
default,
327+
skip_serializing_if = "Option::is_none",
328+
rename = "requestMirror"
329+
)]
330+
pub request_mirror: Option<RequestMirror>,
331+
#[serde(
332+
default,
333+
skip_serializing_if = "Option::is_none",
334+
rename = "requestRedirect"
335+
)]
336+
pub request_redirect: Option<RequestRedirect>,
337+
#[serde(
338+
default,
339+
skip_serializing_if = "Option::is_none",
340+
rename = "responseHeaderModifier"
341+
)]
342+
pub response_header_modifier: Option<HeaderModifier>,
343+
#[serde(rename = "type")]
344+
pub r#type: HTTPFilterType,
345+
#[serde(
346+
default,
347+
skip_serializing_if = "Option::is_none",
348+
rename = "urlRewrite"
349+
)]
350+
pub url_rewrite: Option<HTTPRouteUrlRewrite>,
351+
}

0 commit comments

Comments
 (0)