salvo_oapi/openapi/
external_docs.rs1use serde::{Deserialize, Serialize};
5
6#[non_exhaustive]
8#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
9#[serde(rename_all = "camelCase")]
10pub struct ExternalDocs {
11 pub url: String,
13 pub description: Option<String>,
15}
16
17impl ExternalDocs {
18 pub fn new<S: AsRef<str>>(url: S) -> Self {
29 Self {
30 url: url.as_ref().to_string(),
31 ..Default::default()
32 }
33 }
34
35 pub fn url<I: Into<String>>(mut self, url: I) -> Self {
37 self.url = url.into();
38 self
39 }
40
41 pub fn description<S: Into<String>>(mut self, description: S) -> Self {
43 self.description = Some(description.into());
44 self
45 }
46}
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 #[test]
53 fn test_default_external_docs() {
54 let external_docs = ExternalDocs::default();
55 assert_eq!(external_docs.url, "");
56 assert_eq!(external_docs.description, None);
57 }
58
59 #[test]
60 fn test_build_external_docs() {
61 let external_docs = ExternalDocs::default();
62 let external_docs_with_url = external_docs
63 .url("https://pet-api.external.docs")
64 .description("description");
65
66 assert_eq!(external_docs_with_url.url, "https://pet-api.external.docs");
67 assert_eq!(
68 external_docs_with_url.description,
69 Some("description".to_string())
70 );
71 }
72}