2

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?

Jonathan Hall
  • 75,165
  • 16
  • 143
  • 189
Mihai
  • 55
  • 6

0 Answers0