Skip to content

Commit f13e6ae

Browse files
committed
adding privileges to openapi export
1 parent d0fded3 commit f13e6ae

File tree

7 files changed

+1895
-917
lines changed

7 files changed

+1895
-917
lines changed

compiler-rs/clients_schema/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ pub struct Availability {
264264
pub visibility: Option<Visibility>,
265265
}
266266

267-
/// The availability of an
267+
/// The availability of an endpoint, field or parameter
268268
pub type Availabilities = IndexMap<Flavor, Availability>;
269269

270270
pub trait AvailabilityFilter: Fn(&Option<Availabilities>) -> bool {}

compiler-rs/clients_schema_to_openapi/src/lib.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ mod utils;
2222

2323
use indexmap::IndexMap;
2424

25-
use clients_schema::{Availabilities, Flavor, IndexedModel, Stability, Visibility};
25+
use clients_schema::{Availabilities, Flavor, IndexedModel, Privileges, Stability, Visibility};
2626
use openapiv3::{Components, OpenAPI};
2727
use clients_schema::transform::ExpandConfig;
2828
use crate::components::TypesAndComponents;
@@ -151,7 +151,7 @@ fn info(model: &IndexedModel) -> openapiv3::Info {
151151
}
152152
}
153153

154-
pub fn availability_as_extensions(availabilities: &Option<Availabilities>) -> IndexMap<String, serde_json::Value> {
154+
pub fn extensions(availabilities: &Option<Availabilities>, privileges: &Option<Privileges>) -> IndexMap<String, serde_json::Value> {
155155
let mut result = IndexMap::new();
156156

157157
if let Some(avails) = availabilities {
@@ -176,5 +176,14 @@ pub fn availability_as_extensions(availabilities: &Option<Availabilities>) -> In
176176
}
177177
}
178178

179+
if let Some(privs) = privileges {
180+
if privs.index.len()>0 {
181+
result.insert("index-privileges".to_string(),serde_json::Value::String(privs.index.join(",")));
182+
}
183+
if privs.cluster.len()>0 {
184+
result.insert("cluster-privileges".to_string(),serde_json::Value::String(privs.cluster.join(",")));
185+
}
186+
}
187+
179188
result
180189
}

compiler-rs/clients_schema_to_openapi/src/paths.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ pub fn add_endpoint(
274274
deprecated: endpoint.deprecation.is_some(),
275275
security: None,
276276
servers: vec![],
277-
extensions: crate::availability_as_extensions(&endpoint.availability),
277+
extensions: crate::extensions(&endpoint.availability,&endpoint.privileges),
278278
};
279279

280280

compiler-rs/clients_schema_to_openapi/src/schemas.rs

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

0 commit comments

Comments
 (0)