blob: b328edbe1598ef1e2767b85f03fb6c2985152577 [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
Damien Neilf5274512019-08-05 10:48:38 -070077func (m *message) NewField(pref.FieldDescriptor) pref.Value {
78 panic("invalid field descriptor")
79}
80
Joe Tsai378c1322019-04-25 23:48:08 -070081func (m *message) WhichOneof(pref.OneofDescriptor) pref.FieldDescriptor {
82 panic("invalid oneof descriptor")
83}
Damien Neil5b6d0472019-06-14 11:54:07 -070084
Joe Tsai378c1322019-04-25 23:48:08 -070085func (m *message) GetUnknown() pref.RawFields { return nil }
86func (m *message) SetUnknown(pref.RawFields) { return }
Damien Neil5b6d0472019-06-14 11:54:07 -070087
Joe Tsaid4211502019-07-02 14:58:02 -070088var fileDesc = func() pref.FileDescriptor {
Damien Neil5b6d0472019-06-14 11:54:07 -070089 p := &descriptorpb.FileDescriptorProto{}
90 if err := prototext.Unmarshal([]byte(descriptorText), p); err != nil {
91 panic(err)
92 }
93 file, err := protodesc.NewFile(p, nil)
94 if err != nil {
95 panic(err)
96 }
97 return file
98}()
99
Joe Tsaid4211502019-07-02 14:58:02 -0700100func file_irregular_irregular_proto_init() { _ = fileDesc }
Damien Neil5b6d0472019-06-14 11:54:07 -0700101
102const descriptorText = `
103 name: "internal/testprotos/irregular/irregular.proto"
104 package: "goproto.proto.thirdparty"
105 message_type {
106 name: "IrregularMessage"
107 field {
108 name: "s"
109 number: 1
110 label: LABEL_OPTIONAL
111 type: TYPE_STRING
112 json_name: "s"
113 }
114 }
115 options {
116 go_package: "google.golang.org/protobuf/internal/testprotos/irregular"
117 }
118`
Damien Neil47d58932019-09-30 15:34:27 -0700119
120type AberrantMessage int
121
122func (m AberrantMessage) ProtoMessage() {}
123func (m AberrantMessage) Reset() {}
124func (m AberrantMessage) String() string { return "" }
125func (m AberrantMessage) Marshal() ([]byte, error) { return nil, nil }
126func (m AberrantMessage) Unmarshal([]byte) error { return nil }