mirror of
https://github.com/go-kratos/kratos.git
synced 2026-05-22 10:15:24 +02:00
+44
-11
@@ -1,30 +1,49 @@
|
|||||||
package form
|
package form
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/go-kratos/kratos/v2/encoding"
|
|
||||||
"github.com/gorilla/schema"
|
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"reflect"
|
||||||
|
|
||||||
|
"github.com/go-kratos/kratos/v2/encoding"
|
||||||
|
|
||||||
|
"github.com/go-playground/form/v4"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Name is form codec name
|
||||||
const Name = "x-www-form-urlencoded"
|
const Name = "x-www-form-urlencoded"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
decoder := schema.NewDecoder()
|
decoder := form.NewDecoder()
|
||||||
decoder.SetAliasTag("json")
|
decoder.SetTagName("json")
|
||||||
encoder := schema.NewEncoder()
|
encoder := form.NewEncoder()
|
||||||
encoder.SetAliasTag("json")
|
encoder.SetTagName("json")
|
||||||
encoding.RegisterCodec(codec{encoder: encoder, decoder: decoder})
|
encoding.RegisterCodec(codec{encoder: encoder, decoder: decoder})
|
||||||
}
|
}
|
||||||
|
|
||||||
type codec struct {
|
type codec struct {
|
||||||
encoder *schema.Encoder
|
encoder *form.Encoder
|
||||||
decoder *schema.Decoder
|
decoder *form.Decoder
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c codec) Marshal(v interface{}) ([]byte, error) {
|
func (c codec) Marshal(v interface{}) ([]byte, error) {
|
||||||
var vs = url.Values{}
|
var vs url.Values
|
||||||
if err := c.encoder.Encode(v, vs); err != nil {
|
var err error
|
||||||
return nil, err
|
if m, ok := v.(proto.Message); ok {
|
||||||
|
vs, err = EncodeMap(m)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
vs, err = c.encoder.Encode(v)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for k, v := range vs {
|
||||||
|
if len(v) == 0 {
|
||||||
|
delete(vs, k)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return []byte(vs.Encode()), nil
|
return []byte(vs.Encode()), nil
|
||||||
}
|
}
|
||||||
@@ -34,6 +53,20 @@ func (c codec) Unmarshal(data []byte, v interface{}) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rv := reflect.ValueOf(v)
|
||||||
|
for rv.Kind() == reflect.Ptr {
|
||||||
|
if rv.IsNil() {
|
||||||
|
rv.Set(reflect.New(rv.Type().Elem()))
|
||||||
|
}
|
||||||
|
rv = rv.Elem()
|
||||||
|
}
|
||||||
|
if m, ok := v.(proto.Message); ok {
|
||||||
|
return MapProto(m, vs)
|
||||||
|
} else if m, ok := reflect.Indirect(reflect.ValueOf(v)).Interface().(proto.Message); ok {
|
||||||
|
return MapProto(m, vs)
|
||||||
|
}
|
||||||
|
|
||||||
if err := c.decoder.Decode(v, vs); err != nil {
|
if err := c.decoder.Decode(v, vs); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
package form
|
package form
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/go-kratos/kratos/v2/encoding"
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/go-kratos/kratos/v2/encoding"
|
||||||
|
"github.com/go-kratos/kratos/v2/internal/testproto/complex"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
type LoginRequest struct {
|
type LoginRequest struct {
|
||||||
@@ -45,3 +47,26 @@ func TestFormCodecUnmarshal(t *testing.T) {
|
|||||||
require.Equal(t, "kratos", bindReq.Username)
|
require.Equal(t, "kratos", bindReq.Username)
|
||||||
require.Equal(t, "kratos_pwd", bindReq.Password)
|
require.Equal(t, "kratos_pwd", bindReq.Password)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestProtoEncodeDecode(t *testing.T) {
|
||||||
|
in := &complex.Complex{
|
||||||
|
Id: 2233,
|
||||||
|
NoOne: "2233",
|
||||||
|
Simple: &complex.Simple{Component: "5566"},
|
||||||
|
Simples: []string{"3344", "5566"},
|
||||||
|
}
|
||||||
|
content, err := encoding.GetCodec(contentType).Marshal(in)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, "id=2233&numberOne=2233&simples=3344&simples=5566&very_simple.component=5566", string(content))
|
||||||
|
var in2 = &complex.Complex{}
|
||||||
|
err = encoding.GetCodec(contentType).Unmarshal(content, in2)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, int64(2233), in2.Id)
|
||||||
|
require.Equal(t, "2233", in2.NoOne)
|
||||||
|
require.NotEmpty(t, in2.Simple)
|
||||||
|
require.Equal(t, "5566", in2.Simple.Component)
|
||||||
|
require.NotEmpty(t, in2.Simples)
|
||||||
|
require.Len(t, in2.Simples, 2)
|
||||||
|
require.Equal(t, "3344", in2.Simples[0])
|
||||||
|
require.Equal(t, "5566", in2.Simples[1])
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package binding
|
package form
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
@@ -17,7 +17,7 @@ import (
|
|||||||
"google.golang.org/protobuf/types/known/wrapperspb"
|
"google.golang.org/protobuf/types/known/wrapperspb"
|
||||||
)
|
)
|
||||||
|
|
||||||
func mapProto(msg proto.Message, values map[string][]string) error {
|
func MapProto(msg proto.Message, values map[string][]string) error {
|
||||||
for key, values := range values {
|
for key, values := range values {
|
||||||
if err := populateFieldValues(msg.ProtoReflect(), strings.Split(key, "."), values); err != nil {
|
if err := populateFieldValues(msg.ProtoReflect(), strings.Split(key, "."), values); err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -0,0 +1,187 @@
|
|||||||
|
package form
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/base64"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"reflect"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"google.golang.org/genproto/protobuf/field_mask"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
"google.golang.org/protobuf/types/known/durationpb"
|
||||||
|
"google.golang.org/protobuf/types/known/timestamppb"
|
||||||
|
"google.golang.org/protobuf/types/known/wrapperspb"
|
||||||
|
)
|
||||||
|
|
||||||
|
// EncodeMap encode proto message to url query.
|
||||||
|
func EncodeMap(msg proto.Message) (url.Values, error) {
|
||||||
|
if msg == nil || (reflect.ValueOf(msg).Kind() == reflect.Ptr && reflect.ValueOf(msg).IsNil()) {
|
||||||
|
return url.Values{}, nil
|
||||||
|
}
|
||||||
|
u := make(url.Values)
|
||||||
|
err := encodeByField(u, "", msg.ProtoReflect())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return u, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func encodeByField(u url.Values, path string, v protoreflect.Message) error {
|
||||||
|
for i := 0; i < v.Descriptor().Fields().Len(); i++ {
|
||||||
|
fd := v.Descriptor().Fields().Get(i)
|
||||||
|
var key string
|
||||||
|
var newPath string
|
||||||
|
if fd.HasJSONName() {
|
||||||
|
key = fd.JSONName()
|
||||||
|
} else {
|
||||||
|
key = fd.TextName()
|
||||||
|
}
|
||||||
|
if path == "" {
|
||||||
|
newPath = key
|
||||||
|
} else {
|
||||||
|
newPath = path + "." + key
|
||||||
|
}
|
||||||
|
|
||||||
|
if of := fd.ContainingOneof(); of != nil {
|
||||||
|
if f := v.WhichOneof(of); f != nil {
|
||||||
|
if f != fd {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
switch {
|
||||||
|
case fd.IsList():
|
||||||
|
if v.Get(fd).List().Len() > 0 {
|
||||||
|
list, err := encodeRepeatedField(fd, v.Get(fd).List())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
u[newPath] = list
|
||||||
|
}
|
||||||
|
case fd.IsMap():
|
||||||
|
if v.Get(fd).Map().Len() > 0 {
|
||||||
|
m, err := encodeMapField(fd, v.Get(fd).Map())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for k, value := range m {
|
||||||
|
u[fmt.Sprintf("%s[%s]", newPath, k)] = []string{value}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case (fd.Kind() == protoreflect.MessageKind) || (fd.Kind() == protoreflect.GroupKind):
|
||||||
|
value, err := encodeMessage(fd.Message(), v.Get(fd))
|
||||||
|
if err == nil {
|
||||||
|
u[newPath] = []string{value}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
err = encodeByField(u, newPath, v.Get(fd).Message())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
value, err := encodeField(fd, v.Get(fd))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
u[newPath] = []string{value}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func encodeRepeatedField(fieldDescriptor protoreflect.FieldDescriptor, list protoreflect.List) ([]string, error) {
|
||||||
|
var values []string
|
||||||
|
for i := 0; i < list.Len(); i++ {
|
||||||
|
value, err := encodeField(fieldDescriptor, list.Get(i))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
values = append(values, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
return values, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func encodeMapField(fieldDescriptor protoreflect.FieldDescriptor, mp protoreflect.Map) (map[string]string, error) {
|
||||||
|
m := make(map[string]string)
|
||||||
|
mp.Range(func(k protoreflect.MapKey, v protoreflect.Value) bool {
|
||||||
|
key, err := encodeField(fieldDescriptor.MapValue(), k.Value())
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
value, err := encodeField(fieldDescriptor.MapValue(), v)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
m[key] = value
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func encodeField(fieldDescriptor protoreflect.FieldDescriptor, value protoreflect.Value) (string, error) {
|
||||||
|
switch fieldDescriptor.Kind() {
|
||||||
|
case protoreflect.BoolKind:
|
||||||
|
return strconv.FormatBool(value.Bool()), nil
|
||||||
|
case protoreflect.EnumKind:
|
||||||
|
if fieldDescriptor.Enum().FullName() == "google.protobuf.NullValue" {
|
||||||
|
return "null", nil
|
||||||
|
}
|
||||||
|
desc := fieldDescriptor.Enum().Values().ByNumber(value.Enum())
|
||||||
|
return string(desc.Name()), nil
|
||||||
|
case protoreflect.StringKind:
|
||||||
|
return value.String(), nil
|
||||||
|
case protoreflect.BytesKind:
|
||||||
|
return base64.URLEncoding.EncodeToString(value.Bytes()), nil
|
||||||
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
|
return encodeMessage(fieldDescriptor.Message(), value)
|
||||||
|
default:
|
||||||
|
return fmt.Sprintf("%v", value.Interface()), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// marshalMessage marshals the fields in the given protoreflect.Message.
|
||||||
|
// If the typeURL is non-empty, then a synthetic "@type" field is injected
|
||||||
|
// containing the URL as the value.
|
||||||
|
func encodeMessage(msgDescriptor protoreflect.MessageDescriptor, value protoreflect.Value) (string, error) {
|
||||||
|
switch msgDescriptor.FullName() {
|
||||||
|
case "google.protobuf.Timestamp":
|
||||||
|
t, ok := value.Interface().(*timestamppb.Timestamp)
|
||||||
|
if !ok {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
return t.AsTime().Format(time.RFC3339Nano), nil
|
||||||
|
case "google.protobuf.Duration":
|
||||||
|
d, ok := value.Interface().(*durationpb.Duration)
|
||||||
|
if !ok {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
return d.AsDuration().String(), nil
|
||||||
|
case "google.protobuf.BytesValue":
|
||||||
|
b, ok := value.Interface().(*wrapperspb.BytesValue)
|
||||||
|
if !ok {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
return base64.StdEncoding.EncodeToString(b.Value), nil
|
||||||
|
case "google.protobuf.DoubleValue", "google.protobuf.FloatValue", "google.protobuf.Int64Value", "google.protobuf.Int32Value",
|
||||||
|
"google.protobuf.UInt64Value", "google.protobuf.UInt32Value", "google.protobuf.BoolValue", "google.protobuf.StringValue":
|
||||||
|
fd := msgDescriptor.Fields()
|
||||||
|
v := value.Message().Get(fd.ByName(protoreflect.Name("value"))).Message()
|
||||||
|
return fmt.Sprintf("%v", v.Interface()), nil
|
||||||
|
case "google.protobuf.FieldMask":
|
||||||
|
m, ok := value.Interface().(*field_mask.FieldMask)
|
||||||
|
if !ok {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
return strings.Join(m.Paths, ","), nil
|
||||||
|
default:
|
||||||
|
return "", fmt.Errorf("unsupported message type: %q", string(msgDescriptor.FullName()))
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -185,6 +185,8 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG
|
|||||||
github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4=
|
github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4=
|
||||||
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
|
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
|
||||||
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||||
|
github.com/go-playground/form/v4 v4.1.3 h1:SMUgkH+XBQkssHylgYzmy2VV4r37/pBYHgQnyqeBmmM=
|
||||||
|
github.com/go-playground/form/v4 v4.1.3/go.mod h1:q1a2BY+AQUUzhl6xA/6hBetay6dEIhMHjgvJiGo6K7U=
|
||||||
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
|
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
|
||||||
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
|
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
|
||||||
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
|
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ go 1.15
|
|||||||
require (
|
require (
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
github.com/fsnotify/fsnotify v1.4.9
|
github.com/fsnotify/fsnotify v1.4.9
|
||||||
|
github.com/go-playground/form/v4 v4.1.3
|
||||||
github.com/google/uuid v1.2.0
|
github.com/google/uuid v1.2.0
|
||||||
github.com/gorilla/mux v1.8.0
|
github.com/gorilla/mux v1.8.0
|
||||||
github.com/gorilla/schema v1.2.0
|
github.com/gorilla/schema v1.2.0
|
||||||
|
|||||||
@@ -20,6 +20,11 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
|
|||||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
|
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||||
|
github.com/go-playground/form v1.10.0 h1:0ybRwhsCPQzo8dC09q8XAVn+peG7Ld927Gbe9twmgv8=
|
||||||
|
github.com/go-playground/form v3.1.4+incompatible h1:lvKiHVxE2WvzDIoyMnWcjyiBxKt2+uFJyZcPYWsLnjI=
|
||||||
|
github.com/go-playground/form/v4 v4.1.3 h1:SMUgkH+XBQkssHylgYzmy2VV4r37/pBYHgQnyqeBmmM=
|
||||||
|
github.com/go-playground/form/v4 v4.1.3/go.mod h1:q1a2BY+AQUUzhl6xA/6hBetay6dEIhMHjgvJiGo6K7U=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
|
|||||||
@@ -0,0 +1,242 @@
|
|||||||
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// protoc-gen-go v1.27.1-devel
|
||||||
|
// protoc v3.17.2
|
||||||
|
// source: complex.proto
|
||||||
|
|
||||||
|
package complex
|
||||||
|
|
||||||
|
import (
|
||||||
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
|
reflect "reflect"
|
||||||
|
sync "sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Verify that this generated code is sufficiently up-to-date.
|
||||||
|
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||||
|
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||||
|
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||||
|
)
|
||||||
|
|
||||||
|
// SimpleMessage represents a simple message sent to the Echo service.
|
||||||
|
type Complex struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
// Id represents the message identifier.
|
||||||
|
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||||
|
NoOne string `protobuf:"bytes,2,opt,name=no_one,json=numberOne,proto3" json:"no_one,omitempty"`
|
||||||
|
Simple *Simple `protobuf:"bytes,3,opt,name=simple,json=very_simple,proto3" json:"simple,omitempty"`
|
||||||
|
Simples []string `protobuf:"bytes,4,rep,name=simples,proto3" json:"simples,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Complex) Reset() {
|
||||||
|
*x = Complex{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_complex_proto_msgTypes[0]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Complex) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Complex) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *Complex) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_complex_proto_msgTypes[0]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use Complex.ProtoReflect.Descriptor instead.
|
||||||
|
func (*Complex) Descriptor() ([]byte, []int) {
|
||||||
|
return file_complex_proto_rawDescGZIP(), []int{0}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Complex) GetId() int64 {
|
||||||
|
if x != nil {
|
||||||
|
return x.Id
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Complex) GetNoOne() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.NoOne
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Complex) GetSimple() *Simple {
|
||||||
|
if x != nil {
|
||||||
|
return x.Simple
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Complex) GetSimples() []string {
|
||||||
|
if x != nil {
|
||||||
|
return x.Simples
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type Simple struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
Component string `protobuf:"bytes,1,opt,name=component,proto3" json:"component,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Simple) Reset() {
|
||||||
|
*x = Simple{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_complex_proto_msgTypes[1]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Simple) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Simple) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *Simple) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_complex_proto_msgTypes[1]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use Simple.ProtoReflect.Descriptor instead.
|
||||||
|
func (*Simple) Descriptor() ([]byte, []int) {
|
||||||
|
return file_complex_proto_rawDescGZIP(), []int{1}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Simple) GetComponent() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.Component
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
var File_complex_proto protoreflect.FileDescriptor
|
||||||
|
|
||||||
|
var file_complex_proto_rawDesc = []byte{
|
||||||
|
0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
|
||||||
|
0x09, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7e, 0x0a, 0x07, 0x43, 0x6f,
|
||||||
|
0x6d, 0x70, 0x6c, 0x65, 0x78, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
|
0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x06, 0x6e, 0x6f, 0x5f, 0x6f, 0x6e, 0x65, 0x18,
|
||||||
|
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x6e, 0x65,
|
||||||
|
0x12, 0x2e, 0x0a, 0x06, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
|
||||||
|
0x32, 0x11, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x6d,
|
||||||
|
0x70, 0x6c, 0x65, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65,
|
||||||
|
0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
|
||||||
|
0x09, 0x52, 0x07, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x22, 0x26, 0x0a, 0x06, 0x53, 0x69,
|
||||||
|
0x6d, 0x70, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e,
|
||||||
|
0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65,
|
||||||
|
0x6e, 0x74, 0x42, 0x58, 0x5a, 0x56, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
|
||||||
|
0x2f, 0x67, 0x6f, 0x2d, 0x6b, 0x72, 0x61, 0x74, 0x6f, 0x73, 0x2f, 0x6b, 0x72, 0x61, 0x74, 0x6f,
|
||||||
|
0x73, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e,
|
||||||
|
0x2d, 0x67, 0x6f, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
|
||||||
|
0x6c, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x70,
|
||||||
|
0x6c, 0x65, 0x78, 0x2f, 0x3b, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x62, 0x06, 0x70, 0x72,
|
||||||
|
0x6f, 0x74, 0x6f, 0x33,
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
file_complex_proto_rawDescOnce sync.Once
|
||||||
|
file_complex_proto_rawDescData = file_complex_proto_rawDesc
|
||||||
|
)
|
||||||
|
|
||||||
|
func file_complex_proto_rawDescGZIP() []byte {
|
||||||
|
file_complex_proto_rawDescOnce.Do(func() {
|
||||||
|
file_complex_proto_rawDescData = protoimpl.X.CompressGZIP(file_complex_proto_rawDescData)
|
||||||
|
})
|
||||||
|
return file_complex_proto_rawDescData
|
||||||
|
}
|
||||||
|
|
||||||
|
var file_complex_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
|
||||||
|
var file_complex_proto_goTypes = []interface{}{
|
||||||
|
(*Complex)(nil), // 0: testproto.Complex
|
||||||
|
(*Simple)(nil), // 1: testproto.Simple
|
||||||
|
}
|
||||||
|
var file_complex_proto_depIdxs = []int32{
|
||||||
|
1, // 0: testproto.Complex.simple:type_name -> testproto.Simple
|
||||||
|
1, // [1:1] is the sub-list for method output_type
|
||||||
|
1, // [1:1] is the sub-list for method input_type
|
||||||
|
1, // [1:1] is the sub-list for extension type_name
|
||||||
|
1, // [1:1] is the sub-list for extension extendee
|
||||||
|
0, // [0:1] is the sub-list for field type_name
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { file_complex_proto_init() }
|
||||||
|
func file_complex_proto_init() {
|
||||||
|
if File_complex_proto != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !protoimpl.UnsafeEnabled {
|
||||||
|
file_complex_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*Complex); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_complex_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*Simple); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
type x struct{}
|
||||||
|
out := protoimpl.TypeBuilder{
|
||||||
|
File: protoimpl.DescBuilder{
|
||||||
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
|
RawDescriptor: file_complex_proto_rawDesc,
|
||||||
|
NumEnums: 0,
|
||||||
|
NumMessages: 2,
|
||||||
|
NumExtensions: 0,
|
||||||
|
NumServices: 0,
|
||||||
|
},
|
||||||
|
GoTypes: file_complex_proto_goTypes,
|
||||||
|
DependencyIndexes: file_complex_proto_depIdxs,
|
||||||
|
MessageInfos: file_complex_proto_msgTypes,
|
||||||
|
}.Build()
|
||||||
|
File_complex_proto = out.File
|
||||||
|
file_complex_proto_rawDesc = nil
|
||||||
|
file_complex_proto_goTypes = nil
|
||||||
|
file_complex_proto_depIdxs = nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "github.com/go-kratos/kratos/cmd/protoc-gen-go-http/internal/testproto/complex/;complex";
|
||||||
|
|
||||||
|
package testproto;
|
||||||
|
|
||||||
|
|
||||||
|
// SimpleMessage represents a simple message sent to the Echo service.
|
||||||
|
message Complex {
|
||||||
|
// Id represents the message identifier.
|
||||||
|
int64 id = 1;
|
||||||
|
string no_one = 2 [json_name="numberOne"];
|
||||||
|
Simple simple = 3 [json_name="very_simple"];
|
||||||
|
repeated string simples = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Simple {
|
||||||
|
string component = 1;
|
||||||
|
}
|
||||||
+120
-125
@@ -1,10 +1,10 @@
|
|||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-go v1.26.0
|
// protoc-gen-go v1.27.1-devel
|
||||||
// protoc v3.17.3
|
// protoc v3.17.2
|
||||||
// source: echo_service.proto
|
// source: echo_service.proto
|
||||||
|
|
||||||
package testproto
|
package echo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "google.golang.org/genproto/googleapis/api/annotations"
|
_ "google.golang.org/genproto/googleapis/api/annotations"
|
||||||
@@ -173,7 +173,7 @@ type SimpleMessage struct {
|
|||||||
|
|
||||||
// Id represents the message identifier.
|
// Id represents the message identifier.
|
||||||
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
|
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||||
Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"`
|
Num int64 `protobuf:"varint,2,opt,name=num,json=number,proto3" json:"num,omitempty"`
|
||||||
// Types that are assignable to Code:
|
// Types that are assignable to Code:
|
||||||
// *SimpleMessage_LineNum
|
// *SimpleMessage_LineNum
|
||||||
// *SimpleMessage_Lang
|
// *SimpleMessage_Lang
|
||||||
@@ -183,7 +183,7 @@ type SimpleMessage struct {
|
|||||||
// *SimpleMessage_En
|
// *SimpleMessage_En
|
||||||
// *SimpleMessage_No
|
// *SimpleMessage_No
|
||||||
Ext isSimpleMessage_Ext `protobuf_oneof:"ext"`
|
Ext isSimpleMessage_Ext `protobuf_oneof:"ext"`
|
||||||
Corpus Corpus `protobuf:"varint,8,opt,name=corpus,proto3,enum=testproto.Corpus" json:"corpus,omitempty"`
|
Corpus Corpus `protobuf:"varint,8,opt,name=corpus,proto3,enum=echo.Corpus" json:"corpus,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *SimpleMessage) Reset() {
|
func (x *SimpleMessage) Reset() {
|
||||||
@@ -436,108 +436,103 @@ var File_echo_service_proto protoreflect.FileDescriptor
|
|||||||
|
|
||||||
var file_echo_service_proto_rawDesc = []byte{
|
var file_echo_service_proto_rawDesc = []byte{
|
||||||
0x0a, 0x12, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70,
|
0x0a, 0x12, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
|
0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x65, 0x63, 0x68, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67,
|
||||||
0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f,
|
0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
|
||||||
0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67,
|
0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
|
||||||
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66,
|
0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f,
|
||||||
0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
|
0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67,
|
||||||
0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
|
0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75,
|
||||||
0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x46, 0x0a,
|
0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x46, 0x0a, 0x08, 0x45, 0x6d, 0x62, 0x65,
|
||||||
0x08, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x08, 0x70, 0x72, 0x6f,
|
0x64, 0x64, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73,
|
||||||
0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x70,
|
0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65,
|
||||||
0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18,
|
0x73, 0x73, 0x12, 0x14, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
|
||||||
0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x42, 0x06, 0x0a,
|
0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x6d, 0x61, 0x72, 0x6b,
|
||||||
0x04, 0x6d, 0x61, 0x72, 0x6b, 0x22, 0x84, 0x02, 0x0a, 0x0d, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65,
|
0x22, 0xf8, 0x01, 0x0a, 0x0d, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61,
|
||||||
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
|
0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
|
||||||
0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x02,
|
0x69, 0x64, 0x12, 0x13, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
|
||||||
0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x1b, 0x0a, 0x08, 0x6c, 0x69, 0x6e,
|
0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f,
|
||||||
0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x07, 0x6c,
|
0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x07, 0x6c, 0x69, 0x6e,
|
||||||
0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x04,
|
0x65, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x2b, 0x0a, 0x06,
|
0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x06, 0x73, 0x74,
|
||||||
0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74,
|
0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x63, 0x68,
|
||||||
0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65,
|
0x6f, 0x2e, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74,
|
||||||
0x64, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x02, 0x65, 0x6e, 0x18,
|
0x75, 0x73, 0x12, 0x10, 0x0a, 0x02, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01,
|
||||||
0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x02, 0x65, 0x6e, 0x12, 0x25, 0x0a, 0x02, 0x6e,
|
0x52, 0x02, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b,
|
||||||
0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72,
|
0x32, 0x0e, 0x2e, 0x65, 0x63, 0x68, 0x6f, 0x2e, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64,
|
||||||
0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x48, 0x01, 0x52, 0x02,
|
0x48, 0x01, 0x52, 0x02, 0x6e, 0x6f, 0x12, 0x24, 0x0a, 0x06, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73,
|
||||||
0x6e, 0x6f, 0x12, 0x29, 0x0a, 0x06, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01,
|
0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x65, 0x63, 0x68, 0x6f, 0x2e, 0x43, 0x6f,
|
||||||
0x28, 0x0e, 0x32, 0x11, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43,
|
0x72, 0x70, 0x75, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x42, 0x06, 0x0a, 0x04,
|
||||||
0x6f, 0x72, 0x70, 0x75, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x42, 0x06, 0x0a,
|
0x63, 0x6f, 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x65, 0x78, 0x74, 0x22, 0x85, 0x01, 0x0a, 0x0e,
|
||||||
0x04, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x65, 0x78, 0x74, 0x22, 0x85, 0x01, 0x0a,
|
0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a,
|
||||||
0x0e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12,
|
0x0a, 0x0c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01,
|
||||||
0x3a, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18,
|
0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
|
||||||
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
|
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x73,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b,
|
0x74, 0x72, 0x75, 0x63, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x37, 0x0a, 0x0b, 0x76, 0x61,
|
||||||
0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x37, 0x0a, 0x0b, 0x76,
|
0x6c, 0x75, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||||
0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
|
0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
|
||||||
0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
|
0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x69,
|
||||||
0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x46,
|
0x65, 0x6c, 0x64, 0x22, 0x7d, 0x0a, 0x14, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65,
|
||||||
0x69, 0x65, 0x6c, 0x64, 0x22, 0x82, 0x01, 0x0a, 0x14, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63,
|
0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x62,
|
||||||
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x0a,
|
0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x63, 0x68, 0x6f,
|
||||||
0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x65,
|
0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52,
|
||||||
0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d,
|
0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f,
|
||||||
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x3b, 0x0a, 0x0b,
|
0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
|
||||||
0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28,
|
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65,
|
||||||
0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61,
|
||||||
0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75,
|
0x73, 0x6b, 0x2a, 0x5a, 0x0a, 0x06, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x12, 0x0d, 0x0a, 0x09,
|
||||||
0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x2a, 0x5a, 0x0a, 0x06, 0x43, 0x6f, 0x72,
|
0x55, 0x4e, 0x49, 0x56, 0x45, 0x52, 0x53, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x57,
|
||||||
0x70, 0x75, 0x73, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x49, 0x56, 0x45, 0x52, 0x53, 0x41, 0x4c,
|
0x45, 0x42, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x53, 0x10, 0x02,
|
||||||
0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x57, 0x45, 0x42, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x49,
|
0x12, 0x09, 0x0a, 0x05, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4e,
|
||||||
0x4d, 0x41, 0x47, 0x45, 0x53, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x4f, 0x43, 0x41, 0x4c,
|
0x45, 0x57, 0x53, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x52, 0x4f, 0x44, 0x55, 0x43, 0x54,
|
||||||
0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x45, 0x57, 0x53, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08,
|
0x53, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x10, 0x06, 0x32, 0x9c,
|
||||||
0x50, 0x52, 0x4f, 0x44, 0x55, 0x43, 0x54, 0x53, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x49,
|
0x05, 0x0a, 0x0b, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xe8,
|
||||||
0x44, 0x45, 0x4f, 0x10, 0x06, 0x32, 0xcf, 0x05, 0x0a, 0x0b, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65,
|
0x01, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x13, 0x2e, 0x65, 0x63, 0x68, 0x6f, 0x2e, 0x53,
|
||||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xf2, 0x01, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x18,
|
0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x13, 0x2e, 0x65,
|
||||||
0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c,
|
0x63, 0x68, 0x6f, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
|
||||||
0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70,
|
0x65, 0x22, 0xb5, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xae, 0x01, 0x22, 0x15, 0x2f, 0x76, 0x31,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61,
|
0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69,
|
||||||
0x67, 0x65, 0x22, 0xb5, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xae, 0x01, 0x22, 0x15, 0x2f, 0x76,
|
0x64, 0x7d, 0x5a, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,
|
||||||
0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b,
|
|
||||||
0x69, 0x64, 0x7d, 0x5a, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70,
|
|
||||||
0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x75,
|
|
||||||
0x6d, 0x7d, 0x5a, 0x24, 0x12, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,
|
|
||||||
0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x75, 0x6d,
|
0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x75, 0x6d,
|
||||||
0x7d, 0x2f, 0x7b, 0x6c, 0x61, 0x6e, 0x67, 0x7d, 0x5a, 0x31, 0x12, 0x2f, 0x2f, 0x76, 0x31, 0x2f,
|
0x7d, 0x5a, 0x24, 0x12, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,
|
||||||
0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x31, 0x2f, 0x7b, 0x69,
|
0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x75, 0x6d, 0x7d,
|
||||||
0x64, 0x7d, 0x2f, 0x7b, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x7d, 0x2f, 0x7b, 0x73,
|
0x2f, 0x7b, 0x6c, 0x61, 0x6e, 0x67, 0x7d, 0x5a, 0x31, 0x12, 0x2f, 0x2f, 0x76, 0x31, 0x2f, 0x65,
|
||||||
0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x65, 0x7d, 0x5a, 0x1d, 0x12, 0x1b, 0x2f,
|
0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x31, 0x2f, 0x7b, 0x69, 0x64,
|
||||||
0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x32,
|
0x7d, 0x2f, 0x7b, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x7d, 0x2f, 0x7b, 0x73, 0x74,
|
||||||
0x2f, 0x7b, 0x6e, 0x6f, 0x2e, 0x6e, 0x6f, 0x74, 0x65, 0x7d, 0x12, 0x60, 0x0a, 0x08, 0x45, 0x63,
|
0x61, 0x74, 0x75, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x65, 0x7d, 0x5a, 0x1d, 0x12, 0x1b, 0x2f, 0x76,
|
||||||
0x68, 0x6f, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x18, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f,
|
0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x32, 0x2f,
|
||||||
0x74, 0x6f, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
|
0x7b, 0x6e, 0x6f, 0x2e, 0x6e, 0x6f, 0x74, 0x65, 0x7d, 0x12, 0x56, 0x0a, 0x08, 0x45, 0x63, 0x68,
|
||||||
0x1a, 0x18, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x6d,
|
0x6f, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x13, 0x2e, 0x65, 0x63, 0x68, 0x6f, 0x2e, 0x53, 0x69, 0x6d,
|
||||||
0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93,
|
0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x13, 0x2e, 0x65, 0x63, 0x68,
|
||||||
0x02, 0x1a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f,
|
0x6f, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22,
|
||||||
0x65, 0x63, 0x68, 0x6f, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x85, 0x01, 0x0a,
|
0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61,
|
||||||
0x10, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64,
|
0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x3a, 0x01,
|
||||||
0x79, 0x12, 0x1f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x79,
|
0x2a, 0x12, 0x7b, 0x0a, 0x10, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||||
0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61,
|
0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1a, 0x2e, 0x65, 0x63, 0x68, 0x6f, 0x2e, 0x44, 0x79, 0x6e,
|
||||||
0x74, 0x65, 0x1a, 0x1f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44,
|
0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74,
|
||||||
0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64,
|
0x65, 0x1a, 0x1a, 0x2e, 0x65, 0x63, 0x68, 0x6f, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63,
|
||||||
0x61, 0x74, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x1e, 0x2f, 0x76, 0x31,
|
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x2f, 0x82,
|
||||||
0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x72, 0x65,
|
0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70,
|
||||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x3a, 0x01, 0x2a, 0x62, 0x04,
|
0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||||
0x62, 0x6f, 0x64, 0x79, 0x12, 0x6c, 0x0a, 0x0a, 0x45, 0x63, 0x68, 0x6f, 0x44, 0x65, 0x6c, 0x65,
|
0x5f, 0x62, 0x6f, 0x64, 0x79, 0x3a, 0x01, 0x2a, 0x62, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x62,
|
||||||
0x74, 0x65, 0x12, 0x18, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53,
|
0x0a, 0x0a, 0x45, 0x63, 0x68, 0x6f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x13, 0x2e, 0x65,
|
||||||
0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x18, 0x2e, 0x74,
|
0x63, 0x68, 0x6f, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
|
||||||
0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d,
|
0x65, 0x1a, 0x13, 0x2e, 0x65, 0x63, 0x68, 0x6f, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d,
|
||||||
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x2a, 0x22,
|
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x2a, 0x22,
|
||||||
0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f,
|
0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f,
|
||||||
0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x75,
|
0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x75,
|
||||||
0x6d, 0x7d, 0x12, 0x73, 0x0a, 0x09, 0x45, 0x63, 0x68, 0x6f, 0x50, 0x61, 0x74, 0x63, 0x68, 0x12,
|
0x6d, 0x7d, 0x12, 0x69, 0x0a, 0x09, 0x45, 0x63, 0x68, 0x6f, 0x50, 0x61, 0x74, 0x63, 0x68, 0x12,
|
||||||
0x1f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x79, 0x6e, 0x61,
|
0x1a, 0x2e, 0x65, 0x63, 0x68, 0x6f, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65,
|
||||||
0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
|
0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x1a, 0x1a, 0x2e, 0x65, 0x63,
|
||||||
0x1a, 0x1f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x79, 0x6e,
|
0x68, 0x6f, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
|
||||||
0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74,
|
0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x32,
|
||||||
0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x32, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x65,
|
0x16, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68,
|
||||||
0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x70, 0x61, 0x74, 0x63,
|
0x6f, 0x5f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x42, 0x51, 0x5a,
|
||||||
0x68, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x42, 0x51, 0x5a, 0x4f, 0x67, 0x69, 0x74, 0x68, 0x75,
|
0x4f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2d, 0x6b,
|
||||||
0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2d, 0x6b, 0x72, 0x61, 0x74, 0x6f, 0x73, 0x2f,
|
0x72, 0x61, 0x74, 0x6f, 0x73, 0x2f, 0x6b, 0x72, 0x61, 0x74, 0x6f, 0x73, 0x2f, 0x63, 0x6d, 0x64,
|
||||||
0x6b, 0x72, 0x61, 0x74, 0x6f, 0x73, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2d, 0x68,
|
||||||
0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x69, 0x6e,
|
0x74, 0x74, 0x70, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x73,
|
||||||
0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3b, 0x65, 0x63, 0x68, 0x6f,
|
||||||
0x3b, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
|
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
0x6f, 0x33,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -555,33 +550,33 @@ func file_echo_service_proto_rawDescGZIP() []byte {
|
|||||||
var file_echo_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
|
var file_echo_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
|
||||||
var file_echo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
|
var file_echo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
|
||||||
var file_echo_service_proto_goTypes = []interface{}{
|
var file_echo_service_proto_goTypes = []interface{}{
|
||||||
(Corpus)(0), // 0: testproto.Corpus
|
(Corpus)(0), // 0: echo.Corpus
|
||||||
(*Embedded)(nil), // 1: testproto.Embedded
|
(*Embedded)(nil), // 1: echo.Embedded
|
||||||
(*SimpleMessage)(nil), // 2: testproto.SimpleMessage
|
(*SimpleMessage)(nil), // 2: echo.SimpleMessage
|
||||||
(*DynamicMessage)(nil), // 3: testproto.DynamicMessage
|
(*DynamicMessage)(nil), // 3: echo.DynamicMessage
|
||||||
(*DynamicMessageUpdate)(nil), // 4: testproto.DynamicMessageUpdate
|
(*DynamicMessageUpdate)(nil), // 4: echo.DynamicMessageUpdate
|
||||||
(*structpb.Struct)(nil), // 5: google.protobuf.Struct
|
(*structpb.Struct)(nil), // 5: google.protobuf.Struct
|
||||||
(*structpb.Value)(nil), // 6: google.protobuf.Value
|
(*structpb.Value)(nil), // 6: google.protobuf.Value
|
||||||
(*fieldmaskpb.FieldMask)(nil), // 7: google.protobuf.FieldMask
|
(*fieldmaskpb.FieldMask)(nil), // 7: google.protobuf.FieldMask
|
||||||
}
|
}
|
||||||
var file_echo_service_proto_depIdxs = []int32{
|
var file_echo_service_proto_depIdxs = []int32{
|
||||||
1, // 0: testproto.SimpleMessage.status:type_name -> testproto.Embedded
|
1, // 0: echo.SimpleMessage.status:type_name -> echo.Embedded
|
||||||
1, // 1: testproto.SimpleMessage.no:type_name -> testproto.Embedded
|
1, // 1: echo.SimpleMessage.no:type_name -> echo.Embedded
|
||||||
0, // 2: testproto.SimpleMessage.corpus:type_name -> testproto.Corpus
|
0, // 2: echo.SimpleMessage.corpus:type_name -> echo.Corpus
|
||||||
5, // 3: testproto.DynamicMessage.struct_field:type_name -> google.protobuf.Struct
|
5, // 3: echo.DynamicMessage.struct_field:type_name -> google.protobuf.Struct
|
||||||
6, // 4: testproto.DynamicMessage.value_field:type_name -> google.protobuf.Value
|
6, // 4: echo.DynamicMessage.value_field:type_name -> google.protobuf.Value
|
||||||
3, // 5: testproto.DynamicMessageUpdate.body:type_name -> testproto.DynamicMessage
|
3, // 5: echo.DynamicMessageUpdate.body:type_name -> echo.DynamicMessage
|
||||||
7, // 6: testproto.DynamicMessageUpdate.update_mask:type_name -> google.protobuf.FieldMask
|
7, // 6: echo.DynamicMessageUpdate.update_mask:type_name -> google.protobuf.FieldMask
|
||||||
2, // 7: testproto.EchoService.Echo:input_type -> testproto.SimpleMessage
|
2, // 7: echo.EchoService.Echo:input_type -> echo.SimpleMessage
|
||||||
2, // 8: testproto.EchoService.EchoBody:input_type -> testproto.SimpleMessage
|
2, // 8: echo.EchoService.EchoBody:input_type -> echo.SimpleMessage
|
||||||
4, // 9: testproto.EchoService.EchoResponseBody:input_type -> testproto.DynamicMessageUpdate
|
4, // 9: echo.EchoService.EchoResponseBody:input_type -> echo.DynamicMessageUpdate
|
||||||
2, // 10: testproto.EchoService.EchoDelete:input_type -> testproto.SimpleMessage
|
2, // 10: echo.EchoService.EchoDelete:input_type -> echo.SimpleMessage
|
||||||
4, // 11: testproto.EchoService.EchoPatch:input_type -> testproto.DynamicMessageUpdate
|
4, // 11: echo.EchoService.EchoPatch:input_type -> echo.DynamicMessageUpdate
|
||||||
2, // 12: testproto.EchoService.Echo:output_type -> testproto.SimpleMessage
|
2, // 12: echo.EchoService.Echo:output_type -> echo.SimpleMessage
|
||||||
2, // 13: testproto.EchoService.EchoBody:output_type -> testproto.SimpleMessage
|
2, // 13: echo.EchoService.EchoBody:output_type -> echo.SimpleMessage
|
||||||
4, // 14: testproto.EchoService.EchoResponseBody:output_type -> testproto.DynamicMessageUpdate
|
4, // 14: echo.EchoService.EchoResponseBody:output_type -> echo.DynamicMessageUpdate
|
||||||
2, // 15: testproto.EchoService.EchoDelete:output_type -> testproto.SimpleMessage
|
2, // 15: echo.EchoService.EchoDelete:output_type -> echo.SimpleMessage
|
||||||
4, // 16: testproto.EchoService.EchoPatch:output_type -> testproto.DynamicMessageUpdate
|
4, // 16: echo.EchoService.EchoPatch:output_type -> echo.DynamicMessageUpdate
|
||||||
12, // [12:17] is the sub-list for method output_type
|
12, // [12:17] is the sub-list for method output_type
|
||||||
7, // [7:12] is the sub-list for method input_type
|
7, // [7:12] is the sub-list for method input_type
|
||||||
7, // [7:7] is the sub-list for extension type_name
|
7, // [7:7] is the sub-list for extension type_name
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
option go_package = "github.com/go-kratos/kratos/cmd/protoc-gen-go-http/internal/testproto;testproto";
|
package echo;
|
||||||
|
|
||||||
package testproto;
|
option go_package = "github.com/go-kratos/kratos/cmd/protoc-gen-go-http/internal/testproto/echo;echo";
|
||||||
|
|
||||||
import "google/api/annotations.proto";
|
import "google/api/annotations.proto";
|
||||||
import "google/protobuf/field_mask.proto";
|
import "google/protobuf/field_mask.proto";
|
||||||
@@ -30,7 +30,7 @@ message Embedded {
|
|||||||
message SimpleMessage {
|
message SimpleMessage {
|
||||||
// Id represents the message identifier.
|
// Id represents the message identifier.
|
||||||
string id = 1;
|
string id = 1;
|
||||||
int64 num = 2;
|
int64 num = 2 [json_name="number"];
|
||||||
oneof code {
|
oneof code {
|
||||||
int64 line_num = 3;
|
int64 line_num = 3;
|
||||||
string lang = 4;
|
string lang = 4;
|
||||||
+12
-12
@@ -1,6 +1,6 @@
|
|||||||
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
|
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
|
||||||
|
|
||||||
package testproto
|
package echo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
context "context"
|
context "context"
|
||||||
@@ -43,7 +43,7 @@ func NewEchoServiceClient(cc grpc.ClientConnInterface) EchoServiceClient {
|
|||||||
|
|
||||||
func (c *echoServiceClient) Echo(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) {
|
func (c *echoServiceClient) Echo(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) {
|
||||||
out := new(SimpleMessage)
|
out := new(SimpleMessage)
|
||||||
err := c.cc.Invoke(ctx, "/testproto.EchoService/Echo", in, out, opts...)
|
err := c.cc.Invoke(ctx, "/echo.EchoService/Echo", in, out, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -52,7 +52,7 @@ func (c *echoServiceClient) Echo(ctx context.Context, in *SimpleMessage, opts ..
|
|||||||
|
|
||||||
func (c *echoServiceClient) EchoBody(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) {
|
func (c *echoServiceClient) EchoBody(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) {
|
||||||
out := new(SimpleMessage)
|
out := new(SimpleMessage)
|
||||||
err := c.cc.Invoke(ctx, "/testproto.EchoService/EchoBody", in, out, opts...)
|
err := c.cc.Invoke(ctx, "/echo.EchoService/EchoBody", in, out, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -61,7 +61,7 @@ func (c *echoServiceClient) EchoBody(ctx context.Context, in *SimpleMessage, opt
|
|||||||
|
|
||||||
func (c *echoServiceClient) EchoResponseBody(ctx context.Context, in *DynamicMessageUpdate, opts ...grpc.CallOption) (*DynamicMessageUpdate, error) {
|
func (c *echoServiceClient) EchoResponseBody(ctx context.Context, in *DynamicMessageUpdate, opts ...grpc.CallOption) (*DynamicMessageUpdate, error) {
|
||||||
out := new(DynamicMessageUpdate)
|
out := new(DynamicMessageUpdate)
|
||||||
err := c.cc.Invoke(ctx, "/testproto.EchoService/EchoResponseBody", in, out, opts...)
|
err := c.cc.Invoke(ctx, "/echo.EchoService/EchoResponseBody", in, out, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -70,7 +70,7 @@ func (c *echoServiceClient) EchoResponseBody(ctx context.Context, in *DynamicMes
|
|||||||
|
|
||||||
func (c *echoServiceClient) EchoDelete(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) {
|
func (c *echoServiceClient) EchoDelete(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) {
|
||||||
out := new(SimpleMessage)
|
out := new(SimpleMessage)
|
||||||
err := c.cc.Invoke(ctx, "/testproto.EchoService/EchoDelete", in, out, opts...)
|
err := c.cc.Invoke(ctx, "/echo.EchoService/EchoDelete", in, out, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -79,7 +79,7 @@ func (c *echoServiceClient) EchoDelete(ctx context.Context, in *SimpleMessage, o
|
|||||||
|
|
||||||
func (c *echoServiceClient) EchoPatch(ctx context.Context, in *DynamicMessageUpdate, opts ...grpc.CallOption) (*DynamicMessageUpdate, error) {
|
func (c *echoServiceClient) EchoPatch(ctx context.Context, in *DynamicMessageUpdate, opts ...grpc.CallOption) (*DynamicMessageUpdate, error) {
|
||||||
out := new(DynamicMessageUpdate)
|
out := new(DynamicMessageUpdate)
|
||||||
err := c.cc.Invoke(ctx, "/testproto.EchoService/EchoPatch", in, out, opts...)
|
err := c.cc.Invoke(ctx, "/echo.EchoService/EchoPatch", in, out, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -148,7 +148,7 @@ func _EchoService_Echo_Handler(srv interface{}, ctx context.Context, dec func(in
|
|||||||
}
|
}
|
||||||
info := &grpc.UnaryServerInfo{
|
info := &grpc.UnaryServerInfo{
|
||||||
Server: srv,
|
Server: srv,
|
||||||
FullMethod: "/testproto.EchoService/Echo",
|
FullMethod: "/echo.EchoService/Echo",
|
||||||
}
|
}
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.(EchoServiceServer).Echo(ctx, req.(*SimpleMessage))
|
return srv.(EchoServiceServer).Echo(ctx, req.(*SimpleMessage))
|
||||||
@@ -166,7 +166,7 @@ func _EchoService_EchoBody_Handler(srv interface{}, ctx context.Context, dec fun
|
|||||||
}
|
}
|
||||||
info := &grpc.UnaryServerInfo{
|
info := &grpc.UnaryServerInfo{
|
||||||
Server: srv,
|
Server: srv,
|
||||||
FullMethod: "/testproto.EchoService/EchoBody",
|
FullMethod: "/echo.EchoService/EchoBody",
|
||||||
}
|
}
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.(EchoServiceServer).EchoBody(ctx, req.(*SimpleMessage))
|
return srv.(EchoServiceServer).EchoBody(ctx, req.(*SimpleMessage))
|
||||||
@@ -184,7 +184,7 @@ func _EchoService_EchoResponseBody_Handler(srv interface{}, ctx context.Context,
|
|||||||
}
|
}
|
||||||
info := &grpc.UnaryServerInfo{
|
info := &grpc.UnaryServerInfo{
|
||||||
Server: srv,
|
Server: srv,
|
||||||
FullMethod: "/testproto.EchoService/EchoResponseBody",
|
FullMethod: "/echo.EchoService/EchoResponseBody",
|
||||||
}
|
}
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.(EchoServiceServer).EchoResponseBody(ctx, req.(*DynamicMessageUpdate))
|
return srv.(EchoServiceServer).EchoResponseBody(ctx, req.(*DynamicMessageUpdate))
|
||||||
@@ -202,7 +202,7 @@ func _EchoService_EchoDelete_Handler(srv interface{}, ctx context.Context, dec f
|
|||||||
}
|
}
|
||||||
info := &grpc.UnaryServerInfo{
|
info := &grpc.UnaryServerInfo{
|
||||||
Server: srv,
|
Server: srv,
|
||||||
FullMethod: "/testproto.EchoService/EchoDelete",
|
FullMethod: "/echo.EchoService/EchoDelete",
|
||||||
}
|
}
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.(EchoServiceServer).EchoDelete(ctx, req.(*SimpleMessage))
|
return srv.(EchoServiceServer).EchoDelete(ctx, req.(*SimpleMessage))
|
||||||
@@ -220,7 +220,7 @@ func _EchoService_EchoPatch_Handler(srv interface{}, ctx context.Context, dec fu
|
|||||||
}
|
}
|
||||||
info := &grpc.UnaryServerInfo{
|
info := &grpc.UnaryServerInfo{
|
||||||
Server: srv,
|
Server: srv,
|
||||||
FullMethod: "/testproto.EchoService/EchoPatch",
|
FullMethod: "/echo.EchoService/EchoPatch",
|
||||||
}
|
}
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.(EchoServiceServer).EchoPatch(ctx, req.(*DynamicMessageUpdate))
|
return srv.(EchoServiceServer).EchoPatch(ctx, req.(*DynamicMessageUpdate))
|
||||||
@@ -232,7 +232,7 @@ func _EchoService_EchoPatch_Handler(srv interface{}, ctx context.Context, dec fu
|
|||||||
// It's only intended for direct use with grpc.RegisterService,
|
// It's only intended for direct use with grpc.RegisterService,
|
||||||
// and not to be introspected or modified (even as a copy)
|
// and not to be introspected or modified (even as a copy)
|
||||||
var EchoService_ServiceDesc = grpc.ServiceDesc{
|
var EchoService_ServiceDesc = grpc.ServiceDesc{
|
||||||
ServiceName: "testproto.EchoService",
|
ServiceName: "echo.EchoService",
|
||||||
HandlerType: (*EchoServiceServer)(nil),
|
HandlerType: (*EchoServiceServer)(nil),
|
||||||
Methods: []grpc.MethodDesc{
|
Methods: []grpc.MethodDesc{
|
||||||
{
|
{
|
||||||
+15
-15
@@ -2,7 +2,7 @@
|
|||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-go-http v2.0.0-rc7
|
// protoc-gen-go-http v2.0.0-rc7
|
||||||
|
|
||||||
package testproto
|
package echo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
context "context"
|
context "context"
|
||||||
@@ -47,7 +47,7 @@ func _EchoService_Echo0_HTTP_Handler(srv EchoServiceHTTPServer) func(ctx http.Co
|
|||||||
if err := ctx.BindVars(&in); err != nil {
|
if err := ctx.BindVars(&in); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
http.SetOperation(ctx, "/testproto.EchoService/Echo")
|
http.SetOperation(ctx, "/echo.EchoService/Echo")
|
||||||
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.Echo(ctx, req.(*SimpleMessage))
|
return srv.Echo(ctx, req.(*SimpleMessage))
|
||||||
})
|
})
|
||||||
@@ -69,7 +69,7 @@ func _EchoService_Echo1_HTTP_Handler(srv EchoServiceHTTPServer) func(ctx http.Co
|
|||||||
if err := ctx.BindVars(&in); err != nil {
|
if err := ctx.BindVars(&in); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
http.SetOperation(ctx, "/testproto.EchoService/Echo")
|
http.SetOperation(ctx, "/echo.EchoService/Echo")
|
||||||
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.Echo(ctx, req.(*SimpleMessage))
|
return srv.Echo(ctx, req.(*SimpleMessage))
|
||||||
})
|
})
|
||||||
@@ -91,7 +91,7 @@ func _EchoService_Echo2_HTTP_Handler(srv EchoServiceHTTPServer) func(ctx http.Co
|
|||||||
if err := ctx.BindVars(&in); err != nil {
|
if err := ctx.BindVars(&in); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
http.SetOperation(ctx, "/testproto.EchoService/Echo")
|
http.SetOperation(ctx, "/echo.EchoService/Echo")
|
||||||
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.Echo(ctx, req.(*SimpleMessage))
|
return srv.Echo(ctx, req.(*SimpleMessage))
|
||||||
})
|
})
|
||||||
@@ -113,7 +113,7 @@ func _EchoService_Echo3_HTTP_Handler(srv EchoServiceHTTPServer) func(ctx http.Co
|
|||||||
if err := ctx.BindVars(&in); err != nil {
|
if err := ctx.BindVars(&in); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
http.SetOperation(ctx, "/testproto.EchoService/Echo")
|
http.SetOperation(ctx, "/echo.EchoService/Echo")
|
||||||
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.Echo(ctx, req.(*SimpleMessage))
|
return srv.Echo(ctx, req.(*SimpleMessage))
|
||||||
})
|
})
|
||||||
@@ -135,7 +135,7 @@ func _EchoService_Echo4_HTTP_Handler(srv EchoServiceHTTPServer) func(ctx http.Co
|
|||||||
if err := ctx.BindVars(&in); err != nil {
|
if err := ctx.BindVars(&in); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
http.SetOperation(ctx, "/testproto.EchoService/Echo")
|
http.SetOperation(ctx, "/echo.EchoService/Echo")
|
||||||
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.Echo(ctx, req.(*SimpleMessage))
|
return srv.Echo(ctx, req.(*SimpleMessage))
|
||||||
})
|
})
|
||||||
@@ -154,7 +154,7 @@ func _EchoService_EchoBody0_HTTP_Handler(srv EchoServiceHTTPServer) func(ctx htt
|
|||||||
if err := ctx.Bind(&in); err != nil {
|
if err := ctx.Bind(&in); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
http.SetOperation(ctx, "/testproto.EchoService/EchoBody")
|
http.SetOperation(ctx, "/echo.EchoService/EchoBody")
|
||||||
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.EchoBody(ctx, req.(*SimpleMessage))
|
return srv.EchoBody(ctx, req.(*SimpleMessage))
|
||||||
})
|
})
|
||||||
@@ -173,7 +173,7 @@ func _EchoService_EchoResponseBody0_HTTP_Handler(srv EchoServiceHTTPServer) func
|
|||||||
if err := ctx.Bind(&in); err != nil {
|
if err := ctx.Bind(&in); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
http.SetOperation(ctx, "/testproto.EchoService/EchoResponseBody")
|
http.SetOperation(ctx, "/echo.EchoService/EchoResponseBody")
|
||||||
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.EchoResponseBody(ctx, req.(*DynamicMessageUpdate))
|
return srv.EchoResponseBody(ctx, req.(*DynamicMessageUpdate))
|
||||||
})
|
})
|
||||||
@@ -195,7 +195,7 @@ func _EchoService_EchoDelete0_HTTP_Handler(srv EchoServiceHTTPServer) func(ctx h
|
|||||||
if err := ctx.BindVars(&in); err != nil {
|
if err := ctx.BindVars(&in); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
http.SetOperation(ctx, "/testproto.EchoService/EchoDelete")
|
http.SetOperation(ctx, "/echo.EchoService/EchoDelete")
|
||||||
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.EchoDelete(ctx, req.(*SimpleMessage))
|
return srv.EchoDelete(ctx, req.(*SimpleMessage))
|
||||||
})
|
})
|
||||||
@@ -214,7 +214,7 @@ func _EchoService_EchoPatch0_HTTP_Handler(srv EchoServiceHTTPServer) func(ctx ht
|
|||||||
if err := ctx.Bind(&in.Body); err != nil {
|
if err := ctx.Bind(&in.Body); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
http.SetOperation(ctx, "/testproto.EchoService/EchoPatch")
|
http.SetOperation(ctx, "/echo.EchoService/EchoPatch")
|
||||||
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
h := ctx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.EchoPatch(ctx, req.(*DynamicMessageUpdate))
|
return srv.EchoPatch(ctx, req.(*DynamicMessageUpdate))
|
||||||
})
|
})
|
||||||
@@ -247,7 +247,7 @@ func (c *EchoServiceHTTPClientImpl) Echo(ctx context.Context, in *SimpleMessage,
|
|||||||
var out SimpleMessage
|
var out SimpleMessage
|
||||||
pattern := "/v1/example/echo/{id}"
|
pattern := "/v1/example/echo/{id}"
|
||||||
path := binding.EncodeURL(pattern, in, true)
|
path := binding.EncodeURL(pattern, in, true)
|
||||||
opts = append(opts, http.Operation("/testproto.EchoService/Echo"))
|
opts = append(opts, http.Operation("/echo.EchoService/Echo"))
|
||||||
opts = append(opts, http.PathTemplate(pattern))
|
opts = append(opts, http.PathTemplate(pattern))
|
||||||
err := c.cc.Invoke(ctx, "POST", path, nil, &out, opts...)
|
err := c.cc.Invoke(ctx, "POST", path, nil, &out, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -260,7 +260,7 @@ func (c *EchoServiceHTTPClientImpl) EchoBody(ctx context.Context, in *SimpleMess
|
|||||||
var out SimpleMessage
|
var out SimpleMessage
|
||||||
pattern := "/v1/example/echo_body"
|
pattern := "/v1/example/echo_body"
|
||||||
path := binding.EncodeURL(pattern, in, false)
|
path := binding.EncodeURL(pattern, in, false)
|
||||||
opts = append(opts, http.Operation("/testproto.EchoService/EchoBody"))
|
opts = append(opts, http.Operation("/echo.EchoService/EchoBody"))
|
||||||
opts = append(opts, http.PathTemplate(pattern))
|
opts = append(opts, http.PathTemplate(pattern))
|
||||||
err := c.cc.Invoke(ctx, "POST", path, in, &out, opts...)
|
err := c.cc.Invoke(ctx, "POST", path, in, &out, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -273,7 +273,7 @@ func (c *EchoServiceHTTPClientImpl) EchoDelete(ctx context.Context, in *SimpleMe
|
|||||||
var out SimpleMessage
|
var out SimpleMessage
|
||||||
pattern := "/v1/example/echo_delete/{id}/{num}"
|
pattern := "/v1/example/echo_delete/{id}/{num}"
|
||||||
path := binding.EncodeURL(pattern, in, true)
|
path := binding.EncodeURL(pattern, in, true)
|
||||||
opts = append(opts, http.Operation("/testproto.EchoService/EchoDelete"))
|
opts = append(opts, http.Operation("/echo.EchoService/EchoDelete"))
|
||||||
opts = append(opts, http.PathTemplate(pattern))
|
opts = append(opts, http.PathTemplate(pattern))
|
||||||
err := c.cc.Invoke(ctx, "DELETE", path, nil, &out, opts...)
|
err := c.cc.Invoke(ctx, "DELETE", path, nil, &out, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -286,7 +286,7 @@ func (c *EchoServiceHTTPClientImpl) EchoPatch(ctx context.Context, in *DynamicMe
|
|||||||
var out DynamicMessageUpdate
|
var out DynamicMessageUpdate
|
||||||
pattern := "/v1/example/echo_patch"
|
pattern := "/v1/example/echo_patch"
|
||||||
path := binding.EncodeURL(pattern, in, false)
|
path := binding.EncodeURL(pattern, in, false)
|
||||||
opts = append(opts, http.Operation("/testproto.EchoService/EchoPatch"))
|
opts = append(opts, http.Operation("/echo.EchoService/EchoPatch"))
|
||||||
opts = append(opts, http.PathTemplate(pattern))
|
opts = append(opts, http.PathTemplate(pattern))
|
||||||
err := c.cc.Invoke(ctx, "PATCH", path, in.Body, &out, opts...)
|
err := c.cc.Invoke(ctx, "PATCH", path, in.Body, &out, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -299,7 +299,7 @@ func (c *EchoServiceHTTPClientImpl) EchoResponseBody(ctx context.Context, in *Dy
|
|||||||
var out DynamicMessageUpdate
|
var out DynamicMessageUpdate
|
||||||
pattern := "/v1/example/echo_response_body"
|
pattern := "/v1/example/echo_response_body"
|
||||||
path := binding.EncodeURL(pattern, in, false)
|
path := binding.EncodeURL(pattern, in, false)
|
||||||
opts = append(opts, http.Operation("/testproto.EchoService/EchoResponseBody"))
|
opts = append(opts, http.Operation("/echo.EchoService/EchoResponseBody"))
|
||||||
opts = append(opts, http.PathTemplate(pattern))
|
opts = append(opts, http.PathTemplate(pattern))
|
||||||
err := c.cc.Invoke(ctx, "POST", path, in, &out.Body, opts...)
|
err := c.cc.Invoke(ctx, "POST", path, in, &out.Body, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package testproto
|
package echo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
context "context"
|
context "context"
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
package testproto
|
package echo
|
||||||
|
|
||||||
//go:generate protoc --proto_path=. --proto_path=../../third_party --go_out=paths=source_relative:. --go-grpc_out=paths=source_relative:. --go-http_out=paths=source_relative:. echo_service.proto stream.proto
|
//go:generate protoc --proto_path=. --proto_path=../../third_party --go_out=paths=source_relative:. --go-grpc_out=paths=source_relative:. --go-http_out=paths=source_relative:. echo_service.proto stream.proto
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// protoc-gen-go v1.27.1-devel
|
||||||
|
// protoc v3.17.2
|
||||||
|
// source: stream.proto
|
||||||
|
|
||||||
|
package echo
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "google.golang.org/genproto/googleapis/api/annotations"
|
||||||
|
httpbody "google.golang.org/genproto/googleapis/api/httpbody"
|
||||||
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
|
emptypb "google.golang.org/protobuf/types/known/emptypb"
|
||||||
|
reflect "reflect"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Verify that this generated code is sufficiently up-to-date.
|
||||||
|
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||||
|
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||||
|
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||||
|
)
|
||||||
|
|
||||||
|
var File_stream_proto protoreflect.FileDescriptor
|
||||||
|
|
||||||
|
var file_stream_proto_rawDesc = []byte{
|
||||||
|
0x0a, 0x0c, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04,
|
||||||
|
0x65, 0x63, 0x68, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69,
|
||||||
|
0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||||
|
0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x68,
|
||||||
|
0x74, 0x74, 0x70, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67,
|
||||||
|
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65,
|
||||||
|
0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x69, 0x0a, 0x0d, 0x53, 0x74,
|
||||||
|
0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x58, 0x0a, 0x08, 0x44,
|
||||||
|
0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
|
||||||
|
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a,
|
||||||
|
0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74,
|
||||||
|
0x70, 0x42, 0x6f, 0x64, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f,
|
||||||
|
0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x6c,
|
||||||
|
0x6f, 0x61, 0x64, 0x30, 0x01, 0x42, 0x51, 0x5a, 0x4f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
|
||||||
|
0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2d, 0x6b, 0x72, 0x61, 0x74, 0x6f, 0x73, 0x2f, 0x6b, 0x72,
|
||||||
|
0x61, 0x74, 0x6f, 0x73, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d,
|
||||||
|
0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x2f, 0x69, 0x6e, 0x74, 0x65,
|
||||||
|
0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65,
|
||||||
|
0x63, 0x68, 0x6f, 0x3b, 0x65, 0x63, 0x68, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
|
}
|
||||||
|
|
||||||
|
var file_stream_proto_goTypes = []interface{}{
|
||||||
|
(*emptypb.Empty)(nil), // 0: google.protobuf.Empty
|
||||||
|
(*httpbody.HttpBody)(nil), // 1: google.api.HttpBody
|
||||||
|
}
|
||||||
|
var file_stream_proto_depIdxs = []int32{
|
||||||
|
0, // 0: echo.StreamService.Download:input_type -> google.protobuf.Empty
|
||||||
|
1, // 1: echo.StreamService.Download:output_type -> google.api.HttpBody
|
||||||
|
1, // [1:2] is the sub-list for method output_type
|
||||||
|
0, // [0:1] is the sub-list for method input_type
|
||||||
|
0, // [0:0] is the sub-list for extension type_name
|
||||||
|
0, // [0:0] is the sub-list for extension extendee
|
||||||
|
0, // [0:0] is the sub-list for field type_name
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { file_stream_proto_init() }
|
||||||
|
func file_stream_proto_init() {
|
||||||
|
if File_stream_proto != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
type x struct{}
|
||||||
|
out := protoimpl.TypeBuilder{
|
||||||
|
File: protoimpl.DescBuilder{
|
||||||
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
|
RawDescriptor: file_stream_proto_rawDesc,
|
||||||
|
NumEnums: 0,
|
||||||
|
NumMessages: 0,
|
||||||
|
NumExtensions: 0,
|
||||||
|
NumServices: 1,
|
||||||
|
},
|
||||||
|
GoTypes: file_stream_proto_goTypes,
|
||||||
|
DependencyIndexes: file_stream_proto_depIdxs,
|
||||||
|
}.Build()
|
||||||
|
File_stream_proto = out.File
|
||||||
|
file_stream_proto_rawDesc = nil
|
||||||
|
file_stream_proto_goTypes = nil
|
||||||
|
file_stream_proto_depIdxs = nil
|
||||||
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
option go_package = "github.com/go-kratos/kratos/cmd/protoc-gen-go-http/internal/testproto;testproto";
|
|
||||||
package testproto;
|
package echo;
|
||||||
|
|
||||||
|
option go_package = "github.com/go-kratos/kratos/cmd/protoc-gen-go-http/internal/testproto/echo;echo";
|
||||||
|
|
||||||
import "google/api/annotations.proto";
|
import "google/api/annotations.proto";
|
||||||
import "google/api/httpbody.proto";
|
import "google/api/httpbody.proto";
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
|
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
|
||||||
|
|
||||||
package testproto
|
package echo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
context "context"
|
context "context"
|
||||||
@@ -32,7 +32,7 @@ func NewStreamServiceClient(cc grpc.ClientConnInterface) StreamServiceClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *streamServiceClient) Download(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (StreamService_DownloadClient, error) {
|
func (c *streamServiceClient) Download(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (StreamService_DownloadClient, error) {
|
||||||
stream, err := c.cc.NewStream(ctx, &StreamService_ServiceDesc.Streams[0], "/testproto.StreamService/Download", opts...)
|
stream, err := c.cc.NewStream(ctx, &StreamService_ServiceDesc.Streams[0], "/echo.StreamService/Download", opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -116,7 +116,7 @@ func (x *streamServiceDownloadServer) Send(m *httpbody.HttpBody) error {
|
|||||||
// It's only intended for direct use with grpc.RegisterService,
|
// It's only intended for direct use with grpc.RegisterService,
|
||||||
// and not to be introspected or modified (even as a copy)
|
// and not to be introspected or modified (even as a copy)
|
||||||
var StreamService_ServiceDesc = grpc.ServiceDesc{
|
var StreamService_ServiceDesc = grpc.ServiceDesc{
|
||||||
ServiceName: "testproto.StreamService",
|
ServiceName: "echo.StreamService",
|
||||||
HandlerType: (*StreamServiceServer)(nil),
|
HandlerType: (*StreamServiceServer)(nil),
|
||||||
Methods: []grpc.MethodDesc{},
|
Methods: []grpc.MethodDesc{},
|
||||||
Streams: []grpc.StreamDesc{
|
Streams: []grpc.StreamDesc{
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
||||||
// versions:
|
|
||||||
// protoc-gen-go v1.26.0
|
|
||||||
// protoc v3.17.3
|
|
||||||
// source: stream.proto
|
|
||||||
|
|
||||||
package testproto
|
|
||||||
|
|
||||||
import (
|
|
||||||
_ "google.golang.org/genproto/googleapis/api/annotations"
|
|
||||||
httpbody "google.golang.org/genproto/googleapis/api/httpbody"
|
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
|
||||||
emptypb "google.golang.org/protobuf/types/known/emptypb"
|
|
||||||
reflect "reflect"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
// Verify that this generated code is sufficiently up-to-date.
|
|
||||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
|
||||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
|
||||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
|
||||||
)
|
|
||||||
|
|
||||||
var File_stream_proto protoreflect.FileDescriptor
|
|
||||||
|
|
||||||
var file_stream_proto_rawDesc = []byte{
|
|
||||||
0x0a, 0x0c, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09,
|
|
||||||
0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
|
||||||
0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
|
||||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
|
|
||||||
0x61, 0x70, 0x69, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x70, 0x72, 0x6f,
|
|
||||||
0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
|
||||||
0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32,
|
|
||||||
0x69, 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
|
||||||
0x12, 0x58, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x16, 0x2e, 0x67,
|
|
||||||
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
|
|
||||||
0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70,
|
|
||||||
0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x42, 0x6f, 0x64, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93,
|
|
||||||
0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f,
|
|
||||||
0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x30, 0x01, 0x42, 0x51, 0x5a, 0x4f, 0x67, 0x69,
|
|
||||||
0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2d, 0x6b, 0x72, 0x61, 0x74,
|
|
||||||
0x6f, 0x73, 0x2f, 0x6b, 0x72, 0x61, 0x74, 0x6f, 0x73, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x70, 0x72,
|
|
||||||
0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x67, 0x6f, 0x2d, 0x68, 0x74, 0x74, 0x70,
|
|
||||||
0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72,
|
|
||||||
0x6f, 0x74, 0x6f, 0x3b, 0x74, 0x65, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70,
|
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x33,
|
|
||||||
}
|
|
||||||
|
|
||||||
var file_stream_proto_goTypes = []interface{}{
|
|
||||||
(*emptypb.Empty)(nil), // 0: google.protobuf.Empty
|
|
||||||
(*httpbody.HttpBody)(nil), // 1: google.api.HttpBody
|
|
||||||
}
|
|
||||||
var file_stream_proto_depIdxs = []int32{
|
|
||||||
0, // 0: testproto.StreamService.Download:input_type -> google.protobuf.Empty
|
|
||||||
1, // 1: testproto.StreamService.Download:output_type -> google.api.HttpBody
|
|
||||||
1, // [1:2] is the sub-list for method output_type
|
|
||||||
0, // [0:1] is the sub-list for method input_type
|
|
||||||
0, // [0:0] is the sub-list for extension type_name
|
|
||||||
0, // [0:0] is the sub-list for extension extendee
|
|
||||||
0, // [0:0] is the sub-list for field type_name
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() { file_stream_proto_init() }
|
|
||||||
func file_stream_proto_init() {
|
|
||||||
if File_stream_proto != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
type x struct{}
|
|
||||||
out := protoimpl.TypeBuilder{
|
|
||||||
File: protoimpl.DescBuilder{
|
|
||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
|
||||||
RawDescriptor: file_stream_proto_rawDesc,
|
|
||||||
NumEnums: 0,
|
|
||||||
NumMessages: 0,
|
|
||||||
NumExtensions: 0,
|
|
||||||
NumServices: 1,
|
|
||||||
},
|
|
||||||
GoTypes: file_stream_proto_goTypes,
|
|
||||||
DependencyIndexes: file_stream_proto_depIdxs,
|
|
||||||
}.Build()
|
|
||||||
File_stream_proto = out.File
|
|
||||||
file_stream_proto_rawDesc = nil
|
|
||||||
file_stream_proto_goTypes = nil
|
|
||||||
file_stream_proto_depIdxs = nil
|
|
||||||
}
|
|
||||||
@@ -4,15 +4,13 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"google.golang.org/protobuf/proto"
|
"github.com/go-kratos/kratos/v2/encoding"
|
||||||
|
"github.com/go-kratos/kratos/v2/encoding/form"
|
||||||
)
|
)
|
||||||
|
|
||||||
// BindQuery bind vars parameters to target.
|
// BindQuery bind vars parameters to target.
|
||||||
func BindQuery(vars url.Values, target interface{}) error {
|
func BindQuery(vars url.Values, target interface{}) error {
|
||||||
if msg, ok := target.(proto.Message); ok {
|
return encoding.GetCodec(form.Name).Unmarshal([]byte(vars.Encode()), target)
|
||||||
return mapProto(msg, vars)
|
|
||||||
}
|
|
||||||
return mapForm(target, vars)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// BindForm bind form parameters to target.
|
// BindForm bind form parameters to target.
|
||||||
@@ -20,8 +18,5 @@ func BindForm(req *http.Request, target interface{}) error {
|
|||||||
if err := req.ParseForm(); err != nil {
|
if err := req.ParseForm(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if msg, ok := target.(proto.Message); ok {
|
return encoding.GetCodec(form.Name).Unmarshal([]byte(req.Form.Encode()), target)
|
||||||
return mapProto(msg, req.Form)
|
|
||||||
}
|
|
||||||
return mapForm(target, req.Form)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,16 +3,17 @@ package binding
|
|||||||
import (
|
import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/url"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-kratos/kratos/v2/encoding/form"
|
||||||
|
|
||||||
"google.golang.org/genproto/protobuf/field_mask"
|
"google.golang.org/genproto/protobuf/field_mask"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
"google.golang.org/protobuf/reflect/protoreflect"
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
"google.golang.org/protobuf/types/known/durationpb"
|
"google.golang.org/protobuf/types/known/durationpb"
|
||||||
"google.golang.org/protobuf/types/known/timestamppb"
|
"google.golang.org/protobuf/types/known/timestamppb"
|
||||||
"google.golang.org/protobuf/types/known/wrapperspb"
|
"google.golang.org/protobuf/types/known/wrapperspb"
|
||||||
@@ -41,7 +42,7 @@ func EncodeURL(pathTemplate string, msg proto.Message, needQuery bool) string {
|
|||||||
return in
|
return in
|
||||||
})
|
})
|
||||||
if needQuery {
|
if needQuery {
|
||||||
u, err := EncodeQuery(msg)
|
u, err := form.EncodeMap(msg)
|
||||||
if err == nil && len(u) > 0 {
|
if err == nil && len(u) > 0 {
|
||||||
for key := range pathParams {
|
for key := range pathParams {
|
||||||
delete(u, key)
|
delete(u, key)
|
||||||
@@ -55,25 +56,12 @@ func EncodeURL(pathTemplate string, msg proto.Message, needQuery bool) string {
|
|||||||
return path
|
return path
|
||||||
}
|
}
|
||||||
|
|
||||||
// EncodeQuery encode proto message to url query.
|
|
||||||
func EncodeQuery(msg proto.Message) (url.Values, error) {
|
|
||||||
if msg == nil || (reflect.ValueOf(msg).Kind() == reflect.Ptr && reflect.ValueOf(msg).IsNil()) {
|
|
||||||
return url.Values{}, nil
|
|
||||||
}
|
|
||||||
u := make(url.Values)
|
|
||||||
err := encodeByField(u, "", msg.ProtoReflect())
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return u, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func getValueByField(v protoreflect.Message, fieldPath []string) (string, error) {
|
func getValueByField(v protoreflect.Message, fieldPath []string) (string, error) {
|
||||||
var fd protoreflect.FieldDescriptor
|
var fd protoreflect.FieldDescriptor
|
||||||
for i, fieldName := range fieldPath {
|
for i, fieldName := range fieldPath {
|
||||||
fields := v.Descriptor().Fields()
|
fields := v.Descriptor().Fields()
|
||||||
if fd = fields.ByName(protoreflect.Name(fieldName)); fd == nil {
|
if fd = fields.ByJSONName(fieldName); fd == nil {
|
||||||
fd = fields.ByJSONName(fieldName)
|
fd = fields.ByName(protoreflect.Name(fieldName))
|
||||||
if fd == nil {
|
if fd == nil {
|
||||||
return "", fmt.Errorf("field path not found: %q", fieldName)
|
return "", fmt.Errorf("field path not found: %q", fieldName)
|
||||||
}
|
}
|
||||||
@@ -89,105 +77,6 @@ func getValueByField(v protoreflect.Message, fieldPath []string) (string, error)
|
|||||||
return encodeField(fd, v.Get(fd))
|
return encodeField(fd, v.Get(fd))
|
||||||
}
|
}
|
||||||
|
|
||||||
func encodeByField(u url.Values, path string, v protoreflect.Message) error {
|
|
||||||
for i := 0; i < v.Descriptor().Fields().Len(); i++ {
|
|
||||||
fd := v.Descriptor().Fields().Get(i)
|
|
||||||
var key string
|
|
||||||
var newPath string
|
|
||||||
if fd.HasJSONName() {
|
|
||||||
key = fd.JSONName()
|
|
||||||
} else {
|
|
||||||
key = fd.TextName()
|
|
||||||
}
|
|
||||||
if path == "" {
|
|
||||||
newPath = key
|
|
||||||
} else {
|
|
||||||
newPath = path + "." + key
|
|
||||||
}
|
|
||||||
|
|
||||||
if of := fd.ContainingOneof(); of != nil {
|
|
||||||
if f := v.WhichOneof(of); f != nil {
|
|
||||||
if f != fd {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
switch {
|
|
||||||
case fd.IsList():
|
|
||||||
if v.Get(fd).List().Len() > 0 {
|
|
||||||
list, err := encodeRepeatedField(fd, v.Get(fd).List())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
u[newPath] = list
|
|
||||||
}
|
|
||||||
case fd.IsMap():
|
|
||||||
if v.Get(fd).Map().Len() > 0 {
|
|
||||||
m, err := encodeMapField(fd, v.Get(fd).Map())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
for k, value := range m {
|
|
||||||
u[fmt.Sprintf("%s[%s]", newPath, k)] = []string{value}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case (fd.Kind() == protoreflect.MessageKind) || (fd.Kind() == protoreflect.GroupKind):
|
|
||||||
value, err := encodeMessage(fd.Message(), v.Get(fd))
|
|
||||||
if err == nil {
|
|
||||||
u[newPath] = []string{value}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
err = encodeByField(u, newPath, v.Get(fd).Message())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
value, err := encodeField(fd, v.Get(fd))
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
u[newPath] = []string{value}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func encodeMessageField(fieldDescriptor protoreflect.FieldDescriptor, msgValue protoreflect.Message) (string, error) {
|
|
||||||
return encodeField(fieldDescriptor, msgValue.Get(fieldDescriptor))
|
|
||||||
}
|
|
||||||
|
|
||||||
func encodeRepeatedField(fieldDescriptor protoreflect.FieldDescriptor, list protoreflect.List) ([]string, error) {
|
|
||||||
var values []string
|
|
||||||
for i := 0; i < list.Len(); i++ {
|
|
||||||
value, err := encodeField(fieldDescriptor, list.Get(i))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
values = append(values, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
return values, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func encodeMapField(fieldDescriptor protoreflect.FieldDescriptor, mp protoreflect.Map) (map[string]string, error) {
|
|
||||||
m := make(map[string]string)
|
|
||||||
mp.Range(func(k protoreflect.MapKey, v protoreflect.Value) bool {
|
|
||||||
key, err := encodeField(fieldDescriptor.MapValue(), k.Value())
|
|
||||||
if err != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
value, err := encodeField(fieldDescriptor.MapValue(), v)
|
|
||||||
if err != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
m[key] = value
|
|
||||||
return true
|
|
||||||
})
|
|
||||||
|
|
||||||
return m, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func encodeField(fieldDescriptor protoreflect.FieldDescriptor, value protoreflect.Value) (string, error) {
|
func encodeField(fieldDescriptor protoreflect.FieldDescriptor, value protoreflect.Value) (string, error) {
|
||||||
switch fieldDescriptor.Kind() {
|
switch fieldDescriptor.Kind() {
|
||||||
case protoreflect.BoolKind:
|
case protoreflect.BoolKind:
|
||||||
|
|||||||
@@ -12,6 +12,12 @@ func TestProtoPath(t *testing.T) {
|
|||||||
t.Fatalf("proto path not expected!actual: %s ", url)
|
t.Fatalf("proto path not expected!actual: %s ", url)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
url = EncodeURL("http://helloworld.Greeter/helloworld/{name}/sub/{sub.naming}", &HelloRequest{Name: "test", Sub: &Sub{Name: "5566!!!"}}, false)
|
||||||
|
fmt.Println(url)
|
||||||
|
if url != `http://helloworld.Greeter/helloworld/test/sub/5566!!!` {
|
||||||
|
t.Fatalf("proto path not expected!actual: %s ", url)
|
||||||
|
}
|
||||||
|
|
||||||
url = EncodeURL("http://helloworld.Greeter/helloworld/sub", &HelloRequest{Name: "test", Sub: &Sub{Name: "2233!!!"}}, false)
|
url = EncodeURL("http://helloworld.Greeter/helloworld/sub", &HelloRequest{Name: "test", Sub: &Sub{Name: "2233!!!"}}, false)
|
||||||
fmt.Println(url)
|
fmt.Println(url)
|
||||||
if url != `http://helloworld.Greeter/helloworld/sub` {
|
if url != `http://helloworld.Greeter/helloworld/sub` {
|
||||||
@@ -1,385 +0,0 @@
|
|||||||
package binding
|
|
||||||
|
|
||||||
// Copyright 2014 Manu Martinez-Almeida. All rights reserved.
|
|
||||||
// Use of this source code is governed by a MIT style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"reflect"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
errUnknownType = errors.New("unknown type")
|
|
||||||
emptyField = reflect.StructField{}
|
|
||||||
)
|
|
||||||
|
|
||||||
func mapForm(ptr interface{}, form map[string][]string) error {
|
|
||||||
return mapFormByTag(ptr, form, "json")
|
|
||||||
}
|
|
||||||
|
|
||||||
func mapFormByTag(ptr interface{}, form map[string][]string, tag string) error {
|
|
||||||
ptrVal := reflect.ValueOf(ptr)
|
|
||||||
var pointed interface{}
|
|
||||||
if ptrVal.Kind() == reflect.Ptr {
|
|
||||||
ptrVal = ptrVal.Elem()
|
|
||||||
pointed = ptrVal.Interface()
|
|
||||||
}
|
|
||||||
if ptrVal.Kind() == reflect.Map &&
|
|
||||||
ptrVal.Type().Key().Kind() == reflect.String {
|
|
||||||
if pointed != nil {
|
|
||||||
ptr = pointed
|
|
||||||
}
|
|
||||||
return setFormMap(ptr, form)
|
|
||||||
}
|
|
||||||
return mappingByPtr(ptr, formSource(form), tag)
|
|
||||||
}
|
|
||||||
|
|
||||||
// setter tries to set value on a walking by fields of a struct
|
|
||||||
type setter interface {
|
|
||||||
TrySet(value reflect.Value, field reflect.StructField, key string, opt setOptions) (isSetted bool, err error)
|
|
||||||
}
|
|
||||||
|
|
||||||
type formSource map[string][]string
|
|
||||||
|
|
||||||
var _ setter = formSource(nil)
|
|
||||||
|
|
||||||
// TrySet tries to set a value by request's form source (like map[string][]string)
|
|
||||||
func (form formSource) TrySet(value reflect.Value, field reflect.StructField, tagValue string, opt setOptions) (isSetted bool, err error) {
|
|
||||||
return setByForm(value, field, form, tagValue, opt)
|
|
||||||
}
|
|
||||||
|
|
||||||
func mappingByPtr(ptr interface{}, setter setter, tag string) error {
|
|
||||||
_, err := mapping(reflect.ValueOf(ptr), emptyField, setter, tag)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func mapping(value reflect.Value, field reflect.StructField, setter setter, tag string) (bool, error) {
|
|
||||||
if field.Tag.Get(tag) == "-" { // just ignoring this field
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var vKind = value.Kind()
|
|
||||||
|
|
||||||
if vKind == reflect.Ptr {
|
|
||||||
var isNew bool
|
|
||||||
vPtr := value
|
|
||||||
if value.IsNil() {
|
|
||||||
isNew = true
|
|
||||||
vPtr = reflect.New(value.Type().Elem())
|
|
||||||
}
|
|
||||||
isSetted, err := mapping(vPtr.Elem(), field, setter, tag)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
if isNew && isSetted {
|
|
||||||
value.Set(vPtr)
|
|
||||||
}
|
|
||||||
return isSetted, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if vKind != reflect.Struct || !field.Anonymous {
|
|
||||||
ok, err := tryToSetValue(value, field, setter, tag)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
if ok {
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if vKind == reflect.Struct {
|
|
||||||
tValue := value.Type()
|
|
||||||
|
|
||||||
var isSetted bool
|
|
||||||
for i := 0; i < value.NumField(); i++ {
|
|
||||||
sf := tValue.Field(i)
|
|
||||||
if sf.PkgPath != "" && !sf.Anonymous { // unexported
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
ok, err := mapping(value.Field(i), tValue.Field(i), setter, tag)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
isSetted = isSetted || ok
|
|
||||||
}
|
|
||||||
return isSetted, nil
|
|
||||||
}
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type setOptions struct {
|
|
||||||
isDefaultExists bool
|
|
||||||
defaultValue string
|
|
||||||
}
|
|
||||||
|
|
||||||
func tryToSetValue(value reflect.Value, field reflect.StructField, setter setter, tag string) (bool, error) {
|
|
||||||
var tagValue string
|
|
||||||
var setOpt setOptions
|
|
||||||
|
|
||||||
tagValue = field.Tag.Get(tag)
|
|
||||||
tagValue, opts := head(tagValue, ",")
|
|
||||||
|
|
||||||
if tagValue == "" { // default value is FieldName
|
|
||||||
tagValue = field.Name
|
|
||||||
}
|
|
||||||
if tagValue == "" { // when field is "emptyField" variable
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var opt string
|
|
||||||
for len(opts) > 0 {
|
|
||||||
opt, opts = head(opts, ",")
|
|
||||||
|
|
||||||
if k, v := head(opt, "="); k == "default" {
|
|
||||||
setOpt.isDefaultExists = true
|
|
||||||
setOpt.defaultValue = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return setter.TrySet(value, field, tagValue, setOpt)
|
|
||||||
}
|
|
||||||
|
|
||||||
func setByForm(value reflect.Value, field reflect.StructField, form map[string][]string, tagValue string, opt setOptions) (isSetted bool, err error) {
|
|
||||||
vs, ok := form[tagValue]
|
|
||||||
if !ok && !opt.isDefaultExists {
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
switch value.Kind() {
|
|
||||||
case reflect.Slice:
|
|
||||||
if !ok {
|
|
||||||
vs = []string{opt.defaultValue}
|
|
||||||
}
|
|
||||||
return true, setSlice(vs, value, field)
|
|
||||||
case reflect.Array:
|
|
||||||
if !ok {
|
|
||||||
vs = []string{opt.defaultValue}
|
|
||||||
}
|
|
||||||
if len(vs) != value.Len() {
|
|
||||||
return false, fmt.Errorf("%q is not valid value for %s", vs, value.Type().String())
|
|
||||||
}
|
|
||||||
return true, setArray(vs, value, field)
|
|
||||||
default:
|
|
||||||
var val string
|
|
||||||
if !ok {
|
|
||||||
val = opt.defaultValue
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(vs) > 0 {
|
|
||||||
val = vs[0]
|
|
||||||
}
|
|
||||||
return true, setWithProperType(val, value, field)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func setWithProperType(val string, value reflect.Value, field reflect.StructField) error {
|
|
||||||
switch value.Kind() {
|
|
||||||
case reflect.Int:
|
|
||||||
return setIntField(val, 0, value)
|
|
||||||
case reflect.Int8:
|
|
||||||
return setIntField(val, 8, value)
|
|
||||||
case reflect.Int16:
|
|
||||||
return setIntField(val, 16, value)
|
|
||||||
case reflect.Int32:
|
|
||||||
return setIntField(val, 32, value)
|
|
||||||
case reflect.Int64:
|
|
||||||
switch value.Interface().(type) {
|
|
||||||
case time.Duration:
|
|
||||||
return setTimeDuration(val, value, field)
|
|
||||||
}
|
|
||||||
return setIntField(val, 64, value)
|
|
||||||
case reflect.Uint:
|
|
||||||
return setUintField(val, 0, value)
|
|
||||||
case reflect.Uint8:
|
|
||||||
return setUintField(val, 8, value)
|
|
||||||
case reflect.Uint16:
|
|
||||||
return setUintField(val, 16, value)
|
|
||||||
case reflect.Uint32:
|
|
||||||
return setUintField(val, 32, value)
|
|
||||||
case reflect.Uint64:
|
|
||||||
return setUintField(val, 64, value)
|
|
||||||
case reflect.Bool:
|
|
||||||
return setBoolField(val, value)
|
|
||||||
case reflect.Float32:
|
|
||||||
return setFloatField(val, 32, value)
|
|
||||||
case reflect.Float64:
|
|
||||||
return setFloatField(val, 64, value)
|
|
||||||
case reflect.String:
|
|
||||||
value.SetString(val)
|
|
||||||
case reflect.Struct:
|
|
||||||
switch value.Interface().(type) {
|
|
||||||
case time.Time:
|
|
||||||
return setTimeField(val, field, value)
|
|
||||||
}
|
|
||||||
return json.Unmarshal([]byte(val), value.Addr().Interface())
|
|
||||||
case reflect.Map:
|
|
||||||
return json.Unmarshal([]byte(val), value.Addr().Interface())
|
|
||||||
default:
|
|
||||||
return errUnknownType
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setIntField(val string, bitSize int, field reflect.Value) error {
|
|
||||||
if val == "" {
|
|
||||||
val = "0"
|
|
||||||
}
|
|
||||||
intVal, err := strconv.ParseInt(val, 10, bitSize)
|
|
||||||
if err == nil {
|
|
||||||
field.SetInt(intVal)
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func setUintField(val string, bitSize int, field reflect.Value) error {
|
|
||||||
if val == "" {
|
|
||||||
val = "0"
|
|
||||||
}
|
|
||||||
uintVal, err := strconv.ParseUint(val, 10, bitSize)
|
|
||||||
if err == nil {
|
|
||||||
field.SetUint(uintVal)
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func setBoolField(val string, field reflect.Value) error {
|
|
||||||
if val == "" {
|
|
||||||
val = "false"
|
|
||||||
}
|
|
||||||
boolVal, err := strconv.ParseBool(val)
|
|
||||||
if err == nil {
|
|
||||||
field.SetBool(boolVal)
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func setFloatField(val string, bitSize int, field reflect.Value) error {
|
|
||||||
if val == "" {
|
|
||||||
val = "0.0"
|
|
||||||
}
|
|
||||||
floatVal, err := strconv.ParseFloat(val, bitSize)
|
|
||||||
if err == nil {
|
|
||||||
field.SetFloat(floatVal)
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func setTimeField(val string, structField reflect.StructField, value reflect.Value) error {
|
|
||||||
timeFormat := structField.Tag.Get("time_format")
|
|
||||||
if timeFormat == "" {
|
|
||||||
timeFormat = time.RFC3339
|
|
||||||
}
|
|
||||||
|
|
||||||
switch tf := strings.ToLower(timeFormat); tf {
|
|
||||||
case "unix", "unixnano":
|
|
||||||
tv, err := strconv.ParseInt(val, 10, 64)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
d := time.Duration(1)
|
|
||||||
if tf == "unixnano" {
|
|
||||||
d = time.Second
|
|
||||||
}
|
|
||||||
|
|
||||||
t := time.Unix(tv/int64(d), tv%int64(d))
|
|
||||||
value.Set(reflect.ValueOf(t))
|
|
||||||
return nil
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if val == "" {
|
|
||||||
value.Set(reflect.ValueOf(time.Time{}))
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
l := time.Local
|
|
||||||
if isUTC, _ := strconv.ParseBool(structField.Tag.Get("time_utc")); isUTC {
|
|
||||||
l = time.UTC
|
|
||||||
}
|
|
||||||
|
|
||||||
if locTag := structField.Tag.Get("time_location"); locTag != "" {
|
|
||||||
loc, err := time.LoadLocation(locTag)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
l = loc
|
|
||||||
}
|
|
||||||
|
|
||||||
t, err := time.ParseInLocation(timeFormat, val, l)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
value.Set(reflect.ValueOf(t))
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setArray(vals []string, value reflect.Value, field reflect.StructField) error {
|
|
||||||
for i, s := range vals {
|
|
||||||
err := setWithProperType(s, value.Index(i), field)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setSlice(vals []string, value reflect.Value, field reflect.StructField) error {
|
|
||||||
slice := reflect.MakeSlice(value.Type(), len(vals), len(vals))
|
|
||||||
err := setArray(vals, slice, field)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
value.Set(slice)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setTimeDuration(val string, value reflect.Value, field reflect.StructField) error {
|
|
||||||
d, err := time.ParseDuration(val)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
value.Set(reflect.ValueOf(d))
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func head(str, sep string) (head string, tail string) {
|
|
||||||
idx := strings.Index(str, sep)
|
|
||||||
if idx < 0 {
|
|
||||||
return str, ""
|
|
||||||
}
|
|
||||||
return str[:idx], str[idx+len(sep):]
|
|
||||||
}
|
|
||||||
|
|
||||||
func setFormMap(ptr interface{}, form map[string][]string) error {
|
|
||||||
el := reflect.TypeOf(ptr).Elem()
|
|
||||||
|
|
||||||
if el.Kind() == reflect.Slice {
|
|
||||||
ptrMap, ok := ptr.(map[string][]string)
|
|
||||||
if !ok {
|
|
||||||
return errors.New("cannot convert to map slices of strings")
|
|
||||||
}
|
|
||||||
for k, v := range form {
|
|
||||||
ptrMap[k] = v
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
ptrMap, ok := ptr.(map[string]string)
|
|
||||||
if !ok {
|
|
||||||
return errors.New("cannot convert to map of strings")
|
|
||||||
}
|
|
||||||
for k, v := range form {
|
|
||||||
ptrMap[k] = v[len(v)-1] // pick last
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-go v1.26.0
|
// protoc-gen-go v1.27.1-devel
|
||||||
// protoc v3.15.8
|
// protoc v3.17.2
|
||||||
// source: test.proto
|
// source: test.proto
|
||||||
|
|
||||||
package binding
|
package binding
|
||||||
@@ -81,7 +81,7 @@ type Sub struct {
|
|||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
|
Name string `protobuf:"bytes,1,opt,name=name,json=naming,proto3" json:"name,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Sub) Reset() {
|
func (x *Sub) Reset() {
|
||||||
@@ -131,12 +131,12 @@ var file_test_proto_rawDesc = []byte{
|
|||||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
|
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
|
||||||
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x03, 0x73, 0x75, 0x62,
|
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x03, 0x73, 0x75, 0x62,
|
||||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67,
|
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67,
|
||||||
0x2e, 0x53, 0x75, 0x62, 0x52, 0x03, 0x73, 0x75, 0x62, 0x22, 0x19, 0x0a, 0x03, 0x53, 0x75, 0x62,
|
0x2e, 0x53, 0x75, 0x62, 0x52, 0x03, 0x73, 0x75, 0x62, 0x22, 0x1b, 0x0a, 0x03, 0x53, 0x75, 0x62,
|
||||||
0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
|
0x12, 0x14, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
|
||||||
0x6e, 0x61, 0x6d, 0x65, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
|
0x6e, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
|
||||||
0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2d, 0x6b, 0x72, 0x61, 0x74, 0x6f, 0x73, 0x2f, 0x6b, 0x72, 0x61,
|
0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2d, 0x6b, 0x72, 0x61, 0x74, 0x6f, 0x73, 0x2f, 0x6b,
|
||||||
0x74, 0x6f, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x62, 0x69,
|
0x72, 0x61, 0x74, 0x6f, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2f,
|
||||||
0x6e, 0x64, 0x69, 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
@@ -11,5 +11,5 @@ message HelloRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
message Sub{
|
message Sub{
|
||||||
string name = 1;
|
string name = 1 [json_name="naming"];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user