apisix_admin_client/models/
admin_service_requests.rs1use 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 pub fn with_name(mut self, name: String) -> Self {
31 self.name = Some(name);
32 self
33 }
34
35 pub fn with_desc(mut self, desc: String) -> Self {
37 self.desc = Some(desc);
38 self
39 }
40
41 pub fn with_enable_websocket(mut self, enable_websocket: bool) -> Self {
43 self.enable_websocket = Some(enable_websocket);
44 self
45 }
46
47 pub fn with_upstream(mut self, upstream: UpstreamRequest) -> Self {
49 self.upstream = Some(upstream);
50 self
51 }
52
53 pub fn with_upstream_id(mut self, upstream_id: String) -> Self {
55 self.upstream_id = Some(upstream_id);
56 self
57 }
58
59 pub fn with_plugins(mut self, plugins: Plugins) -> Self {
61 self.plugins = plugins;
62 self
63 }
64
65 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}