@@ -104,6 +104,21 @@ func WithContent(contentType string) Option {
104104 }
105105}
106106
107+ func WithFullContent (contentType string , contentValue * openapi3.MediaType ) Option {
108+ return func (v * APIVersion ) error {
109+ if ! IsPreviewSabilityLevel (contentType ) {
110+ return WithContent (contentType )(v )
111+ }
112+
113+ name , _ := GetPreviewVersionName (contentValue )
114+ if name != "" {
115+ return WithVersion (name )(v )
116+ }
117+
118+ return WithContent (contentType )(v )
119+ }
120+ }
121+
107122func DateFromVersion (version string ) (time.Time , error ) {
108123 if IsPreviewSabilityLevel (version ) {
109124 return time .Now (), nil
@@ -112,7 +127,7 @@ func DateFromVersion(version string) (time.Time, error) {
112127}
113128
114129func (v * APIVersion ) Equal (v2 * APIVersion ) bool {
115- return v .version == v2 .version
130+ return strings . EqualFold ( v .version , v2 .version )
116131}
117132
118133func (v * APIVersion ) GreaterThan (v2 * APIVersion ) bool {
@@ -155,9 +170,13 @@ func (v *APIVersion) IsPrivatePreview() bool {
155170 return strings .Contains (v .version , PrivatePreviewStabilityLevel )
156171}
157172
173+ func (v * APIVersion ) IsPublicPreview () bool {
174+ return v .IsPreview () && ! v .IsPrivatePreview ()
175+ }
176+
158177func IsPreviewSabilityLevel (value string ) bool {
159178 // we also need string match given private preview versions like "private-preview-<name>"
160- return strings .EqualFold (value , PreviewStabilityLevel ) || strings .Contains (value , PrivatePreviewStabilityLevel )
179+ return strings .EqualFold (value , PreviewStabilityLevel ) || strings .Contains (value , PreviewStabilityLevel )
161180}
162181
163182func IsStableSabilityLevel (value string ) bool {
@@ -211,7 +230,7 @@ func FindLatestContentVersionMatched(op *openapi3.Operation, requestedVersion *A
211230 }
212231
213232 for contentType , contentValue := range response .Value .Content {
214- contentVersion , err := New (WithContent (contentType ))
233+ contentVersion , err := New (WithFullContent (contentType , contentValue ))
215234 if err != nil {
216235 log .Printf ("Ignoring invalid content type: %q" , contentType )
217236 continue
@@ -221,9 +240,9 @@ func FindLatestContentVersionMatched(op *openapi3.Operation, requestedVersion *A
221240 return contentVersion
222241 }
223242
224- if contentVersion . ExactMatchOnly () || requestedVersion .ExactMatchOnly () {
243+ if requestedVersion .ExactMatchOnly () {
225244 // for private preview, we will need to match with "preview" and x-xgen-preview name extension
226- if requestedVersion . IsPrivatePreview () && PrivatePreviewContentMatch ( contentValue , requestedVersion ) {
245+ if privatePreviewContentMatch ( contentVersion , contentValue , requestedVersion ) {
227246 return contentVersion
228247 }
229248 continue
@@ -246,10 +265,16 @@ func FindLatestContentVersionMatched(op *openapi3.Operation, requestedVersion *A
246265 return latestVersionMatch
247266}
248267
249- func PrivatePreviewContentMatch (contentValue * openapi3.MediaType , requestedVersion * APIVersion ) bool {
268+ func privatePreviewContentMatch (contentVersion * APIVersion , contentValue * openapi3.MediaType , requestedVersion * APIVersion ) bool {
269+ log .Printf ("trying to match in case one of the versions is private preview" )
270+ if ! contentVersion .IsPrivatePreview () && ! requestedVersion .IsPrivatePreview () {
271+ return false
272+ }
273+
250274 name , err := GetPreviewVersionName (contentValue )
251275 if err != nil {
252- log .Printf ("failed to parse preview version name: %v" , err )
276+ log .Printf ("failed to parse preview version name for content=%v err=%v" , contentVersion .version , err )
277+ return false
253278 }
254279
255280 return strings .EqualFold (name , requestedVersion .version )
@@ -266,6 +291,7 @@ func Sort(versions []*APIVersion) {
266291 }
267292}
268293
294+ // GetPreviewVersionName returns the preview version name.
269295func GetPreviewVersionName (contentTypeValue * openapi3.MediaType ) (name string , err error ) {
270296 public , name , err := parsePreviewExtensionData (contentTypeValue )
271297 if err != nil {
0 commit comments