@@ -23,6 +23,15 @@ public class OpenApiTag : IOpenApiExtensible, IOpenApiTag, IOpenApiDescribedElem
2323 /// <inheritdoc/>
2424 public IDictionary < string , IOpenApiExtension > ? Extensions { get ; set ; }
2525
26+ /// <inheritdoc/>
27+ public string ? Summary { get ; set ; }
28+
29+ /// <inheritdoc/>
30+ public OpenApiTagReference ? Parent { get ; set ; }
31+
32+ /// <inheritdoc/>
33+ public string ? Kind { get ; set ; }
34+
2635 /// <summary>
2736 /// Parameterless constructor
2837 /// </summary>
@@ -38,15 +47,30 @@ internal OpenApiTag(IOpenApiTag tag)
3847 Description = tag . Description ?? Description ;
3948 ExternalDocs = tag . ExternalDocs != null ? new ( tag . ExternalDocs ) : null ;
4049 Extensions = tag . Extensions != null ? new Dictionary < string , IOpenApiExtension > ( tag . Extensions ) : null ;
50+ Summary = tag . Summary ?? Summary ;
51+ Parent = tag . Parent ?? Parent ;
52+ Kind = tag . Kind ?? Kind ;
4153 }
42-
54+
4355 /// <summary>
4456 /// Serialize <see cref="OpenApiTag"/> to Open Api v3.2
4557 /// </summary>
46- public virtual void SerializeAsV32 ( IOpenApiWriter writer )
58+ public virtual void SerializeAsV32 ( IOpenApiWriter writer )
4759 {
4860 SerializeInternal ( writer , OpenApiSpecVersion . OpenApi3_2 ,
4961 ( writer , element ) => element . SerializeAsV32 ( writer ) ) ;
62+
63+ if ( Summary != null )
64+ writer . WriteProperty ( "summary" , Summary ) ;
65+ if ( Parent != null )
66+ {
67+ writer . WritePropertyName ( "parent" ) ;
68+ Parent . SerializeAsV32 ( writer ) ;
69+ }
70+ if ( Kind != null )
71+ writer . WriteProperty ( "kind" , Kind ) ;
72+
73+ writer . WriteEndObject ( ) ;
5074 }
5175
5276 /// <summary>
@@ -56,22 +80,48 @@ public virtual void SerializeAsV31(IOpenApiWriter writer)
5680 {
5781 SerializeInternal ( writer , OpenApiSpecVersion . OpenApi3_1 ,
5882 ( writer , element ) => element . SerializeAsV31 ( writer ) ) ;
83+
84+ if ( Summary != null )
85+ writer . WriteProperty ( "x-oas-summary" , Summary ) ;
86+ if ( Parent != null )
87+ {
88+ writer . WritePropertyName ( "x-oas-parent" ) ;
89+ Parent . SerializeAsV31 ( writer ) ;
90+ }
91+ if ( Kind != null )
92+ writer . WriteProperty ( "x-oas-kind" , Kind ) ;
93+
94+
95+ writer . WriteEndObject ( ) ;
5996 }
6097
6198 /// <summary>
6299 /// Serialize <see cref="OpenApiTag"/> to Open Api v3.0
63100 /// </summary>
64- public virtual void SerializeAsV3 ( IOpenApiWriter writer )
101+ public virtual void SerializeAsV3 ( IOpenApiWriter writer )
65102 {
66103 SerializeInternal ( writer , OpenApiSpecVersion . OpenApi3_0 ,
67104 ( writer , element ) => element . SerializeAsV3 ( writer ) ) ;
105+
106+ if ( Summary != null )
107+ writer . WriteProperty ( "x-oas-summary" , Summary ) ;
108+ if ( Parent != null )
109+ {
110+ writer . WritePropertyName ( "x-oas-parent" ) ;
111+ Parent . SerializeAsV31 ( writer ) ;
112+ }
113+ if ( Kind != null )
114+ writer . WriteProperty ( "x-oas-kind" , Kind ) ;
115+
116+
117+ writer . WriteEndObject ( ) ;
68118 }
69119
70- internal void SerializeInternal ( IOpenApiWriter writer , OpenApiSpecVersion version ,
120+ internal void SerializeInternal ( IOpenApiWriter writer , OpenApiSpecVersion version ,
71121 Action < IOpenApiWriter , IOpenApiSerializable > callback )
72122 {
73123 writer . WriteStartObject ( ) ;
74-
124+
75125 // name
76126 writer . WriteProperty ( OpenApiConstants . Name , Name ) ;
77127
@@ -83,28 +133,15 @@ internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion versio
83133
84134 // extensions.
85135 writer . WriteExtensions ( Extensions , version ) ;
86-
87- writer . WriteEndObject ( ) ;
88136 }
89137
90138 /// <summary>
91139 /// Serialize <see cref="OpenApiTag"/> to Open Api v2.0
92140 /// </summary>
93141 public virtual void SerializeAsV2 ( IOpenApiWriter writer )
94142 {
95- writer . WriteStartObject ( ) ;
96-
97- // name
98- writer . WriteProperty ( OpenApiConstants . Name , Name ) ;
99-
100- // description
101- writer . WriteProperty ( OpenApiConstants . Description , Description ) ;
102-
103- // external docs
104- writer . WriteOptionalObject ( OpenApiConstants . ExternalDocs , ExternalDocs , ( w , e ) => e . SerializeAsV2 ( w ) ) ;
105-
106- // extensions
107- writer . WriteExtensions ( Extensions , OpenApiSpecVersion . OpenApi2_0 ) ;
143+ SerializeInternal ( writer , OpenApiSpecVersion . OpenApi2_0 ,
144+ ( writer , element ) => element . SerializeAsV3 ( writer ) ) ;
108145
109146 writer . WriteEndObject ( ) ;
110147 }
0 commit comments