diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustAxumServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustAxumServerCodegen.java index 1366797328a5..4633d6df0a95 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustAxumServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustAxumServerCodegen.java @@ -861,6 +861,24 @@ private boolean postProcessOperationWithModels(final CodegenOperation op) { } if (op.bodyParam != null) { + final var dataType = op.bodyParam.dataType; + if (dataType.startsWith(vecType + " validator::ValidationErrors { + let mut errs = validator::ValidationErrors::new(); + errs.add("na", e); + errs +} + #[allow(dead_code)] pub fn check_xss_string(v: &str) -> std::result::Result<(), validator::ValidationError> { if ammonia::is_html(v) { @@ -465,7 +472,7 @@ pub fn check_xss_map(v: &std::collections::HashMap) -> std::result #[serde(default)] {{/required}} pub {{{paramName}}}: {{{dataType}}}, - {{/isArray}} + {{/isArray}} {{^isArray}} {{#required}} pub {{{paramName}}}: {{#isNullable}}Nullable<{{/isNullable}}{{{dataType}}}{{#isNullable}}>{{/isNullable}}, @@ -580,10 +587,36 @@ impl std::str::FromStr for {{{classname}}} { #[derive(Debug, Clone, PartialEq, PartialOrd, serde::Serialize, serde::Deserialize)] {{/isMap}} #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct {{{classname}}}({{{dataType}}}); +pub struct {{{classname}}}(pub {{{dataType}}}); impl validator::Validate for {{{classname}}} { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { + {{^isNullable}} + {{#vendorExtensions.is-nested}} + let _ = self.0.validate()?; + {{/vendorExtensions.is-nested}} + {{#vendorExtensions.is-string}} + let _ = check_xss_string(&self.0).map_err(from_validation_error)?; + {{/vendorExtensions.is-string}} + {{#vendorExtensions.is-vec-nested}} + for v in self.0.iter() { + let _ = v.validate()?; + } + {{/vendorExtensions.is-vec-nested}} + {{#vendorExtensions.is-vec-string}} + let _ = check_xss_vec_string(&self.0).map_err(from_validation_error)?; + {{/vendorExtensions.is-vec-string}} + {{#vendorExtensions.is-map-nested}} + let _ = check_xss_map_nested(&self.0).map_err(from_validation_error)?; + {{/vendorExtensions.is-map-nested}} + {{#vendorExtensions.is-map}} + let _ = check_xss_map(&self.0).map_err(from_validation_error)?; + {{/vendorExtensions.is-map}} + {{#vendorExtensions.is-map-string}} + let _ = check_xss_map_string(&self.0).map_err(from_validation_error)?; + {{/vendorExtensions.is-map-string}} + {{/isNullable}} + std::result::Result::Ok(()) } } @@ -656,7 +689,7 @@ impl ::std::str::FromStr for {{{classname}}} { {{! vec}} #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct {{{classname}}}(Vec<{{{arrayModelType}}}>); +pub struct {{{classname}}}(pub Vec<{{{arrayModelType}}}>); impl validator::Validate for {{{classname}}} { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { diff --git a/modules/openapi-generator/src/main/resources/rust-axum/server-imports.mustache b/modules/openapi-generator/src/main/resources/rust-axum/server-imports.mustache index 3289e2e0f1cf..9bb2805c725d 100644 --- a/modules/openapi-generator/src/main/resources/rust-axum/server-imports.mustache +++ b/modules/openapi-generator/src/main/resources/rust-axum/server-imports.mustache @@ -11,3 +11,6 @@ use crate::{header, types::*}; #[allow(unused_imports)] use crate::{apis, models}; + +#[allow(unused_imports)] +use crate::{models::check_xss_string, models::check_xss_vec_string, models::check_xss_map_string, models::check_xss_map_nested, models::check_xss_map}; diff --git a/modules/openapi-generator/src/main/resources/rust-axum/server-operation-validate.mustache b/modules/openapi-generator/src/main/resources/rust-axum/server-operation-validate.mustache index 54a0ab28e35a..f02170ddbac4 100644 --- a/modules/openapi-generator/src/main/resources/rust-axum/server-operation-validate.mustache +++ b/modules/openapi-generator/src/main/resources/rust-axum/server-operation-validate.mustache @@ -5,67 +5,108 @@ #[derive(validator::Validate)] #[allow(dead_code)] struct {{{operationIdCamelCase}}}BodyValidator<'a> { - {{#hasValidation}} - #[validate( - {{#maxLength}} - {{#minLength}} - length(min = {{minLength}}, max = {{maxLength}}), - {{/minLength}} - {{^minLength}} - length(max = {{maxLength}}), - {{/minLength}} - {{/maxLength}} - {{^maxLength}} - {{#minLength}} - length(min = {{minLength}}), - {{/minLength}} - {{/maxLength}} - {{#pattern}} + {{^x-consumes-plain-text}} + {{#isModel}} + #[validate(nested)] + {{/isModel}} + {{^isModel}} + {{#hasValidation}} + #[validate( + {{#maxLength}} + {{#minLength}} + length(min = {{minLength}}, max = {{maxLength}}), + {{/minLength}} + {{^minLength}} + length(max = {{maxLength}}), + {{/minLength}} + {{/maxLength}} + {{^maxLength}} + {{#minLength}} + length(min = {{minLength}}), + {{/minLength}} + {{/maxLength}} + {{#pattern}} + {{#isString}} + regex(path = *RE_{{#lambda.uppercase}}{{{operationIdCamelCase}}}BodyValidator{{/lambda.uppercase}}), + {{/isString}} + {{^isString}} + custom(function = "validate_byte_{{#lambda.lowercase}}{{{operationIdCamelCase}}}BodyValidator{{/lambda.lowercase}}"), + {{/isString}} + {{/pattern}} {{#isString}} - regex(path = *RE_{{#lambda.uppercase}}{{{operationIdCamelCase}}}BodyValidator{{/lambda.uppercase}}), - {{/isString}} - {{^isString}} - custom(function = "validate_byte_{{#lambda.lowercase}}{{{operationIdCamelCase}}}BodyValidator{{/lambda.lowercase}}"), + custom(function = "check_xss_string"), {{/isString}} - {{/pattern}} - {{#maximum}} - {{#minimum}} - range(min = {{minimum}}, max = {{maximum}}), - {{/minimum}} - {{^minimum}} - range(max = {{maximum}}), - {{/minimum}} - {{/maximum}} - {{#minimum}} - {{^maximum}} - range(min = {{minimum}}), - {{/maximum}} - {{/minimum}} - {{#maxItems}} - {{#minItems}} - length(min = {{minItems}}, max = {{maxItems}}), - {{/minItems}} - {{^minItems}} - length(max = {{maxItems}}), - {{/minItems}} - {{/maxItems}} - {{^maxItems}} - {{#minItems}} - length(min = {{minItems}}), - {{/minItems}} - {{/maxItems}} - )] - {{/hasValidation}} - {{^x-consumes-plain-text}} + {{#maximum}} + {{#minimum}} + range(min = {{minimum}}, max = {{maximum}}), + {{/minimum}} + {{^minimum}} + range(max = {{maximum}}), + {{/minimum}} + {{/maximum}} + {{#minimum}} + {{^maximum}} + range(min = {{minimum}}), + {{/maximum}} + {{/minimum}} + {{#maxItems}} + {{#minItems}} + length(min = {{minItems}}, max = {{maxItems}}), + {{/minItems}} + {{^minItems}} + length(max = {{maxItems}}), + {{/minItems}} + {{/maxItems}} + {{^maxItems}} + {{#minItems}} + length(min = {{minItems}}), + {{/minItems}} + {{/maxItems}} + {{#vendorExtensions.is-vec-nested}} + nested, + {{/vendorExtensions.is-vec-nested}} + {{#vendorExtensions.is-vec-string}} + custom(function = "check_xss_vec_string"), + {{/vendorExtensions.is-vec-string}} + {{#vendorExtensions.is-map-nested}} + custom(function = "check_xss_map_nested"), + {{/vendorExtensions.is-map-nested}} + {{#vendorExtensions.is-map}} + custom(function = "check_xss_map"), + {{/vendorExtensions.is-map}} + {{#vendorExtensions.is-map-string}} + custom(function = "check_xss_map_string"), + {{/vendorExtensions.is-map-string}} )] + {{/hasValidation}} {{^hasValidation}} - {{^isMap}} - #[validate(nested)] - {{/isMap}} + {{#vendorExtensions.is-nested}} + #[validate(nested)] + {{/vendorExtensions.is-nested}} + {{#vendorExtensions.is-string}} + #[validate(custom(function = "check_xss_string"))] + {{/vendorExtensions.is-string}} + {{#vendorExtensions.is-vec-nested}} + #[validate(nested)] + {{/vendorExtensions.is-vec-nested}} + {{#vendorExtensions.is-vec-string}} + #[validate(custom(function = "check_xss_vec_string"))] + {{/vendorExtensions.is-vec-string}} + {{#vendorExtensions.is-map-nested}} + #[validate(custom(function = "check_xss_map_nested"))] + {{/vendorExtensions.is-map-nested}} + {{#vendorExtensions.is-map}} + #[validate(custom(function = "check_xss_map"))] + {{/vendorExtensions.is-map}} + {{#vendorExtensions.is-map-string}} + #[validate(custom(function = "check_xss_map_string"))] + {{/vendorExtensions.is-map-string}} {{/hasValidation}} + {{/isModel}} body: &'a {{{dataType}}}, {{/x-consumes-plain-text}} {{#x-consumes-plain-text}} {{#isString}} + #[validate(custom(function = "check_xss_string"))] body: &'a String, {{/isString}} {{^isString}} diff --git a/modules/openapi-generator/src/test/resources/3_0/rust-axum/rust-axum-oneof.yaml b/modules/openapi-generator/src/test/resources/3_0/rust-axum/rust-axum-oneof.yaml index 2a0ca4dfe570..dda34a57914d 100644 --- a/modules/openapi-generator/src/test/resources/3_0/rust-axum/rust-axum-oneof.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/rust-axum/rust-axum-oneof.yaml @@ -19,6 +19,56 @@ paths: "application/json": schema: "$ref": "#/components/schemas/Message" + "/issue21143_1": + post: + operationId: i21143_1 + requestBody: + required: true + content: + "application/json": + schema: + type: array + items: + type: integer + responses: + "200": + description: Re-serialize and echo the request data + content: + "application/json": + schema: + "$ref": "#/components/schemas/Message" + "/issue21143_2": + post: + operationId: i21143_2 + requestBody: + required: true + content: + "application/json": + schema: + type: string + responses: + "200": + description: Re-serialize and echo the request data + content: + "application/json": + schema: + "$ref": "#/components/schemas/Message" + "/issue21143_3": + post: + operationId: i21143_3 + requestBody: + required: true + content: + "application/json": + schema: + type: integer + responses: + "200": + description: Re-serialize and echo the request data + content: + "application/json": + schema: + "$ref": "#/components/schemas/Message" components: schemas: Message: @@ -87,7 +137,7 @@ components: - d SomethingCompletelyDifferent: oneOf: - - items: - type: object - type: array - - type: object + - items: + type: object + type: array + - type: object diff --git a/samples/server/petstore/rust-axum/output/apikey-authorization/.openapi-generator/VERSION b/samples/server/petstore/rust-axum/output/apikey-authorization/.openapi-generator/VERSION index 5e5282953086..9e0e9bce84b2 100644 --- a/samples/server/petstore/rust-axum/output/apikey-authorization/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-axum/output/apikey-authorization/.openapi-generator/VERSION @@ -1 +1 @@ -7.16.0-SNAPSHOT +7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/apikey-authorization/README.md b/samples/server/petstore/rust-axum/output/apikey-authorization/README.md index 6acf6afe159e..a548e596e3e9 100644 --- a/samples/server/petstore/rust-axum/output/apikey-authorization/README.md +++ b/samples/server/petstore/rust-axum/output/apikey-authorization/README.md @@ -12,7 +12,7 @@ server, you can easily generate a server stub. To see how to make this your own, look here: [README]((https://openapi-generator.tech)) - API version: 1.0.0 -- Generator version: 7.16.0-SNAPSHOT +- Generator version: 7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/apikey-authorization/src/models.rs b/samples/server/petstore/rust-axum/output/apikey-authorization/src/models.rs index 5d7b8b641a22..9eb40f9cd877 100644 --- a/samples/server/petstore/rust-axum/output/apikey-authorization/src/models.rs +++ b/samples/server/petstore/rust-axum/output/apikey-authorization/src/models.rs @@ -7,6 +7,13 @@ use validator::Validate; use crate::header; use crate::{models, types::*}; +#[allow(dead_code)] +fn from_validation_error(e: validator::ValidationError) -> validator::ValidationErrors { + let mut errs = validator::ValidationErrors::new(); + errs.add("na", e); + errs +} + #[allow(dead_code)] pub fn check_xss_string(v: &str) -> std::result::Result<(), validator::ValidationError> { if ammonia::is_html(v) { diff --git a/samples/server/petstore/rust-axum/output/apikey-authorization/src/server/mod.rs b/samples/server/petstore/rust-axum/output/apikey-authorization/src/server/mod.rs index 876aee9a3abb..5b4646f7a4ae 100644 --- a/samples/server/petstore/rust-axum/output/apikey-authorization/src/server/mod.rs +++ b/samples/server/petstore/rust-axum/output/apikey-authorization/src/server/mod.rs @@ -12,6 +12,12 @@ use crate::{header, types::*}; #[allow(unused_imports)] use crate::{apis, models}; +#[allow(unused_imports)] +use crate::{ + models::check_xss_map, models::check_xss_map_nested, models::check_xss_map_string, + models::check_xss_string, models::check_xss_vec_string, +}; + /// Setup API Server. pub fn new(api_impl: I) -> Router where diff --git a/samples/server/petstore/rust-axum/output/apikey-auths/.openapi-generator/VERSION b/samples/server/petstore/rust-axum/output/apikey-auths/.openapi-generator/VERSION index 5e5282953086..9e0e9bce84b2 100644 --- a/samples/server/petstore/rust-axum/output/apikey-auths/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-axum/output/apikey-auths/.openapi-generator/VERSION @@ -1 +1 @@ -7.16.0-SNAPSHOT +7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/apikey-auths/README.md b/samples/server/petstore/rust-axum/output/apikey-auths/README.md index 373495c2e18b..7a5635e3095b 100644 --- a/samples/server/petstore/rust-axum/output/apikey-auths/README.md +++ b/samples/server/petstore/rust-axum/output/apikey-auths/README.md @@ -12,7 +12,7 @@ server, you can easily generate a server stub. To see how to make this your own, look here: [README]((https://openapi-generator.tech)) - API version: 1.0.0 -- Generator version: 7.16.0-SNAPSHOT +- Generator version: 7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/apikey-auths/src/models.rs b/samples/server/petstore/rust-axum/output/apikey-auths/src/models.rs index 5d7b8b641a22..9eb40f9cd877 100644 --- a/samples/server/petstore/rust-axum/output/apikey-auths/src/models.rs +++ b/samples/server/petstore/rust-axum/output/apikey-auths/src/models.rs @@ -7,6 +7,13 @@ use validator::Validate; use crate::header; use crate::{models, types::*}; +#[allow(dead_code)] +fn from_validation_error(e: validator::ValidationError) -> validator::ValidationErrors { + let mut errs = validator::ValidationErrors::new(); + errs.add("na", e); + errs +} + #[allow(dead_code)] pub fn check_xss_string(v: &str) -> std::result::Result<(), validator::ValidationError> { if ammonia::is_html(v) { diff --git a/samples/server/petstore/rust-axum/output/apikey-auths/src/server/mod.rs b/samples/server/petstore/rust-axum/output/apikey-auths/src/server/mod.rs index 45b533b4450b..95a7473d2eed 100644 --- a/samples/server/petstore/rust-axum/output/apikey-auths/src/server/mod.rs +++ b/samples/server/petstore/rust-axum/output/apikey-auths/src/server/mod.rs @@ -12,6 +12,12 @@ use crate::{header, types::*}; #[allow(unused_imports)] use crate::{apis, models}; +#[allow(unused_imports)] +use crate::{ + models::check_xss_map, models::check_xss_map_nested, models::check_xss_map_string, + models::check_xss_string, models::check_xss_vec_string, +}; + /// Setup API Server. pub fn new(api_impl: I) -> Router where diff --git a/samples/server/petstore/rust-axum/output/multipart-v3/.openapi-generator/VERSION b/samples/server/petstore/rust-axum/output/multipart-v3/.openapi-generator/VERSION index 5e5282953086..9e0e9bce84b2 100644 --- a/samples/server/petstore/rust-axum/output/multipart-v3/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-axum/output/multipart-v3/.openapi-generator/VERSION @@ -1 +1 @@ -7.16.0-SNAPSHOT +7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/multipart-v3/README.md b/samples/server/petstore/rust-axum/output/multipart-v3/README.md index 25fcd41615d4..adc2dfdde37f 100644 --- a/samples/server/petstore/rust-axum/output/multipart-v3/README.md +++ b/samples/server/petstore/rust-axum/output/multipart-v3/README.md @@ -12,7 +12,7 @@ server, you can easily generate a server stub. To see how to make this your own, look here: [README]((https://openapi-generator.tech)) - API version: 1.0.7 -- Generator version: 7.16.0-SNAPSHOT +- Generator version: 7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/multipart-v3/src/models.rs b/samples/server/petstore/rust-axum/output/multipart-v3/src/models.rs index 7b10d2066db3..918f39a7fa37 100644 --- a/samples/server/petstore/rust-axum/output/multipart-v3/src/models.rs +++ b/samples/server/petstore/rust-axum/output/multipart-v3/src/models.rs @@ -7,6 +7,13 @@ use validator::Validate; use crate::header; use crate::{models, types::*}; +#[allow(dead_code)] +fn from_validation_error(e: validator::ValidationError) -> validator::ValidationErrors { + let mut errs = validator::ValidationErrors::new(); + errs.add("na", e); + errs +} + #[allow(dead_code)] pub fn check_xss_string(v: &str) -> std::result::Result<(), validator::ValidationError> { if ammonia::is_html(v) { diff --git a/samples/server/petstore/rust-axum/output/multipart-v3/src/server/mod.rs b/samples/server/petstore/rust-axum/output/multipart-v3/src/server/mod.rs index c052383f748e..c9e2cd2f6124 100644 --- a/samples/server/petstore/rust-axum/output/multipart-v3/src/server/mod.rs +++ b/samples/server/petstore/rust-axum/output/multipart-v3/src/server/mod.rs @@ -12,6 +12,12 @@ use crate::{header, types::*}; #[allow(unused_imports)] use crate::{apis, models}; +#[allow(unused_imports)] +use crate::{ + models::check_xss_map, models::check_xss_map_nested, models::check_xss_map_string, + models::check_xss_string, models::check_xss_vec_string, +}; + /// Setup API Server. pub fn new(api_impl: I) -> Router where diff --git a/samples/server/petstore/rust-axum/output/openapi-v3/.openapi-generator/VERSION b/samples/server/petstore/rust-axum/output/openapi-v3/.openapi-generator/VERSION index 5e5282953086..9e0e9bce84b2 100644 --- a/samples/server/petstore/rust-axum/output/openapi-v3/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-axum/output/openapi-v3/.openapi-generator/VERSION @@ -1 +1 @@ -7.16.0-SNAPSHOT +7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/openapi-v3/README.md b/samples/server/petstore/rust-axum/output/openapi-v3/README.md index d01db91f0244..e687d2f4aa74 100644 --- a/samples/server/petstore/rust-axum/output/openapi-v3/README.md +++ b/samples/server/petstore/rust-axum/output/openapi-v3/README.md @@ -12,7 +12,7 @@ server, you can easily generate a server stub. To see how to make this your own, look here: [README]((https://openapi-generator.tech)) - API version: 1.0.7 -- Generator version: 7.16.0-SNAPSHOT +- Generator version: 7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/openapi-v3/src/models.rs b/samples/server/petstore/rust-axum/output/openapi-v3/src/models.rs index a02749ce055d..488de21a23d4 100644 --- a/samples/server/petstore/rust-axum/output/openapi-v3/src/models.rs +++ b/samples/server/petstore/rust-axum/output/openapi-v3/src/models.rs @@ -7,6 +7,13 @@ use validator::Validate; use crate::header; use crate::{models, types::*}; +#[allow(dead_code)] +fn from_validation_error(e: validator::ValidationError) -> validator::ValidationErrors { + let mut errs = validator::ValidationErrors::new(); + errs.add("na", e); + errs +} + #[allow(dead_code)] pub fn check_xss_string(v: &str) -> std::result::Result<(), validator::ValidationError> { if ammonia::is_html(v) { @@ -171,7 +178,7 @@ pub struct GetRepoInfoPathParams { #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] pub struct AdditionalPropertiesReferencedAnyOfObject( - std::collections::HashMap, + pub std::collections::HashMap, ); impl validator::Validate for AdditionalPropertiesReferencedAnyOfObject { @@ -234,7 +241,7 @@ impl ::std::str::FromStr for AdditionalPropertiesReferencedAnyOfObject { #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct AdditionalPropertiesWithList(std::collections::HashMap>); +pub struct AdditionalPropertiesWithList(pub std::collections::HashMap>); impl validator::Validate for AdditionalPropertiesWithList { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -447,7 +454,7 @@ impl std::convert::TryFrom #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct AnotherXmlArray(Vec); +pub struct AnotherXmlArray(pub Vec); impl validator::Validate for AnotherXmlArray { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -588,7 +595,7 @@ impl std::convert::TryFrom for header::IntoHeaderValue std::result::Result<(), validator::ValidationErrors> { @@ -1232,7 +1239,7 @@ impl std::str::FromStr for EnumWithStarObject { #[derive(Debug, Clone, PartialEq, PartialOrd, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct Err(String); +pub struct Err(pub String); impl validator::Validate for Err { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -1280,7 +1287,7 @@ impl std::ops::DerefMut for Err { #[derive(Debug, Clone, PartialEq, PartialOrd, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct Error(String); +pub struct Error(pub String); impl validator::Validate for Error { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -1634,7 +1641,7 @@ impl std::convert::TryFrom for header::IntoHeaderValue std::result::Result<(), validator::ValidationErrors> { @@ -1669,7 +1676,7 @@ impl std::ops::DerefMut for MyId { #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct MyIdList(Vec); +pub struct MyIdList(pub Vec); impl validator::Validate for MyIdList { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -1810,7 +1817,7 @@ impl std::convert::TryFrom for header::IntoHeaderValue { #[derive(Debug, Clone, PartialEq, PartialOrd, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct NullableObject(String); +pub struct NullableObject(pub String); impl validator::Validate for NullableObject { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -2786,7 +2793,7 @@ impl std::convert::TryFrom for header::IntoHeaderValue std::result::Result<(), validator::ValidationErrors> { @@ -2873,7 +2880,7 @@ impl From> for OneOfGet200Response { #[derive(Debug, Clone, PartialEq, PartialOrd, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct OptionalObjectHeader(i32); +pub struct OptionalObjectHeader(pub i32); impl validator::Validate for OptionalObjectHeader { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -2908,7 +2915,7 @@ impl std::ops::DerefMut for OptionalObjectHeader { #[derive(Debug, Clone, PartialEq, PartialOrd, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct RequiredObjectHeader(bool); +pub struct RequiredObjectHeader(pub bool); impl validator::Validate for RequiredObjectHeader { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -2943,7 +2950,7 @@ impl std::ops::DerefMut for RequiredObjectHeader { #[derive(Debug, Clone, PartialEq, PartialOrd, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct Result(String); +pub struct Result(pub String); impl validator::Validate for Result { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -3034,7 +3041,7 @@ impl std::str::FromStr for StringEnum { #[derive(Debug, Clone, PartialEq, PartialOrd, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct StringObject(String); +pub struct StringObject(pub String); impl validator::Validate for StringObject { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -3083,7 +3090,7 @@ impl std::ops::DerefMut for StringObject { /// Test a model containing a UUID #[derive(Debug, Clone, PartialEq, PartialOrd, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct UuidObject(uuid::Uuid); +pub struct UuidObject(pub uuid::Uuid); impl validator::Validate for UuidObject { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -3118,7 +3125,7 @@ impl std::ops::DerefMut for UuidObject { #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct XmlArray(Vec); +pub struct XmlArray(pub Vec); impl validator::Validate for XmlArray { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -3259,7 +3266,7 @@ impl std::convert::TryFrom for header::IntoHeaderValue { #[derive(Debug, Clone, PartialEq, PartialOrd, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct XmlInner(String); +pub struct XmlInner(pub String); impl validator::Validate for XmlInner { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { diff --git a/samples/server/petstore/rust-axum/output/openapi-v3/src/server/mod.rs b/samples/server/petstore/rust-axum/output/openapi-v3/src/server/mod.rs index 0273bbe4ca35..19a75e4603aa 100644 --- a/samples/server/petstore/rust-axum/output/openapi-v3/src/server/mod.rs +++ b/samples/server/petstore/rust-axum/output/openapi-v3/src/server/mod.rs @@ -12,6 +12,12 @@ use crate::{header, types::*}; #[allow(unused_imports)] use crate::{apis, models}; +#[allow(unused_imports)] +use crate::{ + models::check_xss_map, models::check_xss_map_nested, models::check_xss_map_string, + models::check_xss_string, models::check_xss_vec_string, +}; + /// Setup API Server. pub fn new(api_impl: I) -> Router where diff --git a/samples/server/petstore/rust-axum/output/ops-v3/.openapi-generator/VERSION b/samples/server/petstore/rust-axum/output/ops-v3/.openapi-generator/VERSION index 5e5282953086..9e0e9bce84b2 100644 --- a/samples/server/petstore/rust-axum/output/ops-v3/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-axum/output/ops-v3/.openapi-generator/VERSION @@ -1 +1 @@ -7.16.0-SNAPSHOT +7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/ops-v3/README.md b/samples/server/petstore/rust-axum/output/ops-v3/README.md index 79bbb55e5b98..b71ac1a6c8ca 100644 --- a/samples/server/petstore/rust-axum/output/ops-v3/README.md +++ b/samples/server/petstore/rust-axum/output/ops-v3/README.md @@ -12,7 +12,7 @@ server, you can easily generate a server stub. To see how to make this your own, look here: [README]((https://openapi-generator.tech)) - API version: 0.0.1 -- Generator version: 7.16.0-SNAPSHOT +- Generator version: 7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/ops-v3/src/models.rs b/samples/server/petstore/rust-axum/output/ops-v3/src/models.rs index 7d30ad9f64c3..70fa12a8ed93 100644 --- a/samples/server/petstore/rust-axum/output/ops-v3/src/models.rs +++ b/samples/server/petstore/rust-axum/output/ops-v3/src/models.rs @@ -7,6 +7,13 @@ use validator::Validate; use crate::header; use crate::{models, types::*}; +#[allow(dead_code)] +fn from_validation_error(e: validator::ValidationError) -> validator::ValidationErrors { + let mut errs = validator::ValidationErrors::new(); + errs.add("na", e); + errs +} + #[allow(dead_code)] pub fn check_xss_string(v: &str) -> std::result::Result<(), validator::ValidationError> { if ammonia::is_html(v) { diff --git a/samples/server/petstore/rust-axum/output/ops-v3/src/server/mod.rs b/samples/server/petstore/rust-axum/output/ops-v3/src/server/mod.rs index fb006693d67f..b3d5e1f0491f 100644 --- a/samples/server/petstore/rust-axum/output/ops-v3/src/server/mod.rs +++ b/samples/server/petstore/rust-axum/output/ops-v3/src/server/mod.rs @@ -12,6 +12,12 @@ use crate::{header, types::*}; #[allow(unused_imports)] use crate::{apis, models}; +#[allow(unused_imports)] +use crate::{ + models::check_xss_map, models::check_xss_map_nested, models::check_xss_map_string, + models::check_xss_string, models::check_xss_vec_string, +}; + /// Setup API Server. pub fn new(api_impl: I) -> Router where diff --git a/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION b/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION index 5e5282953086..9e0e9bce84b2 100644 --- a/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION @@ -1 +1 @@ -7.16.0-SNAPSHOT +7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/README.md b/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/README.md index e23826c249ce..bb183147dc25 100644 --- a/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/README.md +++ b/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/README.md @@ -12,7 +12,7 @@ server, you can easily generate a server stub. To see how to make this your own, look here: [README]((https://openapi-generator.tech)) - API version: 1.0.0 -- Generator version: 7.16.0-SNAPSHOT +- Generator version: 7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/src/models.rs b/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/src/models.rs index bb81873332e9..31bf9954fdbd 100644 --- a/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/src/models.rs +++ b/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/src/models.rs @@ -7,6 +7,13 @@ use validator::Validate; use crate::header; use crate::{models, types::*}; +#[allow(dead_code)] +fn from_validation_error(e: validator::ValidationError) -> validator::ValidationErrors { + let mut errs = validator::ValidationErrors::new(); + errs.add("na", e); + errs +} + #[allow(dead_code)] pub fn check_xss_string(v: &str) -> std::result::Result<(), validator::ValidationError> { if ammonia::is_html(v) { @@ -515,7 +522,7 @@ impl std::convert::TryFrom for header::IntoHeaderValue { #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct AnimalFarm(Vec); +pub struct AnimalFarm(pub Vec); impl validator::Validate for AnimalFarm { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -4340,7 +4347,7 @@ impl std::convert::TryFrom #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct ObjectWithOnlyAdditionalProperties(std::collections::HashMap); +pub struct ObjectWithOnlyAdditionalProperties(pub std::collections::HashMap); impl validator::Validate for ObjectWithOnlyAdditionalProperties { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -4606,7 +4613,7 @@ impl std::convert::TryFrom for header::IntoHeaderValue { #[derive(Debug, Clone, PartialEq, PartialOrd, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct OuterBoolean(bool); +pub struct OuterBoolean(pub bool); impl validator::Validate for OuterBoolean { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -4851,7 +4858,7 @@ impl std::str::FromStr for OuterEnum { #[derive(Debug, Clone, PartialEq, PartialOrd, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct OuterNumber(f64); +pub struct OuterNumber(pub f64); impl validator::Validate for OuterNumber { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { @@ -4886,7 +4893,7 @@ impl std::ops::DerefMut for OuterNumber { #[derive(Debug, Clone, PartialEq, PartialOrd, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct OuterString(String); +pub struct OuterString(pub String); impl validator::Validate for OuterString { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { diff --git a/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/src/server/mod.rs b/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/src/server/mod.rs index 18ac8a328821..2ea0e7abe474 100644 --- a/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/src/server/mod.rs +++ b/samples/server/petstore/rust-axum/output/petstore-with-fake-endpoints-models-for-testing/src/server/mod.rs @@ -12,6 +12,12 @@ use crate::{header, types::*}; #[allow(unused_imports)] use crate::{apis, models}; +#[allow(unused_imports)] +use crate::{ + models::check_xss_map, models::check_xss_map_nested, models::check_xss_map_string, + models::check_xss_string, models::check_xss_vec_string, +}; + /// Setup API Server. pub fn new(api_impl: I) -> Router where @@ -1152,6 +1158,7 @@ where #[derive(validator::Validate)] #[allow(dead_code)] struct TestInlineAdditionalPropertiesBodyValidator<'a> { + #[validate(custom(function = "check_xss_map_string"))] body: &'a std::collections::HashMap, } diff --git a/samples/server/petstore/rust-axum/output/petstore/.openapi-generator/VERSION b/samples/server/petstore/rust-axum/output/petstore/.openapi-generator/VERSION index 5e5282953086..9e0e9bce84b2 100644 --- a/samples/server/petstore/rust-axum/output/petstore/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-axum/output/petstore/.openapi-generator/VERSION @@ -1 +1 @@ -7.16.0-SNAPSHOT +7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/petstore/README.md b/samples/server/petstore/rust-axum/output/petstore/README.md index cc6bd02a32bf..707a96f79780 100644 --- a/samples/server/petstore/rust-axum/output/petstore/README.md +++ b/samples/server/petstore/rust-axum/output/petstore/README.md @@ -12,7 +12,7 @@ server, you can easily generate a server stub. To see how to make this your own, look here: [README]((https://openapi-generator.tech)) - API version: 1.0.0 -- Generator version: 7.16.0-SNAPSHOT +- Generator version: 7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/petstore/src/models.rs b/samples/server/petstore/rust-axum/output/petstore/src/models.rs index 9db0d59cbfa3..9717184d9969 100644 --- a/samples/server/petstore/rust-axum/output/petstore/src/models.rs +++ b/samples/server/petstore/rust-axum/output/petstore/src/models.rs @@ -7,6 +7,13 @@ use validator::Validate; use crate::header; use crate::{models, types::*}; +#[allow(dead_code)] +fn from_validation_error(e: validator::ValidationError) -> validator::ValidationErrors { + let mut errs = validator::ValidationErrors::new(); + errs.add("na", e); + errs +} + #[allow(dead_code)] pub fn check_xss_string(v: &str) -> std::result::Result<(), validator::ValidationError> { if ammonia::is_html(v) { diff --git a/samples/server/petstore/rust-axum/output/petstore/src/server/mod.rs b/samples/server/petstore/rust-axum/output/petstore/src/server/mod.rs index cd65b69be6a1..90091c58f5f9 100644 --- a/samples/server/petstore/rust-axum/output/petstore/src/server/mod.rs +++ b/samples/server/petstore/rust-axum/output/petstore/src/server/mod.rs @@ -12,6 +12,12 @@ use crate::{header, types::*}; #[allow(unused_imports)] use crate::{apis, models}; +#[allow(unused_imports)] +use crate::{ + models::check_xss_map, models::check_xss_map_nested, models::check_xss_map_string, + models::check_xss_string, models::check_xss_vec_string, +}; + /// Setup API Server. pub fn new(api_impl: I) -> Router where diff --git a/samples/server/petstore/rust-axum/output/ping-bearer-auth/.openapi-generator/VERSION b/samples/server/petstore/rust-axum/output/ping-bearer-auth/.openapi-generator/VERSION index 5e5282953086..9e0e9bce84b2 100644 --- a/samples/server/petstore/rust-axum/output/ping-bearer-auth/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-axum/output/ping-bearer-auth/.openapi-generator/VERSION @@ -1 +1 @@ -7.16.0-SNAPSHOT +7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/ping-bearer-auth/README.md b/samples/server/petstore/rust-axum/output/ping-bearer-auth/README.md index c713cda26bc5..c8f6452650ea 100644 --- a/samples/server/petstore/rust-axum/output/ping-bearer-auth/README.md +++ b/samples/server/petstore/rust-axum/output/ping-bearer-auth/README.md @@ -12,7 +12,7 @@ server, you can easily generate a server stub. To see how to make this your own, look here: [README]((https://openapi-generator.tech)) - API version: 1.0 -- Generator version: 7.16.0-SNAPSHOT +- Generator version: 7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/ping-bearer-auth/src/models.rs b/samples/server/petstore/rust-axum/output/ping-bearer-auth/src/models.rs index 7d30ad9f64c3..70fa12a8ed93 100644 --- a/samples/server/petstore/rust-axum/output/ping-bearer-auth/src/models.rs +++ b/samples/server/petstore/rust-axum/output/ping-bearer-auth/src/models.rs @@ -7,6 +7,13 @@ use validator::Validate; use crate::header; use crate::{models, types::*}; +#[allow(dead_code)] +fn from_validation_error(e: validator::ValidationError) -> validator::ValidationErrors { + let mut errs = validator::ValidationErrors::new(); + errs.add("na", e); + errs +} + #[allow(dead_code)] pub fn check_xss_string(v: &str) -> std::result::Result<(), validator::ValidationError> { if ammonia::is_html(v) { diff --git a/samples/server/petstore/rust-axum/output/ping-bearer-auth/src/server/mod.rs b/samples/server/petstore/rust-axum/output/ping-bearer-auth/src/server/mod.rs index 164176b0f409..d9847c001d41 100644 --- a/samples/server/petstore/rust-axum/output/ping-bearer-auth/src/server/mod.rs +++ b/samples/server/petstore/rust-axum/output/ping-bearer-auth/src/server/mod.rs @@ -12,6 +12,12 @@ use crate::{header, types::*}; #[allow(unused_imports)] use crate::{apis, models}; +#[allow(unused_imports)] +use crate::{ + models::check_xss_map, models::check_xss_map_nested, models::check_xss_map_string, + models::check_xss_string, models::check_xss_vec_string, +}; + /// Setup API Server. pub fn new(api_impl: I) -> Router where diff --git a/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/.openapi-generator/VERSION b/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/.openapi-generator/VERSION index 5e5282953086..9e0e9bce84b2 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/.openapi-generator/VERSION @@ -1 +1 @@ -7.16.0-SNAPSHOT +7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/README.md b/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/README.md index b1daa56d2986..6e2df5207183 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/README.md +++ b/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/README.md @@ -12,7 +12,7 @@ server, you can easily generate a server stub. To see how to make this your own, look here: [README]((https://openapi-generator.tech)) - API version: 0.0.1 -- Generator version: 7.16.0-SNAPSHOT +- Generator version: 7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/src/models.rs b/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/src/models.rs index 70e9eed4f54a..c89e194cc6c0 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/src/models.rs +++ b/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/src/models.rs @@ -7,6 +7,13 @@ use validator::Validate; use crate::header; use crate::{models, types::*}; +#[allow(dead_code)] +fn from_validation_error(e: validator::ValidationError) -> validator::ValidationErrors { + let mut errs = validator::ValidationErrors::new(); + errs.add("na", e); + errs +} + #[allow(dead_code)] pub fn check_xss_string(v: &str) -> std::result::Result<(), validator::ValidationError> { if ammonia::is_html(v) { diff --git a/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/src/server/mod.rs b/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/src/server/mod.rs index 529c8e0a5fce..3c9a5c50ce19 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/src/server/mod.rs +++ b/samples/server/petstore/rust-axum/output/rust-axum-array-params-test/src/server/mod.rs @@ -12,6 +12,12 @@ use crate::{header, types::*}; #[allow(unused_imports)] use crate::{apis, models}; +#[allow(unused_imports)] +use crate::{ + models::check_xss_map, models::check_xss_map_nested, models::check_xss_map_string, + models::check_xss_string, models::check_xss_vec_string, +}; + /// Setup API Server. pub fn new(api_impl: I) -> Router where diff --git a/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/.openapi-generator/VERSION b/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/.openapi-generator/VERSION index 5e5282953086..9e0e9bce84b2 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/.openapi-generator/VERSION @@ -1 +1 @@ -7.16.0-SNAPSHOT +7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/README.md b/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/README.md index 6cf3c91bbfe6..d4b877b8ff7d 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/README.md +++ b/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/README.md @@ -12,7 +12,7 @@ server, you can easily generate a server stub. To see how to make this your own, look here: [README]((https://openapi-generator.tech)) - API version: 0.1.9 -- Generator version: 7.16.0-SNAPSHOT +- Generator version: 7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/src/models.rs b/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/src/models.rs index 0375e2ac2109..6eec2068e67c 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/src/models.rs +++ b/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/src/models.rs @@ -7,6 +7,13 @@ use validator::Validate; use crate::header; use crate::{models, types::*}; +#[allow(dead_code)] +fn from_validation_error(e: validator::ValidationError) -> validator::ValidationErrors { + let mut errs = validator::ValidationErrors::new(); + errs.add("na", e); + errs +} + #[allow(dead_code)] pub fn check_xss_string(v: &str) -> std::result::Result<(), validator::ValidationError> { if ammonia::is_html(v) { @@ -69,7 +76,7 @@ pub struct UsersPostHeaderParams { #[derive(Debug, Clone, PartialEq, PartialOrd, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct HeaderUuid(uuid::Uuid); +pub struct HeaderUuid(pub uuid::Uuid); impl validator::Validate for HeaderUuid { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { diff --git a/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/src/server/mod.rs b/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/src/server/mod.rs index 91e28a249687..bba91c17c5b8 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/src/server/mod.rs +++ b/samples/server/petstore/rust-axum/output/rust-axum-header-uuid/src/server/mod.rs @@ -12,6 +12,12 @@ use crate::{header, types::*}; #[allow(unused_imports)] use crate::{apis, models}; +#[allow(unused_imports)] +use crate::{ + models::check_xss_map, models::check_xss_map_nested, models::check_xss_map_string, + models::check_xss_string, models::check_xss_vec_string, +}; + /// Setup API Server. pub fn new(api_impl: I) -> Router where diff --git a/samples/server/petstore/rust-axum/output/rust-axum-oneof/.openapi-generator/VERSION b/samples/server/petstore/rust-axum/output/rust-axum-oneof/.openapi-generator/VERSION index 5e5282953086..9e0e9bce84b2 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-oneof/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-axum/output/rust-axum-oneof/.openapi-generator/VERSION @@ -1 +1 @@ -7.16.0-SNAPSHOT +7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/rust-axum-oneof/README.md b/samples/server/petstore/rust-axum/output/rust-axum-oneof/README.md index fbd4443d7366..8a7f519d2001 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-oneof/README.md +++ b/samples/server/petstore/rust-axum/output/rust-axum-oneof/README.md @@ -12,7 +12,7 @@ server, you can easily generate a server stub. To see how to make this your own, look here: [README]((https://openapi-generator.tech)) - API version: 0.0.1 -- Generator version: 7.16.0-SNAPSHOT +- Generator version: 7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/rust-axum-oneof/src/apis/default.rs b/samples/server/petstore/rust-axum/output/rust-axum-oneof/src/apis/default.rs index 7f9dff64a5bd..bb5318a667dc 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-oneof/src/apis/default.rs +++ b/samples/server/petstore/rust-axum/output/rust-axum-oneof/src/apis/default.rs @@ -15,6 +15,30 @@ pub enum FooResponse { Status200_Re(models::Message), } +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[must_use] +#[allow(clippy::large_enum_variant)] +pub enum I211431Response { + /// Re-serialize and echo the request data + Status200_Re(models::Message), +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[must_use] +#[allow(clippy::large_enum_variant)] +pub enum I211432Response { + /// Re-serialize and echo the request data + Status200_Re(models::Message), +} + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[must_use] +#[allow(clippy::large_enum_variant)] +pub enum I211433Response { + /// Re-serialize and echo the request data + Status200_Re(models::Message), +} + /// Default #[async_trait] #[allow(clippy::ptr_arg)] @@ -28,4 +52,34 @@ pub trait Default: super::Error cookies: &CookieJar, body: &models::Message, ) -> Result; + + /// I211431 - POST /issue21143_1 + async fn i211431( + &self, + + method: &Method, + host: &Host, + cookies: &CookieJar, + body: &Vec, + ) -> Result; + + /// I211432 - POST /issue21143_2 + async fn i211432( + &self, + + method: &Method, + host: &Host, + cookies: &CookieJar, + body: &String, + ) -> Result; + + /// I211433 - POST /issue21143_3 + async fn i211433( + &self, + + method: &Method, + host: &Host, + cookies: &CookieJar, + body: &i32, + ) -> Result; } diff --git a/samples/server/petstore/rust-axum/output/rust-axum-oneof/src/models.rs b/samples/server/petstore/rust-axum/output/rust-axum-oneof/src/models.rs index 44ad498d4e2e..7a4c207040cb 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-oneof/src/models.rs +++ b/samples/server/petstore/rust-axum/output/rust-axum-oneof/src/models.rs @@ -7,6 +7,13 @@ use validator::Validate; use crate::header; use crate::{models, types::*}; +#[allow(dead_code)] +fn from_validation_error(e: validator::ValidationError) -> validator::ValidationErrors { + let mut errs = validator::ValidationErrors::new(); + errs.add("na", e); + errs +} + #[allow(dead_code)] pub fn check_xss_string(v: &str) -> std::result::Result<(), validator::ValidationError> { if ammonia::is_html(v) { diff --git a/samples/server/petstore/rust-axum/output/rust-axum-oneof/src/server/mod.rs b/samples/server/petstore/rust-axum/output/rust-axum-oneof/src/server/mod.rs index d65aaeb76aaf..25a2d493f74f 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-oneof/src/server/mod.rs +++ b/samples/server/petstore/rust-axum/output/rust-axum-oneof/src/server/mod.rs @@ -12,6 +12,12 @@ use crate::{header, types::*}; #[allow(unused_imports)] use crate::{apis, models}; +#[allow(unused_imports)] +use crate::{ + models::check_xss_map, models::check_xss_map_nested, models::check_xss_map_string, + models::check_xss_string, models::check_xss_vec_string, +}; + /// Setup API Server. pub fn new(api_impl: I) -> Router where @@ -22,6 +28,9 @@ where // build our application with a route Router::new() .route("/", post(foo::)) + .route("/issue21143_1", post(i211431::)) + .route("/issue21143_2", post(i211432::)) + .route("/issue21143_3", post(i211433::)) .with_state(api_impl) } @@ -108,6 +117,256 @@ where }) } +#[derive(validator::Validate)] +#[allow(dead_code)] +struct I211431BodyValidator<'a> { + body: &'a Vec, +} + +#[tracing::instrument(skip_all)] +fn i211431_validation(body: Vec) -> std::result::Result<(Vec,), ValidationErrors> { + let b = I211431BodyValidator { body: &body }; + b.validate()?; + + Ok((body,)) +} +/// I211431 - POST /issue21143_1 +#[tracing::instrument(skip_all)] +async fn i211431( + method: Method, + host: Host, + cookies: CookieJar, + State(api_impl): State, + Json(body): Json>, +) -> Result +where + I: AsRef + Send + Sync, + A: apis::default::Default + Send + Sync, + E: std::fmt::Debug + Send + Sync + 'static, +{ + #[allow(clippy::redundant_closure)] + let validation = tokio::task::spawn_blocking(move || i211431_validation(body)) + .await + .unwrap(); + + let Ok((body,)) = validation else { + return Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from(validation.unwrap_err().to_string())) + .map_err(|_| StatusCode::BAD_REQUEST); + }; + + let result = api_impl + .as_ref() + .i211431(&method, &host, &cookies, &body) + .await; + + let mut response = Response::builder(); + + let resp = match result { + Ok(rsp) => match rsp { + apis::default::I211431Response::Status200_Re(body) => { + let mut response = response.status(200); + { + let mut response_headers = response.headers_mut().unwrap(); + response_headers + .insert(CONTENT_TYPE, HeaderValue::from_static("application/json")); + } + + let body_content = tokio::task::spawn_blocking(move || { + serde_json::to_vec(&body).map_err(|e| { + error!(error = ?e); + StatusCode::INTERNAL_SERVER_ERROR + }) + }) + .await + .unwrap()?; + response.body(Body::from(body_content)) + } + }, + Err(why) => { + // Application code returned an error. This should not happen, as the implementation should + // return a valid response. + return api_impl + .as_ref() + .handle_error(&method, &host, &cookies, why) + .await; + } + }; + + resp.map_err(|e| { + error!(error = ?e); + StatusCode::INTERNAL_SERVER_ERROR + }) +} + +#[derive(validator::Validate)] +#[allow(dead_code)] +struct I211432BodyValidator<'a> { + #[validate(custom(function = "check_xss_string"))] + body: &'a String, +} + +#[tracing::instrument(skip_all)] +fn i211432_validation(body: String) -> std::result::Result<(String,), ValidationErrors> { + let b = I211432BodyValidator { body: &body }; + b.validate()?; + + Ok((body,)) +} +/// I211432 - POST /issue21143_2 +#[tracing::instrument(skip_all)] +async fn i211432( + method: Method, + host: Host, + cookies: CookieJar, + State(api_impl): State, + Json(body): Json, +) -> Result +where + I: AsRef + Send + Sync, + A: apis::default::Default + Send + Sync, + E: std::fmt::Debug + Send + Sync + 'static, +{ + #[allow(clippy::redundant_closure)] + let validation = tokio::task::spawn_blocking(move || i211432_validation(body)) + .await + .unwrap(); + + let Ok((body,)) = validation else { + return Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from(validation.unwrap_err().to_string())) + .map_err(|_| StatusCode::BAD_REQUEST); + }; + + let result = api_impl + .as_ref() + .i211432(&method, &host, &cookies, &body) + .await; + + let mut response = Response::builder(); + + let resp = match result { + Ok(rsp) => match rsp { + apis::default::I211432Response::Status200_Re(body) => { + let mut response = response.status(200); + { + let mut response_headers = response.headers_mut().unwrap(); + response_headers + .insert(CONTENT_TYPE, HeaderValue::from_static("application/json")); + } + + let body_content = tokio::task::spawn_blocking(move || { + serde_json::to_vec(&body).map_err(|e| { + error!(error = ?e); + StatusCode::INTERNAL_SERVER_ERROR + }) + }) + .await + .unwrap()?; + response.body(Body::from(body_content)) + } + }, + Err(why) => { + // Application code returned an error. This should not happen, as the implementation should + // return a valid response. + return api_impl + .as_ref() + .handle_error(&method, &host, &cookies, why) + .await; + } + }; + + resp.map_err(|e| { + error!(error = ?e); + StatusCode::INTERNAL_SERVER_ERROR + }) +} + +#[derive(validator::Validate)] +#[allow(dead_code)] +struct I211433BodyValidator<'a> { + body: &'a i32, +} + +#[tracing::instrument(skip_all)] +fn i211433_validation(body: i32) -> std::result::Result<(i32,), ValidationErrors> { + let b = I211433BodyValidator { body: &body }; + b.validate()?; + + Ok((body,)) +} +/// I211433 - POST /issue21143_3 +#[tracing::instrument(skip_all)] +async fn i211433( + method: Method, + host: Host, + cookies: CookieJar, + State(api_impl): State, + Json(body): Json, +) -> Result +where + I: AsRef + Send + Sync, + A: apis::default::Default + Send + Sync, + E: std::fmt::Debug + Send + Sync + 'static, +{ + #[allow(clippy::redundant_closure)] + let validation = tokio::task::spawn_blocking(move || i211433_validation(body)) + .await + .unwrap(); + + let Ok((body,)) = validation else { + return Response::builder() + .status(StatusCode::BAD_REQUEST) + .body(Body::from(validation.unwrap_err().to_string())) + .map_err(|_| StatusCode::BAD_REQUEST); + }; + + let result = api_impl + .as_ref() + .i211433(&method, &host, &cookies, &body) + .await; + + let mut response = Response::builder(); + + let resp = match result { + Ok(rsp) => match rsp { + apis::default::I211433Response::Status200_Re(body) => { + let mut response = response.status(200); + { + let mut response_headers = response.headers_mut().unwrap(); + response_headers + .insert(CONTENT_TYPE, HeaderValue::from_static("application/json")); + } + + let body_content = tokio::task::spawn_blocking(move || { + serde_json::to_vec(&body).map_err(|e| { + error!(error = ?e); + StatusCode::INTERNAL_SERVER_ERROR + }) + }) + .await + .unwrap()?; + response.body(Body::from(body_content)) + } + }, + Err(why) => { + // Application code returned an error. This should not happen, as the implementation should + // return a valid response. + return api_impl + .as_ref() + .handle_error(&method, &host, &cookies, why) + .await; + } + }; + + resp.map_err(|e| { + error!(error = ?e); + StatusCode::INTERNAL_SERVER_ERROR + }) +} + #[allow(dead_code)] #[inline] fn response_with_status_code_only(code: StatusCode) -> Result { diff --git a/samples/server/petstore/rust-axum/output/rust-axum-test/.openapi-generator/VERSION b/samples/server/petstore/rust-axum/output/rust-axum-test/.openapi-generator/VERSION index 5e5282953086..9e0e9bce84b2 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-test/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-axum/output/rust-axum-test/.openapi-generator/VERSION @@ -1 +1 @@ -7.16.0-SNAPSHOT +7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/rust-axum-test/README.md b/samples/server/petstore/rust-axum/output/rust-axum-test/README.md index f0f4d6f5b6a1..beff24b3654d 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-test/README.md +++ b/samples/server/petstore/rust-axum/output/rust-axum-test/README.md @@ -12,7 +12,7 @@ server, you can easily generate a server stub. To see how to make this your own, look here: [README]((https://openapi-generator.tech)) - API version: 2.3.4 -- Generator version: 7.16.0-SNAPSHOT +- Generator version: 7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/rust-axum-test/src/models.rs b/samples/server/petstore/rust-axum/output/rust-axum-test/src/models.rs index 1d09683c0009..af882b9fd96c 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-test/src/models.rs +++ b/samples/server/petstore/rust-axum/output/rust-axum-test/src/models.rs @@ -7,6 +7,13 @@ use validator::Validate; use crate::header; use crate::{models, types::*}; +#[allow(dead_code)] +fn from_validation_error(e: validator::ValidationError) -> validator::ValidationErrors { + let mut errs = validator::ValidationErrors::new(); + errs.add("na", e); + errs +} + #[allow(dead_code)] pub fn check_xss_string(v: &str) -> std::result::Result<(), validator::ValidationError> { if ammonia::is_html(v) { @@ -216,7 +223,7 @@ impl std::convert::TryFrom for header::IntoHeaderValue); +pub struct FooAdditionalPropertiesObject(pub std::collections::HashMap); impl validator::Validate for FooAdditionalPropertiesObject { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { diff --git a/samples/server/petstore/rust-axum/output/rust-axum-test/src/server/mod.rs b/samples/server/petstore/rust-axum/output/rust-axum-test/src/server/mod.rs index b0be9c78af8f..ecb9f0e235af 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-test/src/server/mod.rs +++ b/samples/server/petstore/rust-axum/output/rust-axum-test/src/server/mod.rs @@ -12,6 +12,12 @@ use crate::{header, types::*}; #[allow(unused_imports)] use crate::{apis, models}; +#[allow(unused_imports)] +use crate::{ + models::check_xss_map, models::check_xss_map_nested, models::check_xss_map_string, + models::check_xss_string, models::check_xss_vec_string, +}; + /// Setup API Server. pub fn new(api_impl: I) -> Router where @@ -374,6 +380,7 @@ where #[derive(validator::Validate)] #[allow(dead_code)] struct HtmlPostBodyValidator<'a> { + #[validate(custom(function = "check_xss_string"))] body: &'a String, } @@ -446,6 +453,7 @@ where #[derive(validator::Validate)] #[allow(dead_code)] struct PostYamlBodyValidator<'a> { + #[validate(custom(function = "check_xss_string"))] body: &'a String, } diff --git a/samples/server/petstore/rust-axum/output/rust-axum-validation-test/.openapi-generator/VERSION b/samples/server/petstore/rust-axum/output/rust-axum-validation-test/.openapi-generator/VERSION index 5e5282953086..9e0e9bce84b2 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-validation-test/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-axum/output/rust-axum-validation-test/.openapi-generator/VERSION @@ -1 +1 @@ -7.16.0-SNAPSHOT +7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/rust-axum-validation-test/README.md b/samples/server/petstore/rust-axum/output/rust-axum-validation-test/README.md index b2888b49b37b..65d42f5020a3 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-validation-test/README.md +++ b/samples/server/petstore/rust-axum/output/rust-axum-validation-test/README.md @@ -12,7 +12,7 @@ server, you can easily generate a server stub. To see how to make this your own, look here: [README]((https://openapi-generator.tech)) - API version: 0.0.1 -- Generator version: 7.16.0-SNAPSHOT +- Generator version: 7.17.0-SNAPSHOT diff --git a/samples/server/petstore/rust-axum/output/rust-axum-validation-test/src/models.rs b/samples/server/petstore/rust-axum/output/rust-axum-validation-test/src/models.rs index 224c792d0658..a26c186e5743 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-validation-test/src/models.rs +++ b/samples/server/petstore/rust-axum/output/rust-axum-validation-test/src/models.rs @@ -7,6 +7,13 @@ use validator::Validate; use crate::header; use crate::{models, types::*}; +#[allow(dead_code)] +fn from_validation_error(e: validator::ValidationError) -> validator::ValidationErrors { + let mut errs = validator::ValidationErrors::new(); + errs.add("na", e); + errs +} + #[allow(dead_code)] pub fn check_xss_string(v: &str) -> std::result::Result<(), validator::ValidationError> { if ammonia::is_html(v) { @@ -63,7 +70,7 @@ pub fn check_xss_map( #[derive(Debug, Clone, PartialEq, PartialOrd, serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "conversion", derive(frunk::LabelledGeneric))] -pub struct Email(String); +pub struct Email(pub String); impl validator::Validate for Email { fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> { diff --git a/samples/server/petstore/rust-axum/output/rust-axum-validation-test/src/server/mod.rs b/samples/server/petstore/rust-axum/output/rust-axum-validation-test/src/server/mod.rs index c132fc8c9cb5..93192f93b20d 100644 --- a/samples/server/petstore/rust-axum/output/rust-axum-validation-test/src/server/mod.rs +++ b/samples/server/petstore/rust-axum/output/rust-axum-validation-test/src/server/mod.rs @@ -12,6 +12,12 @@ use crate::{header, types::*}; #[allow(unused_imports)] use crate::{apis, models}; +#[allow(unused_imports)] +use crate::{ + models::check_xss_map, models::check_xss_map_nested, models::check_xss_map_string, + models::check_xss_string, models::check_xss_vec_string, +}; + /// Setup API Server. pub fn new(api_impl: I) -> Router where