kynos_openapi/model/
server.rs1use serde::{Deserialize, Serialize};
4
5use crate::{Map, model::extensions::Extensions};
6
7#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
13pub struct Server {
14 pub url: String,
19
20 #[cfg(feature = "openapi32")]
24 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub name: Option<String>,
26
27 #[serde(default, skip_serializing_if = "Option::is_none")]
29 pub description: Option<String>,
30
31 #[serde(default, skip_serializing_if = "Map::is_empty")]
33 pub variables: Map<ServerVariable>,
34
35 #[serde(flatten)]
37 pub extensions: Extensions,
38}
39
40impl Server {
41 pub fn new(url: impl Into<String>) -> Self {
43 Self {
44 url: url.into(),
45 ..Self::default()
46 }
47 }
48
49 #[must_use]
51 pub fn with_description(mut self, description: impl Into<String>) -> Self {
52 self.description = Some(description.into());
53 self
54 }
55
56 #[must_use]
58 pub fn with_variable(mut self, name: impl Into<String>, variable: ServerVariable) -> Self {
59 self.variables.insert(name.into(), variable);
60 self
61 }
62}
63
64#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
66pub struct ServerVariable {
67 #[serde(rename = "enum", default, skip_serializing_if = "Option::is_none")]
72 pub enumeration: Option<Vec<String>>,
73
74 #[serde(rename = "default")]
78 pub default_value: String,
79
80 #[serde(default, skip_serializing_if = "Option::is_none")]
84 pub description: Option<String>,
85
86 #[serde(flatten)]
88 pub extensions: Extensions,
89}
90
91impl ServerVariable {
92 pub fn new(default_value: impl Into<String>) -> Self {
94 Self {
95 default_value: default_value.into(),
96 ..Self::default()
97 }
98 }
99
100 pub fn enumerated(
102 default_value: impl Into<String>,
103 values: impl IntoIterator<Item = impl Into<String>>,
104 ) -> Self {
105 Self {
106 enumeration: Some(values.into_iter().map(Into::into).collect()),
107 default_value: default_value.into(),
108 description: None,
109 extensions: Extensions::new(),
110 }
111 }
112}
113
114#[cfg(test)]
115mod tests;