Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion serde/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -760,7 +760,7 @@ def literal_func_name(literal_args: Sequence[Any]) -> str:
)


@dataclass(unsafe_hash=True)
@dataclass(frozen=True)
class Tagging:
"""
Controls how union is (de)serialized. This is the same concept as in
Expand Down
22 changes: 22 additions & 0 deletions tests/test_union.py
Original file line number Diff line number Diff line change
Expand Up @@ -842,3 +842,25 @@ class Foo:

f = Foo([10])
assert f == from_json(Foo, to_json(f))


def test_union_internal_tagging_cache_conflict_different_case() -> None:
@serde
class Foo:
v: int

@serde
class Bar:
v: int

union_upper = InternalTagging("TAG")(Union[Foo, Bar])
deserialized_upper = Foo(1)
serialized_upper = '{"v":1,"TAG":"Foo"}'
assert from_json(union_upper, serialized_upper) == deserialized_upper
assert to_json(deserialized_upper, union_upper) == serialized_upper

union_lower = InternalTagging("tag")(Union[Foo, Bar])
deserialized_lower = Foo(1)
serialized_lower = '{"v":1,"tag":"Foo"}'
assert from_json(union_lower, serialized_lower) == deserialized_lower
assert to_json(deserialized_lower, union_lower) == serialized_lower
Loading