diff --git a/schemars/tests/enum.rs b/schemars/tests/enum.rs index 1ed60462..d78d7296 100644 --- a/schemars/tests/enum.rs +++ b/schemars/tests/enum.rs @@ -144,3 +144,40 @@ enum NoVariants {} fn enum_no_variants() -> TestResult { test_default_generated_schema::("no-variants") } + +#[derive(JsonSchema)] +#[serde(rename_all_fields = "PascalCase")] +pub enum RenameAllFields { + First { + nested_attribute: std::string::String, + }, +} + +#[derive(JsonSchema)] +#[serde(rename_all = "snake_case")] +pub enum RenameAll { + First { nested_attribute: bool }, +} + +#[derive(JsonSchema)] +pub enum RenameAttribute { + First { + #[serde(rename = "RenamedAttribute")] + nested_attribute: std::string::String, + }, +} + +#[test] +fn enum_unit_rename_attribute() -> TestResult { + test_default_generated_schema::("enum-rename-attr") +} + +#[test] +fn enum_unit_rename_all_fields() -> TestResult { + test_default_generated_schema::("enum-rename-all-fields") +} + +#[test] +fn enum_unit_rename_all() -> TestResult { + test_default_generated_schema::("enum-rename-all") +} diff --git a/schemars/tests/expected/enum-rename-all-fields.json b/schemars/tests/expected/enum-rename-all-fields.json new file mode 100644 index 00000000..0c471afa --- /dev/null +++ b/schemars/tests/expected/enum-rename-all-fields.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "RenameAllFields", + "oneOf": [ + { + "type": "object", + "required": [ + "First" + ], + "properties": { + "First": { + "type": "object", + "required": [ + "NestedAttribute" + ], + "properties": { + "NestedAttribute": { + "type": "string" + } + } + } + }, + "additionalProperties": false + } + ] +} \ No newline at end of file diff --git a/schemars/tests/expected/enum-rename-all.json b/schemars/tests/expected/enum-rename-all.json new file mode 100644 index 00000000..b4eb2b7f --- /dev/null +++ b/schemars/tests/expected/enum-rename-all.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "RenameAll", + "oneOf": [ + { + "type": "object", + "required": [ + "first" + ], + "properties": { + "first": { + "type": "object", + "required": [ + "nested_attribute" + ], + "properties": { + "nested_attribute": { + "type": "boolean" + } + } + } + }, + "additionalProperties": false + } + ] +} \ No newline at end of file diff --git a/schemars/tests/expected/enum-rename-attr.json b/schemars/tests/expected/enum-rename-attr.json new file mode 100644 index 00000000..b4d90089 --- /dev/null +++ b/schemars/tests/expected/enum-rename-attr.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "RenameAttribute", + "oneOf": [ + { + "type": "object", + "required": [ + "First" + ], + "properties": { + "First": { + "type": "object", + "required": [ + "RenamedAttribute" + ], + "properties": { + "RenamedAttribute": { + "type": "string" + } + } + } + }, + "additionalProperties": false + } + ] +} \ No newline at end of file diff --git a/schemars_derive/src/attr/schemars_to_serde.rs b/schemars_derive/src/attr/schemars_to_serde.rs index 5b699426..f21df633 100644 --- a/schemars_derive/src/attr/schemars_to_serde.rs +++ b/schemars_derive/src/attr/schemars_to_serde.rs @@ -10,6 +10,7 @@ use super::get_meta_items; pub(crate) static SERDE_KEYWORDS: &[&str] = &[ "rename", "rename_all", + "rename_all_fields", "deny_unknown_fields", "tag", "content",