Skip to content

Commit fbfff75

Browse files
authored
Merge pull request #74 from Tuntii/native-openapi-7665294518381585970
Native OpenAPI 3.1 Generator
2 parents f8633b4 + 83d3157 commit fbfff75

File tree

39 files changed

+1508
-3254
lines changed

39 files changed

+1508
-3254
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ members = [
1313
"crates/rustapi-testing",
1414
"crates/rustapi-jobs",
1515
"crates/cargo-rustapi",
16-
1716
]
1817

1918
[workspace.package]
@@ -138,8 +137,3 @@ codegen-units = 1
138137
inherits = "release"
139138
debug = true
140139
strip = false
141-
142-
143-
144-
145-

crates/rustapi-core/src/app.rs

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::middleware::{BodyLimitLayer, LayerStack, MiddlewareLayer, DEFAULT_BOD
66
use crate::response::IntoResponse;
77
use crate::router::{MethodRouter, Router};
88
use crate::server::Server;
9-
use std::collections::HashMap;
9+
use std::collections::{BTreeMap, HashMap};
1010
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
1111

1212
/// Main application builder for RustAPI
@@ -309,7 +309,7 @@ impl RustApi {
309309
/// RustApi::new()
310310
/// .register_schema::<User>()
311311
/// ```
312-
pub fn register_schema<T: for<'a> rustapi_openapi::Schema<'a>>(mut self) -> Self {
312+
pub fn register_schema<T: rustapi_openapi::schema::RustApiSchema>(mut self) -> Self {
313313
self.openapi_spec = self.openapi_spec.register::<T>();
314314
self
315315
}
@@ -388,7 +388,7 @@ impl RustApi {
388388
// Register operations in OpenAPI spec
389389
for (method, op) in &method_router.operations {
390390
let mut op = op.clone();
391-
add_path_params_to_operation(path, &mut op, &std::collections::HashMap::new());
391+
add_path_params_to_operation(path, &mut op, &BTreeMap::new());
392392
self.openapi_spec = self.openapi_spec.path(path, method.as_str(), op);
393393
}
394394

@@ -520,11 +520,7 @@ impl RustApi {
520520
// Register each operation in the OpenAPI spec
521521
for (method, op) in &method_router.operations {
522522
let mut op = op.clone();
523-
add_path_params_to_operation(
524-
&prefixed_path,
525-
&mut op,
526-
&std::collections::HashMap::new(),
527-
);
523+
add_path_params_to_operation(&prefixed_path, &mut op, &BTreeMap::new());
528524
self.openapi_spec = self.openapi_spec.path(&prefixed_path, method.as_str(), op);
529525
}
530526
}
@@ -1124,7 +1120,7 @@ impl RustApi {
11241120
fn add_path_params_to_operation(
11251121
path: &str,
11261122
op: &mut rustapi_openapi::Operation,
1127-
param_schemas: &std::collections::HashMap<String, String>,
1123+
param_schemas: &BTreeMap<String, String>,
11281124
) {
11291125
let mut params: Vec<String> = Vec::new();
11301126
let mut in_brace = false;
@@ -1156,7 +1152,7 @@ fn add_path_params_to_operation(
11561152
return;
11571153
}
11581154

1159-
let op_params = op.parameters.get_or_insert_with(Vec::new);
1155+
let op_params = &mut op.parameters;
11601156

11611157
for name in params {
11621158
let already = op_params
@@ -1178,7 +1174,8 @@ fn add_path_params_to_operation(
11781174
location: "path".to_string(),
11791175
required: true,
11801176
description: None,
1181-
schema,
1177+
deprecated: None,
1178+
schema: Some(schema),
11821179
});
11831180
}
11841181
}
@@ -1647,12 +1644,12 @@ mod tests {
16471644
let get_op = path_item.get.as_ref().unwrap();
16481645

16491646
prop_assert!(
1650-
get_op.parameters.is_some(),
1647+
!get_op.parameters.is_empty(),
16511648
"Operation should have parameters for path '{}'",
16521649
expected_openapi_path
16531650
);
16541651

1655-
let params = get_op.parameters.as_ref().unwrap();
1652+
let params = &get_op.parameters;
16561653
let has_param = params.iter().any(|p| p.name == param_name && p.location == "path");
16571654
prop_assert!(
16581655
has_param,
@@ -1915,8 +1912,8 @@ mod tests {
19151912

19161913
// Verify path parameter is added
19171914
let get_user_op = user_path.get.as_ref().unwrap();
1918-
assert!(get_user_op.parameters.is_some(), "Should have parameters");
1919-
let params = get_user_op.parameters.as_ref().unwrap();
1915+
assert!(!get_user_op.parameters.is_empty(), "Should have parameters");
1916+
let params = &get_user_op.parameters;
19201917
assert!(
19211918
params
19221919
.iter()
@@ -2068,8 +2065,8 @@ mod tests {
20682065

20692066
// Verify path parameter is added
20702067
let get_op = get_path.get.as_ref().unwrap();
2071-
assert!(get_op.parameters.is_some(), "Should have parameters");
2072-
let params = get_op.parameters.as_ref().unwrap();
2068+
assert!(!get_op.parameters.is_empty(), "Should have parameters");
2069+
let params = &get_op.parameters;
20732070
assert!(
20742071
params
20752072
.iter()

0 commit comments

Comments
 (0)