Skip to content

Commit 3f9daef

Browse files
committed
Fix serverless filtering
1 parent cac5cdd commit 3f9daef

File tree

3 files changed

+28920
-47068
lines changed

3 files changed

+28920
-47068
lines changed

openapi-converter/clients_schema/src/lib.rs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -198,15 +198,15 @@ pub enum LiteralValueValue {
198198

199199
//--------------------------------------------------------------------------------------------
200200

201-
#[derive(Debug, Clone, Serialize, Deserialize)]
201+
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
202202
#[serde(rename_all = "snake_case")]
203203
pub enum Stability {
204204
Stable,
205205
Beta,
206206
Experimental,
207207
}
208208

209-
#[derive(Debug, Clone, Serialize, Deserialize)]
209+
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
210210
#[serde(rename_all = "snake_case")]
211211
pub enum Visibility {
212212
Public,
@@ -254,12 +254,22 @@ impl Flavor {
254254
}
255255
}
256256

257-
pub fn is_serverless(a: &Option<Availabilities>) -> bool {
258-
Flavor::Serverless.available(a)
259-
}
260-
261-
pub fn is_stack(a: &Option<Availabilities>) -> bool {
262-
Flavor::Stack.available(a)
257+
/// Gets the visibility for a given set of availabilities. If the result is `None`,
258+
/// this flavor isn't available.
259+
pub fn visibility(&self, availabilities: &Option<Availabilities>) -> Option<Visibility> {
260+
if let Some(ref availabilities) = availabilities {
261+
// Some availabilities defined
262+
if let Some(ref availability) = availabilities.get(self) {
263+
// This one exists. Public by default
264+
availability.visibility.clone().or(Some(Visibility::Public))
265+
} else {
266+
// Not available
267+
None
268+
}
269+
} else {
270+
// No restriction: available and public
271+
Some(Visibility::Public)
272+
}
263273
}
264274
}
265275

openapi-converter/clients_schema_to_openapi/src/main.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use tracing::Level;
2020
use tracing_subscriber::fmt::format::FmtSpan;
2121
use tracing_subscriber::FmtSubscriber;
2222
use std::path::{Path, PathBuf};
23-
use clients_schema::Availabilities;
23+
use clients_schema::{Availabilities, Visibility};
2424

2525
fn main() -> anyhow::Result<()> {
2626

@@ -77,9 +77,17 @@ impl Cli {
7777
if let Some(flavor) = self.flavor {
7878
if flavor != SchemaFlavor::All {
7979
let filter: fn(&Option<Availabilities>) -> bool = match flavor {
80-
SchemaFlavor::All => |_| true,
81-
SchemaFlavor::Stack => |a| clients_schema::Flavor::is_stack(a),
82-
SchemaFlavor::Serverless => |a| clients_schema::Flavor::is_serverless(a),
80+
SchemaFlavor::All => |_| {
81+
true
82+
},
83+
SchemaFlavor::Stack => |a| {
84+
// Generate public and private items for Stack
85+
clients_schema::Flavor::Stack.available(a)
86+
},
87+
SchemaFlavor::Serverless => |a| {
88+
// Generate only public items for Serverless
89+
clients_schema::Flavor::Serverless.visibility(a) == Some(Visibility::Public)
90+
},
8391
};
8492

8593
model = clients_schema::transform::filter_availability(model, filter)?;

0 commit comments

Comments
 (0)