代码拉取完成,页面将自动刷新
import "github.com/cloudwego/dynamicgo/conv/j2p"
BinaryConv is a converter from json to protobuf binary
type BinaryConv struct {
// contains filtered or unexported fields
}
func NewBinaryConv(opts conv.Options) BinaryConv
NewBinaryConv returns a new BinaryConv
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
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")
}
}
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
Generated by gomarkdoc
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。