1use serde::{Deserialize, Serialize};
5
6use super::{builder, extensions::Extensions, external_docs::ExternalDocs, set_value};
7
8builder! {
9 TagBuilder;
10
11 #[non_exhaustive]
17 #[derive(Serialize, Deserialize, Default, Clone, PartialEq, Eq)]
18 #[cfg_attr(feature = "debug", derive(Debug))]
19 #[serde(rename_all = "camelCase")]
20 pub struct Tag {
21 pub name: String,
23
24 #[serde(skip_serializing_if = "Option::is_none")]
26 pub summary: Option<String>,
27
28 #[serde(skip_serializing_if = "Option::is_none")]
30 pub description: Option<String>,
31
32 #[serde(skip_serializing_if = "Option::is_none")]
34 pub parent: Option<String>,
35
36 #[serde(skip_serializing_if = "Option::is_none")]
38 pub kind: Option<String>,
39
40 #[serde(skip_serializing_if = "Option::is_none")]
42 pub external_docs: Option<ExternalDocs>,
43
44 #[serde(skip_serializing_if = "Option::is_none", flatten)]
46 pub extensions: Option<Extensions>,
47 }
48}
49
50impl Tag {
51 pub fn new<S: AsRef<str>>(name: S) -> Self {
53 Self {
54 name: name.as_ref().to_string(),
55 ..Default::default()
56 }
57 }
58}
59
60impl TagBuilder {
61 pub fn name<I: Into<String>>(mut self, name: I) -> Self {
63 set_value!(self name name.into())
64 }
65
66 pub fn summary<S: Into<String>>(mut self, summary: Option<S>) -> Self {
68 set_value!(self summary summary.map(|summary| summary.into()))
69 }
70
71 pub fn description<S: Into<String>>(mut self, description: Option<S>) -> Self {
73 set_value!(self description description.map(|description| description.into()))
74 }
75
76 pub fn parent<S: Into<String>>(mut self, parent: Option<S>) -> Self {
78 set_value!(self parent parent.map(|parent| parent.into()))
79 }
80
81 pub fn kind<S: Into<String>>(mut self, kind: Option<S>) -> Self {
83 set_value!(self kind kind.map(|kind| kind.into()))
84 }
85
86 pub fn external_docs(mut self, external_docs: Option<ExternalDocs>) -> Self {
88 set_value!(self external_docs external_docs)
89 }
90
91 pub fn extensions(mut self, extensions: Option<Extensions>) -> Self {
93 set_value!(self extensions extensions)
94 }
95}