apisix_admin_client/models/
admin_service_requests.rs

1use serde::{Deserialize, Serialize};
2use crate::UpstreamRequest;
3use crate::models::{generate_identifier, Plugins};
4use crate::{Result};
5
6#[serde_with::skip_serializing_none]
7#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
8pub struct ServiceBuilder {
9    pub id: Option<String>,
10    pub name: Option<String>,
11    pub desc: Option<String>,
12    pub enable_websocket: Option<bool>,
13    pub upstream: Option<UpstreamRequest>,
14    pub upstream_id: Option<String>,
15    pub plugins: Plugins,
16    pub hosts: Option<Vec<String>>,
17}
18
19impl ServiceBuilder {
20    pub fn new() -> Self {
21        ServiceRequest::default().into()
22    }
23
24    pub fn with_id(mut self, id: String) -> Self {
25        self.id = Some(id);
26        self
27    }
28
29    /// Identifier for the Service
30    pub fn with_name(mut self, name: String) -> Self {
31        self.name = Some(name);
32        self
33    }
34
35    /// Description of usage scenarios
36    pub fn with_desc(mut self, desc: String) -> Self {
37        self.desc = Some(desc);
38        self
39    }
40
41    /// Enables a websocket. Set to false by default
42    pub fn with_enable_websocket(mut self, enable_websocket: bool) -> Self {
43        self.enable_websocket = Some(enable_websocket);
44        self
45    }
46
47    /// Configuration of the Upstream [@UpstreamRequest]
48    pub fn with_upstream(mut self, upstream: UpstreamRequest) -> Self {
49        self.upstream = Some(upstream);
50        self
51    }
52
53    /// Id of the Upstream
54    pub fn with_upstream_id(mut self, upstream_id: String) -> Self {
55        self.upstream_id = Some(upstream_id);
56        self
57    }
58
59    /// Plugins that are executed during the request/response cycle
60    pub fn with_plugins(mut self, plugins: Plugins) -> Self {
61        self.plugins = plugins;
62        self
63    }
64
65    /// Matches with any one of the multiple hosts specified in the form of a non-empty list
66    pub fn with_hosts(mut self, hosts: Vec<String>) -> Self {
67        self.hosts = Some(hosts);
68        self
69    }
70
71    pub fn build(self) -> Result<ServiceRequest> {
72        Ok(ServiceRequest {
73            id: self.id,
74            name: self.name,
75            desc: self.desc,
76            enable_websocket: self.enable_websocket,
77            upstream: self.upstream,
78            upstream_id: self.upstream_id,
79            plugins: self.plugins,
80            hosts: self.hosts,
81        })
82    }
83}
84
85#[serde_with::skip_serializing_none]
86#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
87pub struct ServiceRequest {
88    pub id: Option<String>,
89    pub name: Option<String>,
90    pub desc: Option<String>,
91    pub enable_websocket: Option<bool>,
92    pub upstream: Option<UpstreamRequest>,
93    pub upstream_id: Option<String>,
94    pub plugins: Plugins,
95    pub hosts: Option<Vec<String>>,
96}
97
98impl Default for ServiceRequest {
99    fn default() -> Self {
100        ServiceRequest {
101            id: Some(generate_identifier()),
102            name: None,
103            desc: None,
104            enable_websocket: None,
105            upstream: None,
106            upstream_id: None,
107            plugins: Plugins::default(),
108            hosts: None,
109        }
110    }
111}
112
113impl From<ServiceRequest> for ServiceBuilder {
114    fn from(service: ServiceRequest) -> Self {
115        ServiceBuilder {
116            id: service.id,
117            name: service.name,
118            desc: service.desc,
119            enable_websocket: service.enable_websocket,
120            upstream: service.upstream,
121            upstream_id: service.upstream_id,
122            plugins: service.plugins,
123            hosts: service.hosts,
124        }
125    }
126}