Skip to content

Commit a409359

Browse files
authored
Add stability extensions for openapi (#2716)
* add stability to extensions * add new version of wasm lib * refresh generated output * explicitely do nothing for unhandled stabilities * refresh wasm lib
1 parent 5c3ba9f commit a409359

File tree

6 files changed

+177
-22
lines changed

6 files changed

+177
-22
lines changed

compiler-rs/clients_schema_to_openapi/src/lib.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use std::io::{BufWriter, Write};
2525
use std::path::Path;
2626
use indexmap::IndexMap;
2727

28-
use clients_schema::{Availabilities, Endpoint, IndexedModel};
28+
use clients_schema::{Availabilities, Endpoint, IndexedModel, Stability};
2929
use openapiv3::{Components, OpenAPI};
3030
use tracing::warn;
3131

@@ -149,15 +149,25 @@ fn info(model: &IndexedModel) -> openapiv3::Info {
149149
}
150150
}
151151

152-
pub fn availability_as_extension(availabilities: &Option<Availabilities>) -> IndexMap<String, serde_json::Value> {
152+
pub fn availability_as_extensions(availabilities: &Option<Availabilities>) -> IndexMap<String, serde_json::Value> {
153153
let mut result = IndexMap::new();
154154

155155
if let Some(avails) = availabilities {
156156
// We may have several availabilities, but since generally exists only on stateful (stack)
157157
for (_, availability) in avails {
158158
if let Some(since) = &availability.since {
159159
result.insert("x-available-since".to_string(), serde_json::Value::String(since.clone()));
160-
break;
160+
}
161+
if let Some(stability) = &availability.stability {
162+
match stability {
163+
Stability::Beta => {
164+
result.insert("x-beta".to_string(), serde_json::Value::Bool(true));
165+
}
166+
Stability::Experimental => {
167+
result.insert("x-technical-preview".to_string(), serde_json::Value::Bool(true));
168+
}
169+
_ => {}
170+
}
161171
}
162172
}
163173
}

compiler-rs/clients_schema_to_openapi/src/paths.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ pub fn add_endpoint(
211211
deprecated: endpoint.deprecation.is_some(),
212212
security: None,
213213
servers: vec![],
214-
extensions: crate::availability_as_extension(&endpoint.availability),
214+
extensions: crate::availability_as_extensions(&endpoint.availability),
215215
};
216216

217217

compiler-rs/clients_schema_to_openapi/src/schemas.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@ impl<'a> TypesAndComponents<'a> {
472472
data.external_docs = self.convert_external_docs(prop);
473473
data.deprecated = prop.deprecation.is_some();
474474
data.description = prop.description.clone();
475-
data.extensions = crate::availability_as_extension(&prop.availability);
475+
data.extensions = crate::availability_as_extensions(&prop.availability);
476476
// TODO: prop.aliases as extensions
477477
// TODO: prop.server_default as extension
478478
// TODO: prop.doc_id as extension (new representation of since and stability)
Binary file not shown.

0 commit comments

Comments
 (0)