Skip to content

Commit 09daf2f

Browse files
committed
x-state in fields
1 parent 0c62637 commit 09daf2f

File tree

5 files changed

+116
-24
lines changed

5 files changed

+116
-24
lines changed

compiler-rs/clients_schema_to_openapi/src/lib.rs

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ pub mod cli;
2323

2424
use indexmap::IndexMap;
2525

26-
use clients_schema::{Availabilities, Flavor, IndexedModel, Stability, Visibility};
26+
use clients_schema::{Availabilities, Availability, Flavor, IndexedModel, Stability, Visibility};
2727
use openapiv3::{Components, OpenAPI};
28+
use serde_json::Value;
2829
use clients_schema::transform::ExpandConfig;
2930
use crate::components::TypesAndComponents;
3031

@@ -151,31 +152,35 @@ fn info(model: &IndexedModel) -> openapiv3::Info {
151152

152153
pub fn availability_as_extensions(availabilities: &Option<Availabilities>, flavor: &Option<Flavor>) -> IndexMap<String, serde_json::Value> {
153154
let mut result = IndexMap::new();
155+
convert_availabilities(availabilities, flavor, &mut result);
156+
result
157+
}
158+
159+
pub fn convert_availabilities(availabilities: &Option<Availabilities>, flavor: &Option<Flavor>, result: &mut IndexMap<String, Value>) {
154160
if let Some(avails) = availabilities {
155-
if let Some(flavor) = flavor {
156-
if let Some(availability) = avails.get(flavor) {
157-
if let Some(stability) = &availability.stability {
158-
let mut since_str = "".to_string();
159-
if let Some(since) = &availability.since {
160-
since_str = "; Added in ".to_string() + since;
161+
if let Some(flav) = flavor {
162+
if let Some(availability) = avails.get(flav) {
163+
let Availability {since,stability,..} = &availability;
164+
let stab = stability.clone().unwrap_or(Stability::Stable);
165+
let mut since_str = "".to_string();
166+
if let Some(since) = since {
167+
since_str = "; Added in ".to_string() + since;
168+
}
169+
match stab {
170+
Stability::Beta => {
171+
let beta_since = "Beta".to_string() + &since_str;
172+
result.insert("x-state".to_string(), Value::String(beta_since));
173+
}
174+
Stability::Experimental => {
175+
let exp_since = "Technical preview".to_string() + &since_str;
176+
result.insert("x-state".to_string(), Value::String(exp_since));
161177
}
162-
match stability {
163-
Stability::Beta => {
164-
let beta_since = "Beta".to_string() + &since_str;
165-
result.insert("x-state".to_string(), serde_json::Value::String(beta_since));
166-
}
167-
Stability::Experimental => {
168-
let exp_since = "Technical preview".to_string() + &since_str;
169-
result.insert("x-state".to_string(), serde_json::Value::String(exp_since));
170-
}
171-
Stability::Stable => {
172-
let stable_since = "Generally available".to_string() + &since_str;
173-
result.insert("x-state".to_string(), serde_json::Value::String(stable_since));
174-
}
178+
Stability::Stable => {
179+
let stable_since = "Generally available".to_string() + &since_str;
180+
result.insert("x-state".to_string(), Value::String(stable_since));
175181
}
176182
}
177183
}
178184
}
179185
}
180-
result
181186
}

compiler-rs/clients_schema_to_openapi/src/paths.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,10 @@ use openapiv3::{
2727
MediaType, Parameter, ParameterData, ParameterSchemaOrContent, PathItem, PathStyle, Paths, QueryStyle, ReferenceOr,
2828
RequestBody, Response, Responses, StatusCode, Example
2929
};
30+
use serde_json::Value;
3031
use clients_schema::SchemaExample;
31-
3232
use crate::components::TypesAndComponents;
33+
use crate::convert_availabilities;
3334

3435
/// Add an endpoint to the OpenAPI schema. This will result in the addition of a number of elements to the
3536
/// openapi schema's `paths` and `components` sections.
@@ -61,6 +62,8 @@ pub fn add_endpoint(
6162
let request = tac.model.get_request(endpoint.request.as_ref().unwrap())?;
6263

6364
fn parameter_data(prop: &Property, in_path: bool, tac: &mut TypesAndComponents) -> anyhow::Result<ParameterData> {
65+
let mut extensions: IndexMap<String,Value> = Default::default();
66+
convert_availabilities(&prop.availability, &tac.config.flavor, &mut extensions);
6467
Ok(ParameterData {
6568
name: prop.name.clone(),
6669
description: tac.property_description(prop)?,
Binary file not shown.

0 commit comments

Comments
 (0)