Mingun
0093f74cfe
Split test newtype_enum into four tests for each variant
...
(review this commit with "ignore whitespace changes" option on)
2024-08-24 04:52:25 +05:00
Mingun
171c6da57a
Complete coverage of ContentRefDeserializer::deserialize_newtype_struct
2024-08-24 04:52:25 +05:00
Mingun
2dddc7796d
Cover ContentRefDeserializer::deserialize_option
2024-08-24 04:52:25 +05:00
Mingun
8514f4119a
Remove unnecessary generics
2024-08-24 04:52:24 +05:00
Mingun
98fb7d94aa
Move all untagged enum tests (except flatten) into a dedicated module
...
Moved and renamed:
From test_annotations
- test_expecting_message_untagged_tagged_enum => expecting_message
- flatten::enum_::untagged::straitforward => contains_flatten
From test_macros
- test_untagged_newtype_struct => newtype_struct
- test_untagged_enum => complex
- test_untagged_enum_with_flattened_integer_key => contains_flatten_with_integer_key
- test_enum_in_untagged_enum => newtype_enum
- test_untagged_bytes => string_and_bytes
- test_untagged_newtype_variant_containing_unit_struct_not_map => newtype_unit_and_empty_map
2024-08-24 04:52:22 +05:00
Mingun
9f72ce695e
Struct: add tests for deserialization from sequence
...
(review this commit with "ignore whitespace changes" option on)
2024-08-16 22:51:42 +05:00
Mingun
c383e4f953
Tuple: add tests for deserialization from sequence
...
(review this commit with "ignore whitespace changes" option on)
2024-08-16 22:51:16 +05:00
Mingun
a94d8750fb
Newtype: move up the test with tag only
2024-08-16 22:51:13 +05:00
Mingun
b0d651be40
Newtype: add tests for deserialization from sequence
...
(review this commit with "ignore whitespace changes" option on)
2024-08-16 22:51:13 +05:00
Mingun
d5a9c11b5c
No need to test integer and byte array field names, they already tested for Unit case
...
There is no difference what variant is deserialized so we can test only one kind of variant
2024-08-16 22:51:10 +05:00
Mingun
6bfe1c435a
Unit: add tests for deserialization from bytes tag and content fields
2024-08-16 22:43:15 +05:00
Mingun
a02da49b87
Unit: add tests for deserialization from integer tag and content fields
2024-08-16 22:43:15 +05:00
Mingun
29dc6c3367
Unit: add tests for deserialization from sequence
...
(review this commit with "ignore whitespace changes" option on)
2024-08-16 22:38:02 +05:00
Mingun
a7f0bab078
Document fields in internal structs used to deserialize adjacently tagged enums
2024-08-16 21:39:55 +05:00
Mingun
3dc6829303
Integrate bytes test into struct_ test
...
`newtype` test also integrates test with `Bytes` tag, so be like
Removed the first assert_tokens because it is the same as the first assert in the merged method
2024-08-16 21:39:53 +05:00
Mingun
42e63ff942
Reuse AdjacentlyTagged enum in bytes test
...
Change 0i32 to 1u8 so the test can be merged with the previous in the next commit
2024-08-16 21:38:23 +05:00
Mingun
df07751e6f
Group newtype and newtype_with_newtype tests
2024-08-16 21:36:56 +05:00
Mingun
5445f1741b
Reuse AdjacentlyTagged enum in newtype_with_newtype test
2024-08-16 21:36:56 +05:00
Mingun
9d0f811221
Remove unnecessary generic
2024-08-16 21:36:56 +05:00
Mingun
36b9a859c4
Test deserialization of the serialized unit format for adjacently tagged enum
2024-08-16 21:36:55 +05:00
Mingun
59628d1712
Create only one value for all checks
2024-08-16 21:36:55 +05:00
Mingun
bee7470715
Split test test_adjacently_tagged_enum into four tests for each variant
...
(review this commit with "ignore whitespace changes" option on)
2024-08-16 21:36:55 +05:00
Mingun
5a359e10f4
Group Newtype variant checks in test_adjacently_tagged_enum together
2024-08-16 21:36:55 +05:00
Mingun
5e37ade519
Move all adjacently tagged enum tests (except flatten) into a dedicated module
...
Moved and renamed:
From test_annotatons
- test_adjacently_tagged_enum_bytes => bytes
- flatten::enum_::adjacently_tagged::straitforward=> struct_with_flatten
- test_expecting_message_adjacently_tagged_enum => expecting_message
- test_partially_untagged_adjacently_tagged_enum => partially_untagged
From test_macros
- test_adjacently_tagged_newtype_struct => newtype_with_newtype
- test_adjacently_tagged_enum
- test_adjacently_tagged_enum_deny_unknown_fields => deny_unknown_fields
2024-08-16 21:36:52 +05:00
Mingun
2adb0e99b0
Add additional checks for unit and newtype_unit tests
...
- check that unit variant can be deserialized from a map
- check that newtype variant with unit can be deserialized from a struct
2024-08-15 23:39:14 +05:00
Mingun
71ed1f2f12
Add tests for special and general cases for internally tagged enums
...
Special case is the tag field first (so the enum variant are known after reading the first entry from map).
General case is the tag field not the first (so we need to buffer entries until we found an entry with tag)
2024-08-15 23:39:13 +05:00
Mingun
47954502af
Add tests with borrowed strings for the tag field name and tag value
2024-08-15 23:39:13 +05:00
Mingun
4987fd15f7
Convert newtype_enum and struct_enum tests into modules
...
Separate testing each variant kind of enum (unit, newtype, tuple, struct) results
in more specific information if that checks fail
(review this commit with "ignore whitespace changes" option on)
2024-08-15 23:39:12 +05:00
Mingun
8bfe0d0ac0
Move and rename tests:
...
- newtype_variant_containing_unit -> newtype_unit
- newtype_variant_containing_unit_struct -> newtype_unit_struct
- newtype_variant_containing_externally_tagged_enum -> newtype_enum
- struct_variant_containing_unit_variant -> struct_enum
2024-08-15 23:39:12 +05:00
Mingun
7c0e6bd18f
Reuse type in struct_variant_containing_unit_variant
2024-08-15 23:39:11 +05:00
Mingun
41b9c33c2b
Reuse type in newtype_variant_containing_externally_tagged_enum
2024-08-15 23:39:11 +05:00
Mingun
28a775db22
Share externally tagged enum Enum between all tests and reuse in struct_variant_containing_unit_variant
2024-08-15 23:39:10 +05:00
Mingun
e999600f8f
Rename externally tagged enum Inner to Enum
2024-08-15 23:39:10 +05:00
Mingun
d3492d8d36
Reuse type in newtype_variant_containing_unit_struct
2024-08-15 23:39:09 +05:00
Mingun
48de0c51b0
Share unit struct Unit between all tests
2024-08-15 23:39:09 +05:00
Mingun
93bda5f1dc
Rename unit struct to a generic name: Info->Unit
2024-08-15 23:39:09 +05:00
Mingun
2d75ef6b30
Reuse type in newtype_variant_containing_unit
2024-08-15 23:39:07 +05:00
Mingun
f97160f715
Reuse type in unit_variant_with_unknown_fields and add test for sequence
2024-08-15 23:39:06 +05:00
Mingun
eb59c776ca
Use name "tag" to refer to tag field
2024-08-15 23:39:06 +05:00
Mingun
9128201c78
Use the same order of derives
2024-08-15 23:39:05 +05:00
Mingun
2cbfd37072
Move all other internally tagged enum tests into a dedicated file
...
Moved all except flattened tests:
- test_internally_tagged_enum_with_skipped_conflict => with_skipped_conflict
- test_internally_tagged_enum_new_type_with_unit => newtype_variant_containing_unit
- test_internally_tagged_unit_enum_with_unknown_fields => unit_variant_with_unknown_fields
- test_expecting_message_internally_tagged_enum => expecting_message
- flatten::enum_::internally_tagged::straightforward => containing_flatten
2024-08-15 23:39:05 +05:00
Mingun
0939214c51
Move internally tagged enum tests into a dedicated file
...
Ctrl+X, Ctrl+V
2024-08-15 23:34:01 +05:00
Mingun
8c60f5aea7
Reorder enum variants and tests to canonical order (Unit, Newtype, Tuple, Struct)
2024-08-15 23:34:00 +05:00
Mingun
da0ed4021d
Give meaningful names to enum variants
2024-08-15 23:34:00 +05:00
Mingun
99f905403b
Move all internally tagged enum tests of test_macros into a dedicated module
...
Moved:
- test_internally_tagged_enum_with_untagged_variant => untagged_variant
- test_internally_tagged_bytes => string_and_bytes mod
- test_internally_tagged_struct_variant_containing_unit_variant => struct_variant_containing_unit_variant
- test_internally_tagged_borrow => borrow
- test_enum_in_internally_tagged_enum => newtype_variant_containing_externally_tagged_enum
- test_internally_tagged_newtype_variant_containing_unit_struct => newtype_variant_containing_unit_struct
(review this commit with "ignore whitespace changes" option on)
2024-08-15 23:34:00 +05:00
Mingun
aa0654332d
Convert test_internally_tagged_enum into module
...
(review this commit with "ignore whitespace changes" option on)
2024-08-15 23:33:59 +05:00
Mingun
77a6a9d4e1
Take into account only not skipped flatten fields when choose serialization form
...
Consequence: `FlattenSkipSerializing`
- uses `serialize_struct` instead of `serialize_map`
2024-08-11 20:12:09 +05:00
Mingun
547d843cca
Remove dead code - serialize_struct_as_map always called when cattrs.has_flatten()==true
2024-08-11 20:12:08 +05:00
Mingun
005cb84593
Fail with an understandable message is number of fields for serialization is too many
2024-08-11 20:12:07 +05:00
Mingun
fd5b5e9aa5
Correctly calculate has_flatten attribute in all cases for deserialization
...
Consequence: `FlattenSkipDeserializing[DenyUnknown]`
- does not collect data in Field, because do not read them anyway
- gets `deserialize_in_place` method
- gets ability to deserialize from sequence (visit_seq method)
- uses `deserialize_struct` instead of `deserialize_map`
2024-08-11 20:01:33 +05:00
Mingun
0647a7c1fe
Fix creating and filling a collections that was not read
2024-08-11 20:01:00 +05:00
Mingun
2afe5b4ef9
Add regression test for issue #2792
2024-08-10 21:29:39 +05:00
Mingun
b4ec2595c9
Correctly process flatten fields in enum variants
...
- Fix incorrect deserialization of variants that doesn't contain flatten field when other contains
- Fix a panic when deriving `Deserialize` for an enum with tuple and struct with flatten field
Fixes (2):
regression::issue2565::simple_variant
regression::issue1904 (compilation)
2024-08-09 19:59:23 +05:00
Mingun
c3ac7b675a
Add regression test for issue #1904
...
Currently panics in derive:
error: proc-macro derive panicked
--> test_suite\tests\test_annotations.rs:2386:25
|
2386 | #[derive(Serialize, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^^^
|
= help: message: assertion failed: !cattrs.has_flatten()
error: proc-macro derive panicked
--> test_suite\tests\regression\issue1904.rs:57:10
|
57 | #[derive(Deserialize)]
| ^^^^^^^^^^^
|
= help: message: assertion failed: !cattrs.has_flatten()
error: proc-macro derive panicked
--> test_suite\tests\regression\issue1904.rs:47:10
|
47 | #[derive(Deserialize)]
| ^^^^^^^^^^^
|
= help: message: assertion failed: !cattrs.has_flatten()
error: proc-macro derive panicked
--> test_suite\tests\regression\issue1904.rs:37:10
|
37 | #[derive(Deserialize)]
| ^^^^^^^^^^^
|
= help: message: assertion failed: !cattrs.has_flatten()
error: proc-macro derive panicked
--> test_suite\tests\regression\issue1904.rs:27:10
|
27 | #[derive(Deserialize)]
| ^^^^^^^^^^^
|
= help: message: assertion failed: !cattrs.has_flatten()
error: proc-macro derive panicked
--> test_suite\tests\regression\issue1904.rs:16:10
|
16 | #[derive(Deserialize)]
| ^^^^^^^^^^^
|
= help: message: assertion failed: !cattrs.has_flatten()
error: proc-macro derive panicked
--> test_suite\tests\regression\issue1904.rs:7:10
|
7 | #[derive(Deserialize)]
| ^^^^^^^^^^^
|
= help: message: assertion failed: !cattrs.has_flatten()
2024-08-09 19:55:56 +05:00
Mingun
24614e44bf
Add regression test for issue #2565
...
failures (1):
regression::issue2565::simple_variant
2024-08-09 19:53:14 +05:00
Mingun
bc5af506bd
Use serialize_entry instead of serialize_key + serialize_value when serialize flatten newtype enum variant
...
Serializers that reimplements serialize_entry will get benefits from that
2024-08-03 14:49:38 +05:00
Mingun
6a097eca93
Add canary test to ensure that we use adequate enum representation
2023-08-07 20:33:12 +05:00
Mingun
84d1c5385d
Use correct tokens in test to represent an enum variant
...
Unit variant of externally tagged enum cannot be deserialized from the string
token by itself. It is ContentDeserializer + serde_test::Deserializer that makes
this possible, because serde_test::Deserializer produces Content::Str() from
Token::BorrowedStr() and ContentDeserializer produces unit variant from Content::Str().
The following tokens all produces Content::String(variant):
- Token::String(variant)
- Token::Str(variant)
- Token::UnitVariant { variant, .. }
Token::BorrowedStr(variant) produces Content::Str(variant) that was the real purpose to
use it in test in #933 . This actually makes this test testing `Content` rather than type itself.
Correct way to represent enum one of:
- [xxxVariant { .. }]
- [Enum { .. }, xxxVariant { variant, .. }]
- [Enum { .. }, String(variant), <variant content>]
- [Enum { .. }, Str(variant), <variant content>]
- [Enum { .. }, BorrowedStr(variant), <variant content>]
2023-08-07 19:19:00 +05:00
Mingun
070cce0d9c
Get rid of temporary variable
2023-08-06 19:55:48 +05:00
Mingun
b58e8bac12
Replace if let Some(...) = ... to Option::map
2023-08-06 19:53:39 +05:00
Mingun
ada50b077e
ignore_variant variable is always None, let's take this into account
2023-08-06 19:36:48 +05:00
Mingun
5e313a7330
Move generiс code out-of-function, create more specialized and simple code
2023-08-06 19:35:27 +05:00
Mingun
2a36d11238
Introduce a dedicated function for generating Field enum
...
(the enum that represents all fields of a struct)
2023-08-06 19:32:53 +05:00
Mingun
5c33931422
Allow #[serde(default)] on tuple structs
2023-08-03 22:32:34 +05:00
Mingun
878110a4bc
Simplify code after dead code elimination
2023-08-01 19:03:21 +05:00
Mingun
59ec8b7db2
Remove dead code - variant_ident and deserializer are always None
2023-08-01 19:03:20 +05:00
Mingun
cae1b43829
Inline deserialize_newtype_struct_in_place
2023-08-01 19:03:19 +05:00
Mingun
99fde4ee3e
Implement #2387 also for deserialize_in_place method
2023-08-01 19:03:19 +05:00
Mingun
afe3872810
Simplify check for missing fields
2023-08-01 19:03:18 +05:00
Mingun
3a3e6bf103
Reorder variables to match order in final quote!
2023-08-01 19:03:18 +05:00
Mingun
935f0bd70f
Merge some quote! blocks
2023-08-01 19:03:17 +05:00
Mingun
5c18bfeda6
Inline deserialize_struct_as_struct_in_place_visitor
2023-08-01 19:03:17 +05:00
Mingun
f709fc05b0
Do not run the code when results are not used
2023-07-23 15:23:39 +05:00
Mingun
089aae1292
Eliminate even more allocations
2023-07-23 15:23:39 +05:00
Mingun
855acaf112
Eliminate additional allocations for flattening aliases
2023-07-23 15:23:38 +05:00
Mingun
7ca7720262
Slightly reduced number of allocations
2023-07-23 15:23:37 +05:00
Mingun
78fea3aa4a
Show possible aliases in the expected message
...
Fixes tests
2023-07-23 15:23:37 +05:00
Mingun
1efb8b6a53
Add tests for aliases
...
failures (2):
field_identifier::unknown
variant_identifier::unknown
2023-07-23 15:23:36 +05:00
Mingun
bc1960b106
Add tests for unknown field / variant
2023-07-23 15:23:33 +05:00
Mingun
967023b755
Group field_identifier and variant_identifier tests in sub-modules
...
(review this commit with "ignore whitespace changes" option on)
2023-07-23 15:21:22 +05:00
Mingun
bb51e68f16
Keep aliases sorted
2023-07-23 15:21:21 +05:00
Mingun
4e5e55bf1c
Remove custom implementations of SeqDeserializer and MapDeserializer for enums
...
Those deserializers are used to deserialize tuple or struct variants from Content
which is used by internally tagged enums and by flatten
FlatMapDeserializer is reached in the following tests:
flatten::enum_::externally_tagged::newtype
flatten::enum_::externally_tagged::struct_from_map
flatten::enum_::externally_tagged::struct_from_seq
flatten::enum_::externally_tagged::tuple
ContentDeserializer is reached in the following tests:
test_enum_in_internally_tagged_enum
test_internally_tagged_struct_variant_containing_unit_variant
2023-07-11 22:01:48 +05:00
Mingun
4513a9e6a7
Move test_flatten_enum_newtype into new group of flatten tests - flatten::enum_::externally_tagged::newtype
2023-07-11 22:00:38 +05:00
Mingun
4f922e4e5b
Implement serialization of flattened tuple variants of externally tagged enums
...
The Container struct
struct Container {
#[serde(flatten)]
enum_field: Enum,
}
enum Enum {
Tuple(u32, u32),
}
now can be serialized to JSON as
{ "enum_field": [1, 2] }
Deserialization already works
Fixes (1):
flatten::enum_::externally_tagged::tuple
2023-07-11 22:00:10 +05:00
Mingun
993966600e
Implement tests for crate::private::de::content::VariantDeserializer
...
failures (1):
flatten::enum_::externally_tagged::tuple
2023-07-11 21:59:22 +05:00
Mingun
5b96cf1bde
Use traditional order for enum variants (Unit, Newtype, Tuple, Struct) and names for tag and content fields
2023-07-11 21:58:43 +05:00
Mingun
f3d50e5209
Use FromIterator to fill HashMap
2023-07-11 21:58:14 +05:00
Mingun
ab21d4d017
Merge assert_de_tokens and assert_ser_tokens into assert_tokens
2023-07-11 21:57:49 +05:00
Mingun
f7c5d93e6a
Pull up types from function into module, unify style
2023-07-11 21:57:22 +05:00
Mingun
52a7d40e6e
Rename test types so their names reflects, what's tested
2023-07-11 21:56:53 +05:00
Mingun
348bc6b257
Move flatten enum tests to a dedicated module
...
(review with "ignore whitespace" option on and editor that shows line moves,
for example, TortoiseGitMerge)
2023-07-11 21:56:22 +05:00
Mingun
4cf1fec575
Replace several linked variables with enumeration for tuples
2023-06-26 20:55:52 +05:00
Mingun
ee7d77defa
Replace several linked variables with enumeration for structs
2023-06-26 20:55:52 +05:00
Mingun
d0dfc4577e
Replace enum with boolean parameter
2023-06-26 20:55:52 +05:00
Mingun
bbbd1d24c9
Move deserialize_generated_identifier out from if because the call is same in both arms
2023-06-26 20:55:51 +05:00
Mingun
fb3a9e0d7c
Simplify check for missing fields
2023-06-26 20:55:51 +05:00
Mingun and Oliver Schneider
5ffebeb6ef
Actually, field_names_idents can be calculated using the same code in both cases
...
When !cattrs.has_flatten() all fields is !field.attrs.flatten()
Co-authored-by: Oliver Schneider <oli-obk@users.noreply.github.com >
2023-06-26 20:55:51 +05:00
Mingun
75db73066b
Inline deserialize_struct_as_map_visitor and deserialize_struct_as_struct_visitor
2023-06-26 20:55:51 +05:00
Mingun
2796833c82
Pull up call to deserialize_map because it's identical
2023-06-26 20:55:50 +05:00
Mingun
95730dc7f7
Reorder variables to match order in final quote!
2023-06-26 20:55:50 +05:00