Skip to main content

devops_armory/cloud/gcp/gke/gateway/
models.rs

1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Serialize, Deserialize)]
6pub struct Gateway {
7    pub kind: String,
8    pub apiVersion: String,
9    pub metadata: Metadata,
10    pub spec: GatewaySpec,
11}
12
13#[derive(Debug, Serialize, Deserialize)]
14pub struct Metadata {
15    pub name: String,
16    pub namespace: String,
17    pub resourceVersion: Option<String>
18}
19
20#[derive(Debug, Serialize, Deserialize)]
21pub struct GatewaySpec {
22    pub gatewayClassName: String,
23    pub listeners: Vec<Listener>,
24    pub addresses: Vec<Address>,
25}
26
27#[derive(Debug, Serialize, Deserialize)]
28pub struct Listener {
29    pub name: String,
30    pub protocol: String,
31    pub port: u16,
32    pub allowedRoutes: AllowedRoutes,
33    pub tls: Option<Tls>,
34}
35
36#[derive(Debug, Serialize, Deserialize)]
37pub struct AllowedRoutes {
38    pub kinds: Vec<RouteKind>,
39    pub namespaces: NamespaceSelector,
40}
41
42#[derive(Debug, Serialize, Deserialize)]
43pub struct RouteKind {
44    pub kind: String,
45}
46
47#[derive(Debug, Serialize, Deserialize)]
48pub struct NamespaceSelector {
49    pub from: From,
50    pub selector: Option<Selector>
51}
52
53#[derive(Debug, Serialize, Deserialize)]
54pub struct Tls {
55    pub mode: String,
56    pub options: TlsOptions,
57}
58
59#[derive(Debug, Serialize, Deserialize)]
60pub struct TlsOptions {
61    #[serde(rename = "networking.gke.io/pre-shared-certs")]
62    pub pre_shared_certs: String,
63}
64
65#[derive(Debug, Serialize, Deserialize)]
66pub struct Address {
67    pub r#type: String, 
68    pub value: String,
69}
70
71// Get resource version models
72
73#[derive(Debug, Serialize, Deserialize, Default)]
74pub struct GatewayGet {
75    pub metadata: GatewayMetadataGet,
76}
77
78#[derive(Debug, Serialize, Deserialize, Default)]
79pub struct GatewayMetadataGet {
80    pub resourceVersion: String
81}
82
83#[derive(Debug, Serialize, Deserialize)]
84#[serde(rename_all = "PascalCase")]
85pub enum From {    
86    All,    
87    Selector,
88}
89
90#[derive(Debug, Serialize, Deserialize)]
91pub struct Selector {    
92    #[serde(rename = "matchLabels")]    
93    pub match_labels: HashMap<String, String>,
94}