@@ -168,7 +168,7 @@ pub fn add_endpoint(
168168 let media = MediaType {
169169 schema : Some ( schema) ,
170170 example : None ,
171- examples : request_examples,
171+ examples : request_examples. clone ( ) ,
172172 encoding : Default :: default ( ) ,
173173 extensions : Default :: default ( ) ,
174174 } ;
@@ -198,7 +198,7 @@ pub fn add_endpoint(
198198 // If this endpoint response has examples in schema.json, convert them to the
199199 // OpenAPI format and add them to the endpoint response in the OpenAPI document.
200200 let response_examples = if let Some ( examples) = & response_def. examples {
201- get_openapi_examples ( examples)
201+ get_openapi_examples ( examples)
202202 } else {
203203 IndexMap :: new ( )
204204 } ;
@@ -251,6 +251,43 @@ pub fn add_endpoint(
251251
252252 let sum_desc = split_summary_desc ( & endpoint. description ) ;
253253
254+ // add the x-state extension for availability
255+ let mut extensions = crate :: availability_as_extensions ( & endpoint. availability ) ;
256+
257+ // add the x-codeSamples extension
258+ if !request_examples. is_empty ( ) {
259+ let mut code_samples = vec ! [ ] ;
260+ if let Some ( ( _, first_example) ) = request_examples. clone ( ) . first ( ) {
261+ if let Some ( example) = first_example. as_item ( ) {
262+ if let Some ( description) = example. description . clone ( ) {
263+ let mut request: Option < String > = Option :: None ;
264+ for r in description. split ( '`' ) {
265+ if r. starts_with ( "GET " )
266+ || r. starts_with ( "POST " )
267+ || r. starts_with ( "PUT " )
268+ || r. starts_with ( "DELETE " )
269+ || r. starts_with ( "HEAD " )
270+ {
271+ request = Some ( String :: from ( r) ) ;
272+ break ;
273+ }
274+ }
275+ if let Some ( first_line) = request {
276+ if let Some ( code) = example. value . clone ( ) {
277+ code_samples. push ( serde_json:: json!( {
278+ "lang" : "Console" ,
279+ "source" : first_line + "\n " + code. as_str( ) . unwrap_or( "" ) ,
280+ } ) ) ;
281+ }
282+ }
283+ }
284+ }
285+ }
286+ if code_samples. len ( ) > 0 {
287+ extensions. insert ( "x-codeSamples" . to_string ( ) , serde_json:: json!( code_samples) ) ;
288+ }
289+ }
290+
254291 // Create the operation, it will be repeated if we have several methods
255292 let operation = openapiv3:: Operation {
256293 tags : if let Some ( doc_tag) = & endpoint. doc_tag {
@@ -274,7 +311,7 @@ pub fn add_endpoint(
274311 deprecated : endpoint. deprecation . is_some ( ) ,
275312 security : None ,
276313 servers : vec ! [ ] ,
277- extensions : crate :: availability_as_extensions ( & endpoint . availability ) ,
314+ extensions,
278315 } ;
279316
280317
0 commit comments