elodina / go-avro

Apache Avro for Golang
http://elodina.github.io/go-avro/
Apache License 2.0
129 stars 55 forks source link

codegen can not create go structs with `union` schema #59

Closed syslot closed 8 years ago

syslot commented 8 years ago

Hi,go-avro is a nice tool for golang to process avro ,but I find that codegen can not create go structs with union schema,is it a bug?

serejja commented 8 years ago

Hi, codegen should be able to work with union schemas, can you please attach an example that isn't working for you so I could take a look?

Thanks!

syslot commented 8 years ago

Here is a schema for union schema, but I can't use go-avro to serialise it [ { "type": "int", "name": "MssLog" }, { "type": "string", "name": "AtsLog" } ]

serejja commented 8 years ago

Codegen is able to work ONLY with Record schemas so this example is not expected to produce a Go struct with codegen.

Depending on what Go struct you expect I'd suggest using one of following schemas:

{
    "type": "record",
    "namespace": "avro",
    "name": "SomeRecord",
    "fields": [
        {
            "name": "MssAtsLog",
            "type": [
                "int",
                "string"
            ]
        }
    ]
}

or

{
    "type": "record",
    "namespace": "avro",
    "name": "SomeRecord",
    "fields": [
        {
            "name": "MssLog",
            "type": "int"
        },
        {
            "name": "AtsLog",
            "type": "string"
        }
    ]
}

Closing this issue for now, if you have some more questions feel free to reopen it or open another one please. Thanks!

syslot commented 8 years ago

thanks for your answer, but it doesn't work for me

serejja commented 8 years ago

Can you please explain what exactly behavior you expect so I could help you or guide the right path?

syslot commented 8 years ago

In my case, I have got a schema working in process by Java for data mining. Now I decede to restruct our source by Golang. In order to reuse the data mining system, I must use the schema ,which is union type just like below.

[
    {
        "type": "int",
        "name": "MssLog"
    },
    {
        "type": "string",
        "name": "AtsLog"
    }
]