Documentation ¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BinaryConv ¶
type BinaryConv struct {
// contains filtered or unexported fields
}
BinaryConv is a converter from json to protobuf binary
func NewBinaryConv ¶
func NewBinaryConv(opts conv.Options) BinaryConv
NewBinaryConv returns a new BinaryConv
func (*BinaryConv) Do ¶
func (self *BinaryConv) Do(ctx context.Context, desc *proto.TypeDescriptor, jbytes []byte) (tbytes []byte, err error)
Do converts json bytes (jbytes) to protobuf binary (tbytes) desc is the protobuf type descriptor of the protobuf binary, usually it the request Message type
Example ¶
package main import ( "context" "encoding/json" "reflect" "github.com/cloudwego/dynamicgo/conv" "github.com/cloudwego/dynamicgo/testdata/kitex_gen/pb/example2" "google.golang.org/protobuf/encoding/protowire" ) var opts = conv.Options{} func main() { // get descriptor and data desc := getExampleDesc() data := getExampleData() // make BinaryConv cv := NewBinaryConv(opts) // do conversion out, err := cv.Do(context.Background(), desc, data) if err != nil { panic(err) } // validate result exp := &example2.ExampleReq{} err = json.Unmarshal(data, exp) if err != nil { panic(err) } act := &example2.ExampleReq{} l := 0 dataLen := len(out) // fastRead to get target struct for l < dataLen { id, wtyp, tagLen := protowire.ConsumeTag(out) if tagLen < 0 { panic("parseTag failed") } l += tagLen out = out[tagLen:] offset, err := act.FastRead(out, int8(wtyp), int32(id)) if err != nil { panic(err) } out = out[offset:] l += offset } if !reflect.DeepEqual(exp, act) { panic("not equal") } }
Output:
func (*BinaryConv) DoInto ¶
func (self *BinaryConv) DoInto(ctx context.Context, desc *proto.TypeDescriptor, jbytes []byte, buf *[]byte) error
DoInto behaves like Do, but it writes the result to buffer directly instead of returning a new buffer
Click to show internal directories.
Click to hide internal directories.