@@ -52,7 +52,7 @@ pub struct OpenApiConversion {
5252}
5353
5454/// Convert an API model into an OpenAPI v3 schema, optionally filtered for a given flavor
55- pub fn convert_schema ( mut schema : IndexedModel , config : Configuration ) -> anyhow:: Result < OpenApiConversion > {
55+ pub fn convert_schema ( mut schema : IndexedModel , config : Configuration , product_meta : IndexMap < String , String > ) -> anyhow:: Result < OpenApiConversion > {
5656 // Expand generics
5757 schema = clients_schema:: transform:: expand_generics ( schema, ExpandConfig :: default ( ) ) ?;
5858
@@ -73,7 +73,7 @@ pub fn convert_schema(mut schema: IndexedModel, config: Configuration) -> anyhow
7373 schema = clients_schema:: transform:: filter_availability ( schema, filter) ?;
7474 }
7575
76- convert_expanded_schema ( & schema, & config)
76+ convert_expanded_schema ( & schema, & config, & product_meta )
7777}
7878
7979/// Convert an API model into an OpenAPI v3 schema. The input model must have all generics expanded, conversion
@@ -82,7 +82,7 @@ pub fn convert_schema(mut schema: IndexedModel, config: Configuration) -> anyhow
8282/// Note: there are ways to represent [generics in JSON Schema], but its unlikely that tooling will understand it.
8383///
8484/// [generics in JSON Schema]: https://json-schema.org/blog/posts/dynamicref-and-generics
85- pub fn convert_expanded_schema ( model : & IndexedModel , config : & Configuration ) -> anyhow:: Result < OpenApiConversion > {
85+ pub fn convert_expanded_schema ( model : & IndexedModel , config : & Configuration , product_meta : & IndexMap < String , String > ) -> anyhow:: Result < OpenApiConversion > {
8686 let mut openapi = OpenAPI {
8787 openapi : "3.0.3" . into ( ) ,
8888 info : info ( model) ,
@@ -120,7 +120,7 @@ pub fn convert_expanded_schema(model: &IndexedModel, config: &Configuration) ->
120120 continue ;
121121 }
122122 }
123- paths:: add_endpoint ( endpoint, & mut tac, & mut openapi. paths ) ?;
123+ paths:: add_endpoint ( endpoint, & mut tac, & mut openapi. paths , product_meta ) ?;
124124 }
125125
126126 // // Sort maps to ensure output stability
@@ -180,7 +180,19 @@ fn info(model: &IndexedModel) -> openapiv3::Info {
180180 }
181181}
182182
183- pub fn availability_as_extensions ( availabilities : & Option < Availabilities > , flavor : & Option < Flavor > ) -> IndexMap < String , serde_json:: Value > {
183+ pub fn product_meta_as_extensions ( namespace : & str , product_meta : & IndexMap < String , String > ) -> IndexMap < String , Value > {
184+ let mut result = IndexMap :: new ( ) ;
185+ let mut additional_namespace= "" . to_string ( ) ;
186+ if let Some ( meta) = product_meta. get ( namespace) {
187+ additional_namespace = format ! ( ", {meta}" ) ;
188+ }
189+
190+ let product_str = format ! ( "elasticsearch{additional_namespace}" ) ;
191+ result. insert ( "x-product-feature" . to_string ( ) , Value :: String ( product_str) ) ;
192+ result
193+ }
194+
195+ pub fn availability_as_extensions ( availabilities : & Option < Availabilities > , flavor : & Option < Flavor > ) -> IndexMap < String , Value > {
184196 let mut result = IndexMap :: new ( ) ;
185197 convert_availabilities ( availabilities, flavor, & mut result) ;
186198 result
0 commit comments