blob: 5026b1529cd5db1fec2026d3e8088cbae1265716 [file] [log] [blame]
Damien Neil5b6d0472019-06-14 11:54:07 -07001// Copyright 2019 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package irregular
6
7import (
8 "google.golang.org/protobuf/encoding/prototext"
9 "google.golang.org/protobuf/reflect/protodesc"
10 pref "google.golang.org/protobuf/reflect/protoreflect"
Joe Tsaid4211502019-07-02 14:58:02 -070011 "google.golang.org/protobuf/reflect/prototype"
12
Damien Neil5b6d0472019-06-14 11:54:07 -070013 "google.golang.org/protobuf/types/descriptorpb"
14)
15
16type IrregularMessage struct {
17 set bool
18 value string
19}
20
21func (m *IrregularMessage) ProtoReflect() pref.Message { return (*message)(m) }
22
23type message IrregularMessage
24
Joe Tsaid4211502019-07-02 14:58:02 -070025var messageType = &prototype.Message{
26 MessageDescriptor: fileDesc.Messages().Get(0),
27 NewMessage: func() pref.Message {
28 return &message{}
29 },
30}
31
32func (m *message) Descriptor() pref.MessageDescriptor { return messageType.Descriptor() }
33func (m *message) Type() pref.MessageType { return messageType }
Damien Neil5b6d0472019-06-14 11:54:07 -070034func (m *message) New() pref.Message { return &message{} }
35func (m *message) Interface() pref.ProtoMessage { return (*IrregularMessage)(m) }
36
Joe Tsaid4211502019-07-02 14:58:02 -070037var fieldDescS = fileDesc.Messages().Get(0).Fields().Get(0)
Damien Neil5b6d0472019-06-14 11:54:07 -070038
Joe Tsai378c1322019-04-25 23:48:08 -070039func (m *message) Range(f func(pref.FieldDescriptor, pref.Value) bool) {
40 if m.set {
41 f(fieldDescS, pref.ValueOf(m.value))
42 }
43}
44
45func (m *message) Has(fd pref.FieldDescriptor) bool {
46 if fd == fieldDescS {
Damien Neil5b6d0472019-06-14 11:54:07 -070047 return m.set
48 }
Joe Tsai378c1322019-04-25 23:48:08 -070049 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070050}
51
Joe Tsai378c1322019-04-25 23:48:08 -070052func (m *message) Clear(fd pref.FieldDescriptor) {
53 if fd == fieldDescS {
Damien Neil5b6d0472019-06-14 11:54:07 -070054 m.value = ""
55 m.set = false
Joe Tsai378c1322019-04-25 23:48:08 -070056 return
Damien Neil5b6d0472019-06-14 11:54:07 -070057 }
Joe Tsai378c1322019-04-25 23:48:08 -070058 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070059}
60
Joe Tsai378c1322019-04-25 23:48:08 -070061func (m *message) Get(fd pref.FieldDescriptor) pref.Value {
62 if fd == fieldDescS {
63 return pref.ValueOf(m.value)
Damien Neil5b6d0472019-06-14 11:54:07 -070064 }
Joe Tsai378c1322019-04-25 23:48:08 -070065 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070066}
67
Joe Tsai378c1322019-04-25 23:48:08 -070068func (m *message) Set(fd pref.FieldDescriptor, v pref.Value) {
69 if fd == fieldDescS {
70 m.value = v.String()
71 m.set = true
72 return
73 }
74 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070075}
76
Joe Tsai378c1322019-04-25 23:48:08 -070077func (m *message) Mutable(pref.FieldDescriptor) pref.Value {
78 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070079}
80
Joe Tsai378c1322019-04-25 23:48:08 -070081func (m *message) NewMessage(pref.FieldDescriptor) pref.Message {
82 panic("invalid field descriptor")
83}
Damien Neil5b6d0472019-06-14 11:54:07 -070084
Joe Tsai378c1322019-04-25 23:48:08 -070085func (m *message) WhichOneof(pref.OneofDescriptor) pref.FieldDescriptor {
86 panic("invalid oneof descriptor")
87}
Damien Neil5b6d0472019-06-14 11:54:07 -070088
Joe Tsai378c1322019-04-25 23:48:08 -070089func (m *message) GetUnknown() pref.RawFields { return nil }
90func (m *message) SetUnknown(pref.RawFields) { return }
Damien Neil5b6d0472019-06-14 11:54:07 -070091
Joe Tsaid4211502019-07-02 14:58:02 -070092var fileDesc = func() pref.FileDescriptor {
Damien Neil5b6d0472019-06-14 11:54:07 -070093 p := &descriptorpb.FileDescriptorProto{}
94 if err := prototext.Unmarshal([]byte(descriptorText), p); err != nil {
95 panic(err)
96 }
97 file, err := protodesc.NewFile(p, nil)
98 if err != nil {
99 panic(err)
100 }
101 return file
102}()
103
Joe Tsaid4211502019-07-02 14:58:02 -0700104func file_irregular_irregular_proto_init() { _ = fileDesc }
Damien Neil5b6d0472019-06-14 11:54:07 -0700105
106const descriptorText = `
107 name: "internal/testprotos/irregular/irregular.proto"
108 package: "goproto.proto.thirdparty"
109 message_type {
110 name: "IrregularMessage"
111 field {
112 name: "s"
113 number: 1
114 label: LABEL_OPTIONAL
115 type: TYPE_STRING
116 json_name: "s"
117 }
118 }
119 options {
120 go_package: "google.golang.org/protobuf/internal/testprotos/irregular"
121 }
122`