blob: 8127f0b706f07d986ab0f661bedf107df77782e4 [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 (
Damien Neil16163b42019-08-06 15:43:25 -07008 "reflect"
9
Damien Neil5b6d0472019-06-14 11:54:07 -070010 "google.golang.org/protobuf/encoding/prototext"
11 "google.golang.org/protobuf/reflect/protodesc"
12 pref "google.golang.org/protobuf/reflect/protoreflect"
Joe Tsaid4211502019-07-02 14:58:02 -070013
Damien Neil5b6d0472019-06-14 11:54:07 -070014 "google.golang.org/protobuf/types/descriptorpb"
15)
16
17type IrregularMessage struct {
18 set bool
19 value string
20}
21
22func (m *IrregularMessage) ProtoReflect() pref.Message { return (*message)(m) }
23
24type message IrregularMessage
25
Damien Neil16163b42019-08-06 15:43:25 -070026func (m *message) Descriptor() pref.MessageDescriptor { return fileDesc.Messages().Get(0) }
27func (m *message) Type() pref.MessageType { return m }
Damien Neil5b6d0472019-06-14 11:54:07 -070028func (m *message) New() pref.Message { return &message{} }
Damien Neil16163b42019-08-06 15:43:25 -070029func (m *message) Zero() pref.Message { return (*message)(nil) }
30func (m *message) GoType() reflect.Type { return reflect.TypeOf(&message{}) }
Damien Neil5b6d0472019-06-14 11:54:07 -070031func (m *message) Interface() pref.ProtoMessage { return (*IrregularMessage)(m) }
32
Joe Tsaid4211502019-07-02 14:58:02 -070033var fieldDescS = fileDesc.Messages().Get(0).Fields().Get(0)
Damien Neil5b6d0472019-06-14 11:54:07 -070034
Joe Tsai378c1322019-04-25 23:48:08 -070035func (m *message) Range(f func(pref.FieldDescriptor, pref.Value) bool) {
36 if m.set {
37 f(fieldDescS, pref.ValueOf(m.value))
38 }
39}
40
41func (m *message) Has(fd pref.FieldDescriptor) bool {
42 if fd == fieldDescS {
Damien Neil5b6d0472019-06-14 11:54:07 -070043 return m.set
44 }
Joe Tsai378c1322019-04-25 23:48:08 -070045 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070046}
47
Joe Tsai378c1322019-04-25 23:48:08 -070048func (m *message) Clear(fd pref.FieldDescriptor) {
49 if fd == fieldDescS {
Damien Neil5b6d0472019-06-14 11:54:07 -070050 m.value = ""
51 m.set = false
Joe Tsai378c1322019-04-25 23:48:08 -070052 return
Damien Neil5b6d0472019-06-14 11:54:07 -070053 }
Joe Tsai378c1322019-04-25 23:48:08 -070054 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070055}
56
Joe Tsai378c1322019-04-25 23:48:08 -070057func (m *message) Get(fd pref.FieldDescriptor) pref.Value {
58 if fd == fieldDescS {
59 return pref.ValueOf(m.value)
Damien Neil5b6d0472019-06-14 11:54:07 -070060 }
Joe Tsai378c1322019-04-25 23:48:08 -070061 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070062}
63
Joe Tsai378c1322019-04-25 23:48:08 -070064func (m *message) Set(fd pref.FieldDescriptor, v pref.Value) {
65 if fd == fieldDescS {
66 m.value = v.String()
67 m.set = true
68 return
69 }
70 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070071}
72
Joe Tsai378c1322019-04-25 23:48:08 -070073func (m *message) Mutable(pref.FieldDescriptor) pref.Value {
74 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070075}
76
Joe Tsai378c1322019-04-25 23:48:08 -070077func (m *message) NewMessage(pref.FieldDescriptor) pref.Message {
78 panic("invalid field descriptor")
79}
Damien Neil5b6d0472019-06-14 11:54:07 -070080
Damien Neilf5274512019-08-05 10:48:38 -070081func (m *message) NewField(pref.FieldDescriptor) pref.Value {
82 panic("invalid field descriptor")
83}
84
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`