Deserialize proto with oneof from BSON fails

Viewed 362

Deserializing a BSON into a structure created by protobuf with a oneof property fails:

panic: no decoder found for test.isTest_Entry

This is probably because the oneof field is registered as a plain interface (from the generated code):

type Test struct {
    // Types that are valid to be assigned to Entry:
    //  *Test_S1
    //  *Test_S2
    Entry                isTest_Entry `protobuf_oneof:"entry"`
    XXX_NoUnkeyedLiteral struct{}     `json:"-" bson:"-"`
    XXX_unrecognized     []byte       `json:"-" bson:"-"`
    XXX_sizecache        int32        `json:"-" bson:"-"`
}
//...
type isTest_Entry interface {
    isTest_Entry()
}
package main

import (
    "fmt"
    "go.mongodb.org/mongo-driver/bson"
    "test"
)

func main() {
    entry := test.Test{}

    data, err := bson.Marshal(&entry)

    if nil != err {
        panic(err)
    }

    fmt.Println(data)

    newMessage := &test.Test{}
    err = bson.Unmarshal(data, newMessage)
    if err != nil {
        panic(err)
    }

    fmt.Println(newMessage.GetEntry())
}

Is there any tags I can add to make this work or is this a bug?

0 Answers
Related