Skip to content

Commit 5096167

Browse files
authored
Openapi: adding privileges (#4434)
* adding privileges to openapi export * privileges in description * update output format * rebase * restore recent changes, better rusting * rebase
1 parent 0082673 commit 5096167

File tree

7 files changed

+949
-833
lines changed

7 files changed

+949
-833
lines changed

compiler-rs/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ clients_schema = {path="../clients_schema"}
1010
argh = { workspace = true }
1111
derive_more = { version = "2", features = ["from_str"] }
1212
serde_json = { workspace = true }
13-
serde_ignored = { workspace = true }
13+
itertools = { workspace = true }
1414
icu_segmenter = { workspace = true }
1515
openapiv3 = { workspace = true }
1616
anyhow = { workspace = true }

compiler-rs/clients_schema_to_openapi/src/paths.rs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ use std::collections::HashMap;
1919
use std::fmt::Write;
2020

2121
use anyhow::{anyhow, bail};
22-
use clients_schema::{Property};
22+
use clients_schema::{Privileges, Property};
2323
use indexmap::IndexMap;
2424
use indexmap::indexmap;
2525
use icu_segmenter::SentenceSegmenter;
26+
use itertools::Itertools;
2627
use openapiv3::{
2728
MediaType, Parameter, ParameterData, ParameterSchemaOrContent, PathItem, PathStyle, Paths, QueryStyle, ReferenceOr,
2829
RequestBody, Response, Responses, StatusCode, Example
@@ -253,6 +254,13 @@ pub fn add_endpoint(
253254
parameters.append(&mut query_params.clone());
254255

255256
let sum_desc = split_summary_desc(&endpoint.description);
257+
258+
let privilege_desc = add_privileges(&endpoint.privileges);
259+
260+
let full_desc = match (sum_desc.description, privilege_desc) {
261+
(Some(a), Some(b)) => Some(a+ &b),
262+
(opt_a, opt_b) => opt_a.or(opt_b)
263+
};
256264

257265
// add the x-state extension for availability
258266
let mut extensions = crate::availability_as_extensions(&endpoint.availability, &tac.config.flavor);
@@ -300,7 +308,7 @@ pub fn add_endpoint(
300308
vec![namespace.to_string()]
301309
},
302310
summary: sum_desc.summary,
303-
description: sum_desc.description,
311+
description: full_desc,
304312
external_docs: tac.convert_external_docs(endpoint),
305313
// external_docs: None, // Need values that differ from client purposes
306314
operation_id: None, // set in clone_operation below with operation_counter
@@ -444,6 +452,26 @@ fn split_summary_desc(desc: &str) -> SplitDesc{
444452
}
445453
}
446454

455+
fn add_privileges(privileges: &Option<Privileges>) -> Option<String>{
456+
if let Some(privs) = privileges {
457+
let mut result = "\n ##Required authorization\n".to_string();
458+
if !privs.index.is_empty() {
459+
result += "* Index privileges: ";
460+
result += &privs.index.iter()
461+
.map(|a| format!("`{a}`"))
462+
.join(",");
463+
}
464+
if !privs.cluster.is_empty() {
465+
result += "* Cluster privileges: ";
466+
result += &privs.cluster.iter()
467+
.map(|a| format!("`{a}`"))
468+
.join(",");
469+
}
470+
return Some(result)
471+
}
472+
None
473+
}
474+
447475
#[derive(PartialEq,Debug)]
448476
struct SplitDesc {
449477
summary: Option<String>,
Binary file not shown.

output/openapi/elasticsearch-openapi.json

Lines changed: 619 additions & 561 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

output/openapi/elasticsearch-serverless-openapi.json

Lines changed: 297 additions & 267 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)