22// Licensed under the MIT license.
33
44using System . Collections . Generic ;
5+ using System . Linq ;
56using Microsoft . OpenApi . Any ;
67using Microsoft . OpenApi . Interfaces ;
78using Microsoft . OpenApi . Writers ;
@@ -76,7 +77,7 @@ public void SerializeAsV3(IOpenApiWriter writer)
7677 writer . WriteOptionalObject ( OpenApiConstants . Example , Example , ( w , e ) => w . WriteAny ( e ) ) ;
7778
7879 // examples
79- writer . WriteOptionalMap ( OpenApiConstants . Examples , Examples , ( w , e ) => e . SerializeAsV3 ( w ) ) ;
80+ SerializeExamples ( writer , Examples ) ;
8081
8182 // encoding
8283 writer . WriteOptionalMap ( OpenApiConstants . Encoding , Encoding , ( w , e ) => e . SerializeAsV3 ( w ) ) ;
@@ -94,5 +95,33 @@ public void SerializeAsV2(IOpenApiWriter writer)
9495 {
9596 // Media type does not exist in V2.
9697 }
98+
99+ private static void SerializeExamples ( IOpenApiWriter writer , IDictionary < string , OpenApiExample > examples )
100+ {
101+ /* Special case for writing out empty arrays as valid response examples
102+ * Check if there is any example with an empty array as its value and set the flag `hasEmptyArray` to true
103+ * */
104+ var hasEmptyArray = examples . Values . Any ( static example =>
105+ example . Value is OpenApiArray arr && arr . Count == 0
106+ ) ;
107+
108+ if ( hasEmptyArray )
109+ {
110+ writer . WritePropertyName ( OpenApiConstants . Examples ) ;
111+ writer . WriteStartObject ( ) ;
112+ foreach ( var kvp in examples . Where ( static kvp => kvp . Value . Value is OpenApiArray arr && arr . Count == 0 ) )
113+ {
114+ writer . WritePropertyName ( kvp . Key ) ;
115+ writer . WriteStartObject ( ) ;
116+ writer . WriteRequiredObject ( OpenApiConstants . Value , kvp . Value . Value , ( w , v ) => w . WriteAny ( v ) ) ;
117+ writer . WriteEndObject ( ) ;
118+ }
119+ writer . WriteEndObject ( ) ;
120+ }
121+ else
122+ {
123+ writer . WriteOptionalMap ( OpenApiConstants . Examples , examples , ( w , e ) => e . SerializeAsV3 ( w ) ) ;
124+ }
125+ }
97126 }
98127}
0 commit comments