[ 
https://issues.apache.org/jira/browse/AVRO-3646?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17686525#comment-17686525
 ] 

ASF subversion and git services commented on AVRO-3646:
-------------------------------------------------------

Commit e312f1893f0e4bb5d25b4294026dc304436579bf in avro's branch 
refs/heads/avro-3646-serde-for-enum-mixed-variants from LucasJavaudin
[ https://gitbox.apache.org/repos/asf?p=avro.git;h=e312f1893 ]

AVRO-3646: integration tests for (de)serializing of enum with mixed variants 
(#1949)

* AVRO-3646: Add a test that (de)serialize a enum with mixed variants

* AVRO-3646: Add a test that (de)serialize a enum w/ duplicates variants

* Enable PR checks for all PRs, not just the ones against master

Signed-off-by: Martin Tzvetanov Grigorov <mgrigo...@apache.org>

* AVRO-3646: Fix a clippy error about enum variant being postfixed with 
'Variant'

Signed-off-by: Martin Tzvetanov Grigorov <mgrigo...@apache.org>

* AVRO-3646: Fix the serialization (X -> types::Value) for enum tuple variants

Signed-off-by: Martin Tzvetanov Grigorov <mgrigo...@apache.org>

* AVRO-3646: Fix the name of the enum variants in the Avro schema

Rename the test method to be different than the one in serde_enum.rs IT
tests.

Signed-off-by: Martin Tzvetanov Grigorov <mgrigo...@apache.org>

* AVRO-3646: Remove the duplicates to conform to Avro specification

A Union could have at most one item for a primitive type

Signed-off-by: Martin Tzvetanov Grigorov <mgrigo...@apache.org>

* AVRO-3646: Remove dbg!() statement. Fix clippy errors

Signed-off-by: Martin Tzvetanov Grigorov <mgrigo...@apache.org>

Signed-off-by: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Co-authored-by: LucasJavaudin <lucas.javau...@cyu.fr>
Co-authored-by: Martin Tzvetanov Grigorov <mgrigo...@apache.org>

> Serialization / deserialization for enum with mixed variants (with and 
> without data)
> ------------------------------------------------------------------------------------
>
>                 Key: AVRO-3646
>                 URL: https://issues.apache.org/jira/browse/AVRO-3646
>             Project: Apache Avro
>          Issue Type: Bug
>          Components: rust
>            Reporter: Lucas Javaudin
>            Assignee: Martin Tzvetanov Grigorov
>            Priority: Major
>              Labels: pull-request-available, rust
>          Time Spent: 5h 20m
>  Remaining Estimate: 0h
>
> Consider the following example of what I call an "enum with mixed variants":
> {code:java}
> enum MixedExternalEnum {
>     Val1,
>     Val2(f32),
> } {code}
> For the two variants, this enum can be properly serialized to and 
> deserialized from a {{types::Value}}  (using {{ser::to_value}} and 
> {{{}de::from_value{}}}). The problem is that the way they are represented as 
> a \{{types::Value}} cannot be represented using an Avro Schema.
> The serialized version of {{MixedExternalEnum::Val1}} is
> {code:java}
> Value::Record(vec![("a".to_owned(), Value::Enum(0, "Val1".to_owned()))])
> {code}
> while the serialized version of {{MixedExternalEnum::Val2(0.0)}} is
> {code:java}
> Value::Record(vec![(
>     "a".to_owned(),
>     Value::Record(vec![
>         ("type".to_owned(), Value::Enum(1, "Val2".to_owned())),
>         (
>             "value".to_owned(),
>             Value::Union(1, Box::new(Value::Float(0.0))),
>         ),
>     ]),
> )])
> {code}
> As far as I know, there is no Avro Schema compatible with both possible 
> values.
> One solution I can think of is to change the serialization of 
> {{MixedExternalEnum::Val1}} to
> {code:java}
> Value::Record(vec![(
>     "a".to_owned(),
>     Value::Record(vec![
>         ("type".to_owned(), Value::Enum(0, "Val1".to_owned())),
>         (
>             "value".to_owned(),
>             Value::Union(0, Box::new(Value::Null)),
>         ),
>     ]),
> )])
> {code}
>  
> A workaround is to replace {{Val1}} by {{Val1(())}} in the enum definition 
> (see AVRO-3645) but this can have undesirable effects for other parts of the 
> code.
>  
> Then, it's another story for adjacently tagged, internally tagged and 
> untagged enum...



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to