@@ -524,7 +524,7 @@ pub fn check_xss_map<T>(v: &std::collections::HashMap<String, T>) -> std::result
524
524
/// Enumeration of values.
525
525
/// Since this enum's variants do not hold data, we can easily define them as `#[repr(C)]`
526
526
/// which helps with FFI.
527
- #[allow(non_camel_case_types)]
527
+ #[allow(non_camel_case_types, clippy::large_enum_variant )]
528
528
#[repr(C)]
529
529
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize)]
530
530
#[cfg_attr(feature = "conversion", derive(frunk_enum_derive::LabelledGenericEnum))]
@@ -751,17 +751,38 @@ impl std::str::FromStr for {{{classname}}} {
751
751
{{^arrayModelType}}
752
752
{{! general struct}}
753
753
{{#anyOf.size}}
754
- /// Any of:
755
- {{#anyOf}}
756
- /// - {{{.}}}
757
- {{/anyOf}}
758
- #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
759
- pub struct {{{classname}}}(Box<serde_json::value::RawValue>);
754
+ {{#discriminator}}
755
+ #[derive(Debug, Clone, PartialEq, serde::Deserialize)]
756
+ #[serde(tag = "{{{propertyBaseName}}}")]
757
+ {{/discriminator}}
758
+ {{^discriminator}}
759
+ #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
760
+ #[serde(untagged)]
761
+ {{/discriminator}}
762
+ #[allow(non_camel_case_types, clippy::large_enum_variant)]
763
+ pub enum {{{classname}}} {
764
+ {{#composedSchemas}}
765
+ {{#anyOf}}
766
+ {{{datatypeWithEnum}}}({{{dataType}}}),
767
+ {{/anyOf}}
768
+ {{/composedSchemas}}
769
+ }
760
770
761
771
impl validator::Validate for {{{classname}}}
762
772
{
763
773
fn validate(&self) -> std::result::Result<(), validator::ValidationErrors> {
764
- std::result::Result::Ok(())
774
+ match self {
775
+ {{#composedSchemas}}
776
+ {{#anyOf}}
777
+ {{^isModel}}
778
+ Self::{{{datatypeWithEnum}}}(_) => std::result::Result::Ok(()),
779
+ {{/isModel}}
780
+ {{#isModel}}
781
+ Self::{{{datatypeWithEnum}}}(v) => v.validate(),
782
+ {{/isModel}}
783
+ {{/anyOf}}
784
+ {{/composedSchemas}}
785
+ }
765
786
}
766
787
}
767
788
@@ -776,11 +797,32 @@ impl std::str::FromStr for {{{classname}}} {
776
797
}
777
798
}
778
799
779
- impl PartialEq for {{{classname}}} {
780
- fn eq(&self, other: &Self) -> bool {
781
- self.0.get() == other.0.get()
800
+ {{#discriminator}}
801
+ impl serde::Serialize for {{{classname}}} {
802
+ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
803
+ where S: serde::Serializer {
804
+ match self {
805
+ {{#composedSchemas}}
806
+ {{#anyOf}}
807
+ Self::{{{datatypeWithEnum}}}(x) => x.serialize(serializer),
808
+ {{/anyOf}}
809
+ {{/composedSchemas}}
810
+ }
811
+ }
812
+ }
813
+ {{/discriminator}}
814
+
815
+ {{#composedSchemas}}
816
+ {{#anyOf}}
817
+ {{#vendorExtensions.x-from-trait}}
818
+ impl From<{{{dataType}}}> for {{{classname}}} {
819
+ fn from(value: {{{dataType}}}) -> Self {
820
+ Self::{{{datatypeWithEnum}}}(value)
782
821
}
783
822
}
823
+ {{/vendorExtensions.x-from-trait}}
824
+ {{/anyOf}}
825
+ {{/composedSchemas}}
784
826
785
827
{{/anyOf.size}}
786
828
{{#oneOf.size}}
@@ -792,11 +834,11 @@ impl PartialEq for {{{classname}}} {
792
834
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
793
835
#[serde(untagged)]
794
836
{{/discriminator}}
795
- #[allow(non_camel_case_types)]
837
+ #[allow(non_camel_case_types, clippy::large_enum_variant )]
796
838
pub enum {{{classname}}} {
797
839
{{#composedSchemas}}
798
840
{{#oneOf}}
799
- {{{datatypeWithEnum}}}(Box< {{{dataType}}}> ),
841
+ {{{datatypeWithEnum}}}({{{dataType}}}),
800
842
{{/oneOf}}
801
843
{{/composedSchemas}}
802
844
}
@@ -807,18 +849,29 @@ impl validator::Validate for {{{classname}}}
807
849
match self {
808
850
{{#composedSchemas}}
809
851
{{#oneOf}}
810
- {{#isPrimitiveType }}
852
+ {{^isModel }}
811
853
Self::{{{datatypeWithEnum}}}(_) => std::result::Result::Ok(()),
812
- {{/isPrimitiveType }}
813
- {{^isPrimitiveType }}
814
- Self::{{{datatypeWithEnum}}}(x ) => x .validate(),
815
- {{/isPrimitiveType }}
854
+ {{/isModel }}
855
+ {{#isModel }}
856
+ Self::{{{datatypeWithEnum}}}(v ) => v .validate(),
857
+ {{/isModel }}
816
858
{{/oneOf}}
817
859
{{/composedSchemas}}
818
860
}
819
861
}
820
862
}
821
863
864
+ /// Converts Query Parameters representation (style=form, explode=false) to a {{{classname}}} value
865
+ /// as specified in https://swagger.io/docs/specification/serialization/
866
+ /// Should be implemented in a serde deserializer
867
+ impl std::str::FromStr for {{{classname}}} {
868
+ type Err = serde_json::Error;
869
+
870
+ fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
871
+ serde_json::from_str(s)
872
+ }
873
+ }
874
+
822
875
{{#discriminator}}
823
876
impl serde::Serialize for {{{classname}}} {
824
877
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
@@ -834,29 +887,18 @@ impl serde::Serialize for {{{classname}}} {
834
887
}
835
888
{{/discriminator}}
836
889
837
-
838
-
839
890
{{#composedSchemas}}
840
891
{{#oneOf}}
892
+ {{#vendorExtensions.x-from-trait}}
841
893
impl From<{{{dataType}}}> for {{{classname}}} {
842
894
fn from(value: {{{dataType}}}) -> Self {
843
- Self::{{{datatypeWithEnum}}}(Box::new( value) )
895
+ Self::{{{datatypeWithEnum}}}(value)
844
896
}
845
897
}
898
+ {{/vendorExtensions.x-from-trait}}
846
899
{{/oneOf}}
847
900
{{/composedSchemas}}
848
901
849
- /// Converts Query Parameters representation (style=form, explode=false) to a {{{classname}}} value
850
- /// as specified in https://swagger.io/docs/specification/serialization/
851
- /// Should be implemented in a serde deserializer
852
- impl std::str::FromStr for {{{classname}}} {
853
- type Err = serde_json::Error;
854
-
855
- fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
856
- serde_json::from_str(s)
857
- }
858
- }
859
-
860
902
{{/oneOf.size}}
861
903
{{^anyOf.size}}
862
904
{{^oneOf.size}}
@@ -871,8 +913,10 @@ pub struct {{{classname}}} {
871
913
/// Note: inline enums are not fully supported by openapi-generator
872
914
{{/isEnum}}
873
915
{{#isDiscriminator}}
916
+ {{#isString}}
874
917
#[serde(default = "{{{classname}}}::_name_for_{{{name}}}")]
875
918
#[serde(serialize_with = "{{{classname}}}::_serialize_{{{name}}}")]
919
+ {{/isString}}
876
920
{{/isDiscriminator}}
877
921
#[serde(rename = "{{{baseName}}}")]
878
922
{{#hasValidation}}
@@ -989,9 +1033,9 @@ pub struct {{{classname}}} {
989
1033
{{/vars}}
990
1034
}
991
1035
992
-
993
1036
{{#vars}}
994
1037
{{#isDiscriminator}}
1038
+ {{#isString}}
995
1039
impl {{{classname}}} {
996
1040
fn _name_for_{{{name}}}() -> String {
997
1041
String::from("{{{classname}}}")
@@ -1004,10 +1048,10 @@ impl {{{classname}}} {
1004
1048
s.serialize_str(&Self::_name_for_{{{name}}}())
1005
1049
}
1006
1050
}
1051
+ {{/isString}}
1007
1052
{{/isDiscriminator}}
1008
1053
{{/vars}}
1009
1054
1010
-
1011
1055
{{#vars}}
1012
1056
{{#hasValidation}}
1013
1057
{{#pattern}}
@@ -1035,9 +1079,9 @@ fn validate_byte_{{#lambda.lowercase}}{{{classname}}}_{{{name}}}{{/lambda.lowerc
1035
1079
1036
1080
impl {{{classname}}} {
1037
1081
#[allow(clippy::new_without_default, clippy::too_many_arguments)]
1038
- pub fn new({{#vars}}{{^defaultValue}}{{{name}}}: {{#isNullable}}Nullable<{{/isNullable}}{{{dataType}}}{{#isNullable}}>{{/isNullable}}, {{/defaultValue}}{{/vars}}) -> {{{classname}}} {
1082
+ pub fn new({{#vars}}{{^isDiscriminator}}{{^ defaultValue}}{{{name}}}: {{#isNullable}}Nullable<{{/isNullable}}{{{dataType}}}{{#isNullable}}>{{/isNullable}}, {{/defaultValue}}{{/isDiscriminator}}{{#isDiscriminator}}{{^isString}}{{^defaultValue}}{{{name}}}: {{#isNullable}}Nullable<{{/isNullable}}{{{dataType}}}{{#isNullable}}>{{/isNullable}}, {{/defaultValue}}{{/isString}}{{/isDiscriminator }}{{/vars}}) -> {{{classname}}} {
1039
1083
{{{classname}}} {
1040
- {{#vars}} {{ #defaultValue}}{{{name}}}: {{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}{{{name}}}{{/defaultValue}},
1084
+ {{#vars}} {{^isDiscriminator}}{{#defaultValue}}{{{name}}}: {{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}{{{name}}}{{/defaultValue}}{{/isDiscriminator}}{{#isDiscriminator}}{{#isString}}{{{name}}}: Self::_name_for_{{{name}}}(){{/isString}}{{^isString}}{{ #defaultValue}}{{{name}}}: {{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}{{{name}}}{{/defaultValue}}{{/isString}}{{/isDiscriminator }},
1041
1085
{{/vars}}
1042
1086
}
1043
1087
}
@@ -1075,7 +1119,7 @@ impl std::fmt::Display for {{{classname}}} {
1075
1119
{ {/isArray} }
1076
1120
{ {#isArray} }
1077
1121
{ {#isNullable} }
1078
- Some(self.{ {{name} }}.as_ref().map_or(vec![ "null".to_string()] , |x| x.iter().map(|x| x.to_string()).collect::<Vec <_ >>().join(","))),
1122
+ Some(self.{ {{name} }}.as_ref().map_or("null".to_string(), |x| x.iter().map(|x| x.to_string()).collect::<Vec <_ >>().join(","))),
1079
1123
{ {/isNullable} }
1080
1124
{ {^isNullable} }
1081
1125
Some(self.{ {{name} }}.iter().map(|x| x.to_string()).collect::<Vec <_ >>().join(",")),
@@ -1226,7 +1270,6 @@ impl std::convert::TryFrom<HeaderValue> for header::IntoHeaderValue<{{{classname
1226
1270
}
1227
1271
}
1228
1272
}
1229
-
1230
1273
{ {/oneOf.size} }
1231
1274
{ {/anyOf.size} }
1232
1275
0 commit comments