internal/scalar: add scalar package for primitive wrappers
Add the scalar package to reduce dependencies on the v1 proto runtime package.
It may very well be the case that these functions should be exposed in the
public API of v2, but that is not a decision we need to make now.
Change-Id: Ifbc6d15311ba5837909ac72af47c630a80a142ef
Reviewed-on: https://go-review.googlesource.com/c/151402
Reviewed-by: Herbie Ong <herbie@google.com>
diff --git a/internal/impl/legacy_message.go b/internal/impl/legacy_message.go
index 4b64359..440b283 100644
--- a/internal/impl/legacy_message.go
+++ b/internal/impl/legacy_message.go
@@ -11,9 +11,9 @@
"sync"
"unicode"
- protoV1 "github.com/golang/protobuf/proto"
descriptorV1 "github.com/golang/protobuf/protoc-gen-go/descriptor"
ptag "github.com/golang/protobuf/v2/internal/encoding/tag"
+ scalar "github.com/golang/protobuf/v2/internal/scalar"
pvalue "github.com/golang/protobuf/v2/internal/value"
pref "github.com/golang/protobuf/v2/reflect/protoreflect"
ptype "github.com/golang/protobuf/v2/reflect/prototype"
@@ -253,7 +253,7 @@
m := &ptype.StandaloneMessage{
Syntax: parent.Syntax,
FullName: parent.FullName.Append(mapEntryName(f.Name)),
- Options: &descriptorV1.MessageOptions{MapEntry: protoV1.Bool(true)},
+ Options: &descriptorV1.MessageOptions{MapEntry: scalar.Bool(true)},
Fields: []ptype.Field{
ms.parseField(tagKey, "", "", t.Key(), nil),
ms.parseField(tagVal, "", "", t.Elem(), nil),
diff --git a/internal/impl/legacy_test.go b/internal/impl/legacy_test.go
index 2333fc5..71b4db2 100644
--- a/internal/impl/legacy_test.go
+++ b/internal/impl/legacy_test.go
@@ -13,6 +13,7 @@
protoV1 "github.com/golang/protobuf/proto"
pack "github.com/golang/protobuf/v2/internal/encoding/pack"
pragma "github.com/golang/protobuf/v2/internal/pragma"
+ scalar "github.com/golang/protobuf/v2/internal/scalar"
pref "github.com/golang/protobuf/v2/reflect/protoreflect"
ptype "github.com/golang/protobuf/v2/reflect/prototype"
cmp "github.com/google/go-cmp/cmp"
@@ -848,8 +849,8 @@
}
// Set some values and append to values to the lists.
- m1a := &proto2_20180125.Message_ChildMessage{F1: protoV1.String("m1a")}
- m1b := &proto2_20180125.Message_ChildMessage{F1: protoV1.String("m2b")}
+ m1a := &proto2_20180125.Message_ChildMessage{F1: scalar.String("m1a")}
+ m1b := &proto2_20180125.Message_ChildMessage{F1: scalar.String("m2b")}
m2a := &EnumMessages{EnumP2: EnumProto2(0x1b).Enum()}
m2b := &EnumMessages{EnumP2: EnumProto2(0x2b).Enum()}
setValues := []interface{}{
diff --git a/internal/impl/message_test.go b/internal/impl/message_test.go
index 999bdd6..5637b92 100644
--- a/internal/impl/message_test.go
+++ b/internal/impl/message_test.go
@@ -12,6 +12,7 @@
protoV1 "github.com/golang/protobuf/proto"
descriptorV1 "github.com/golang/protobuf/protoc-gen-go/descriptor"
+ scalar "github.com/golang/protobuf/v2/internal/scalar"
pref "github.com/golang/protobuf/v2/reflect/protoreflect"
ptype "github.com/golang/protobuf/v2/reflect/prototype"
cmp "github.com/google/go-cmp/cmp"
@@ -559,7 +560,7 @@
{Name: "key", Number: 1, Cardinality: pref.Optional, Kind: keyKind},
{Name: "value", Number: 2, Cardinality: pref.Optional, Kind: valKind},
},
- Options: &descriptorV1.MessageOptions{MapEntry: protoV1.Bool(true)},
+ Options: &descriptorV1.MessageOptions{MapEntry: scalar.Bool(true)},
}),
}
}
@@ -964,7 +965,7 @@
{Name: "key", Number: 1, Cardinality: pref.Optional, Kind: pref.StringKind},
{Name: "value", Number: 2, Cardinality: pref.Optional, Kind: pref.EnumKind, EnumType: enumProto3Type},
},
- Options: &descriptorV1.MessageOptions{MapEntry: protoV1.Bool(true)},
+ Options: &descriptorV1.MessageOptions{MapEntry: scalar.Bool(true)},
})
var messageMapDesc = mustMakeMessageDesc(ptype.StandaloneMessage{
@@ -974,7 +975,7 @@
{Name: "key", Number: 1, Cardinality: pref.Optional, Kind: pref.StringKind},
{Name: "value", Number: 2, Cardinality: pref.Optional, Kind: pref.MessageKind, MessageType: scalarProto3Type.Type},
},
- Options: &descriptorV1.MessageOptions{MapEntry: protoV1.Bool(true)},
+ Options: &descriptorV1.MessageOptions{MapEntry: scalar.Bool(true)},
})
func (m *EnumMessages) Type() pref.MessageType { return enumMessagesType.Type }
@@ -1017,10 +1018,10 @@
func (*EnumMessages_OneofM3) isEnumMessages_Union() {}
func TestEnumMessages(t *testing.T) {
- wantL := MessageOf(&proto2_20180125.Message{OptionalFloat: protoV1.Float32(math.E)})
+ wantL := MessageOf(&proto2_20180125.Message{OptionalFloat: scalar.Float32(math.E)})
wantM := &EnumMessages{EnumP2: EnumProto2(1234).Enum()}
- wantM2a := &ScalarProto2{Float32: protoV1.Float32(math.Pi)}
- wantM2b := &ScalarProto2{Float32: protoV1.Float32(math.Phi)}
+ wantM2a := &ScalarProto2{Float32: scalar.Float32(math.Pi)}
+ wantM2b := &ScalarProto2{Float32: scalar.Float32(math.Phi)}
wantM3a := &ScalarProto3{Float32: math.Pi}
wantM3b := &ScalarProto3{Float32: math.Ln2}
@@ -1104,7 +1105,7 @@
equalMessage{&EnumMessages{
EnumP2: EnumProto2(0xdead).Enum(),
EnumP3: EnumProto3(0).Enum(),
- MessageLegacy: &proto2_20180125.Message{OptionalFloat: protoV1.Float32(math.E)},
+ MessageLegacy: &proto2_20180125.Message{OptionalFloat: scalar.Float32(math.E)},
MessageCycle: wantM,
MessageList: []*ScalarProto2{wantM2a, wantM2b},
EnumMap: map[string]EnumProto3{"one": 1, "two": 2},