Skip to content

Commit f6d6b06

Browse files
Add request details to examples (#4445) (#4486)
* add request heading line to request examples * add request heading line to response examples * changes to the compiler to include the request heading
1 parent 6b27fa0 commit f6d6b06

File tree

539 files changed

+8877
-1330
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

539 files changed

+8877
-1330
lines changed

compiler-rs/clients_schema/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,7 @@ impl TypeDefinition {
494494
#[derive(Debug, Clone, Serialize, Deserialize)]
495495
pub struct SchemaExample {
496496
pub summary: Option<String>,
497+
pub method_request: Option<String>,
497498
pub description: Option<String>,
498499
pub value: Option<String>,
499500
pub external_value: Option<String>,

compiler-rs/clients_schema_to_openapi/src/paths.rs

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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,42 @@ 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+
let mut code_samples = vec![];
259+
if let Some(examples) = request.examples.clone() {
260+
if let Some((_, example)) = examples.first() {
261+
let request_line = example.method_request.clone().unwrap_or(String::from(""));
262+
let request_body = example.value.clone().unwrap_or(String::from(""));
263+
if !request_line.is_empty() {
264+
code_samples.push(serde_json::json!({
265+
"lang": "Console",
266+
"source": request_line + "\n" + request_body.as_str(),
267+
}));
268+
}
269+
}
270+
}
271+
if code_samples.is_empty() {
272+
// if there are no example requests we look for example responses
273+
// this can only happen for examples that do not have a request body
274+
if let Some(examples) = response_def.examples.clone() {
275+
if let Some((_, example)) = examples.first() {
276+
let request_line = example.method_request.clone().unwrap_or(String::from(""));
277+
if !request_line.is_empty() {
278+
code_samples.push(serde_json::json!({
279+
"lang": "Console",
280+
"source": request_line + "\n",
281+
}));
282+
}
283+
}
284+
}
285+
}
286+
if !code_samples.is_empty() {
287+
extensions.insert("x-codeSamples".to_string(), serde_json::json!(code_samples));
288+
}
289+
254290
// Create the operation, it will be repeated if we have several methods
255291
let operation = openapiv3::Operation {
256292
tags: if let Some(doc_tag) = &endpoint.doc_tag {
@@ -274,7 +310,7 @@ pub fn add_endpoint(
274310
deprecated: endpoint.deprecation.is_some(),
275311
security: None,
276312
servers: vec![],
277-
extensions: crate::availability_as_extensions(&endpoint.availability),
313+
extensions,
278314
};
279315

280316

Binary file not shown.

compiler/src/model/metamodel.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,8 @@ export class Example {
271271
summary?: string
272272
/** Long description. */
273273
description?: string
274+
/** request method and URL */
275+
method_request?: string
274276
/** Embedded literal example. Mutually exclusive with `external_value` */
275277
value?: string
276278
/** A URI that points to the literal example */

0 commit comments

Comments
 (0)