Aaron Spiegel created AVRO-3668:
-----------------------------------

             Summary: Rust AvroSchema derive should support non-unit enums
                 Key: AVRO-3668
                 URL: https://issues.apache.org/jira/browse/AVRO-3668
             Project: Apache Avro
          Issue Type: New Feature
          Components: rust
            Reporter: Aaron Spiegel


The idiomatic way to create type unions in Rust is to create a non-unit Enum 
with unnamed fields. As a user, I would like to derive an Avro schema from this 
type of object:
{code:java}
#[derive(AvroSchema)]
enum MyEnum {
    AsAString(String),
    AsAnInt(i32),
}

#[derive(AvroSchema)]
struct MyStuct {
  my_enum: MyEnum,
}{code}
Which would create a schema of:
{code:java}
{
  "name" : "my_struct",
  "type" : "record",
  "fields" :
  [
    {
      "name" : "my_enum",
      "type" : [
        "string",
        "int"
      ]
    }
  ]
}{code}
 

Rust also supports named fields for structure types:
{code:java}
#[derive(AvroSchema)]
enum MyEnum {
    NamedField: {
        value: String,
        count: i32,
    }
}

#[derive(AvroSchema)]
struct MyStuct {
    my_enum: MyEnum,
} {code}
 

The Rust enum also supports named fields to represent embedded structs, and 
enums with a mix of unit fields, named, and unnamed fields. I would consider 
these variants outside the scope of this issue, though they may also be 
supported by the AvroSchema derive with embedded records simlar to the approach 
describe in AVRO-3646



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

Reply via email to