mirror of
https://github.com/go-kratos/kratos.git
synced 2026-05-22 10:15:24 +02:00
feat: decode google.protobuf.BytesValue compatible base64.URLEncoding. (#1991)
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package form
|
package form
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/base64"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@@ -178,3 +179,16 @@ func TestDecodeStructPb(t *testing.T) {
|
|||||||
t.Errorf("except %v, got %v", "go-kratos", req.Data.GetFields()["name2"].GetStringValue())
|
t.Errorf("except %v, got %v", "go-kratos", req.Data.GetFields()["name2"].GetStringValue())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDecodeBytesValuePb(t *testing.T) {
|
||||||
|
url := "https://example.com/xx/?a=1&b=2&c=3"
|
||||||
|
val := base64.URLEncoding.EncodeToString([]byte(url))
|
||||||
|
content := "bytes=" + val
|
||||||
|
in2 := &complex.Complex{}
|
||||||
|
if err := encoding.GetCodec(contentType).Unmarshal([]byte(content), in2); err != nil {
|
||||||
|
t.Errorf("expect %v, got %v", nil, err)
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(url, string(in2.Bytes.Value)) {
|
||||||
|
t.Errorf("except %v, got %v", val, string(in2.Bytes.Value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -283,7 +283,9 @@ func parseMessage(md protoreflect.MessageDescriptor, value string) (protoreflect
|
|||||||
case "google.protobuf.BytesValue":
|
case "google.protobuf.BytesValue":
|
||||||
v, err := base64.StdEncoding.DecodeString(value)
|
v, err := base64.StdEncoding.DecodeString(value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return protoreflect.Value{}, err
|
if v, err = base64.URLEncoding.DecodeString(value); err != nil {
|
||||||
|
return protoreflect.Value{}, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
msg = wrapperspb.Bytes(v)
|
msg = wrapperspb.Bytes(v)
|
||||||
case "google.protobuf.FieldMask":
|
case "google.protobuf.FieldMask":
|
||||||
|
|||||||
Reference in New Issue
Block a user