blob: 69220ba0e5a225f44df8d6f97a678a147c0d9dbe [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
Damien Neil5b6d0472019-06-14 11:54:07 -070012 "google.golang.org/protobuf/types/descriptorpb"
13)
14
15type IrregularMessage struct {
16 set bool
17 value string
18}
19
20func (m *IrregularMessage) ProtoReflect() pref.Message { return (*message)(m) }
21
22type message IrregularMessage
23
Damien Neil16163b42019-08-06 15:43:25 -070024func (m *message) Descriptor() pref.MessageDescriptor { return fileDesc.Messages().Get(0) }
25func (m *message) Type() pref.MessageType { return m }
Damien Neil5b6d0472019-06-14 11:54:07 -070026func (m *message) New() pref.Message { return &message{} }
Damien Neil16163b42019-08-06 15:43:25 -070027func (m *message) Zero() pref.Message { return (*message)(nil) }
Damien Neil5b6d0472019-06-14 11:54:07 -070028func (m *message) Interface() pref.ProtoMessage { return (*IrregularMessage)(m) }
29
Joe Tsaid4211502019-07-02 14:58:02 -070030var fieldDescS = fileDesc.Messages().Get(0).Fields().Get(0)
Damien Neil5b6d0472019-06-14 11:54:07 -070031
Joe Tsai378c1322019-04-25 23:48:08 -070032func (m *message) Range(f func(pref.FieldDescriptor, pref.Value) bool) {
33 if m.set {
34 f(fieldDescS, pref.ValueOf(m.value))
35 }
36}
37
38func (m *message) Has(fd pref.FieldDescriptor) bool {
39 if fd == fieldDescS {
Damien Neil5b6d0472019-06-14 11:54:07 -070040 return m.set
41 }
Joe Tsai378c1322019-04-25 23:48:08 -070042 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070043}
44
Joe Tsai378c1322019-04-25 23:48:08 -070045func (m *message) Clear(fd pref.FieldDescriptor) {
46 if fd == fieldDescS {
Damien Neil5b6d0472019-06-14 11:54:07 -070047 m.value = ""
48 m.set = false
Joe Tsai378c1322019-04-25 23:48:08 -070049 return
Damien Neil5b6d0472019-06-14 11:54:07 -070050 }
Joe Tsai378c1322019-04-25 23:48:08 -070051 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070052}
53
Joe Tsai378c1322019-04-25 23:48:08 -070054func (m *message) Get(fd pref.FieldDescriptor) pref.Value {
55 if fd == fieldDescS {
56 return pref.ValueOf(m.value)
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) Set(fd pref.FieldDescriptor, v pref.Value) {
62 if fd == fieldDescS {
63 m.value = v.String()
64 m.set = true
65 return
66 }
67 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070068}
69
Joe Tsai378c1322019-04-25 23:48:08 -070070func (m *message) Mutable(pref.FieldDescriptor) pref.Value {
71 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070072}
73
Damien Neilf5274512019-08-05 10:48:38 -070074func (m *message) NewField(pref.FieldDescriptor) pref.Value {
75 panic("invalid field descriptor")
76}
77
Joe Tsai378c1322019-04-25 23:48:08 -070078func (m *message) WhichOneof(pref.OneofDescriptor) pref.FieldDescriptor {
79 panic("invalid oneof descriptor")
80}
Damien Neil5b6d0472019-06-14 11:54:07 -070081
Joe Tsai378c1322019-04-25 23:48:08 -070082func (m *message) GetUnknown() pref.RawFields { return nil }
83func (m *message) SetUnknown(pref.RawFields) { return }
Damien Neil5b6d0472019-06-14 11:54:07 -070084
Joe Tsaid4211502019-07-02 14:58:02 -070085var fileDesc = func() pref.FileDescriptor {
Damien Neil5b6d0472019-06-14 11:54:07 -070086 p := &descriptorpb.FileDescriptorProto{}
87 if err := prototext.Unmarshal([]byte(descriptorText), p); err != nil {
88 panic(err)
89 }
90 file, err := protodesc.NewFile(p, nil)
91 if err != nil {
92 panic(err)
93 }
94 return file
95}()
96
Joe Tsaid4211502019-07-02 14:58:02 -070097func file_irregular_irregular_proto_init() { _ = fileDesc }
Damien Neil5b6d0472019-06-14 11:54:07 -070098
99const descriptorText = `
100 name: "internal/testprotos/irregular/irregular.proto"
101 package: "goproto.proto.thirdparty"
102 message_type {
103 name: "IrregularMessage"
104 field {
105 name: "s"
106 number: 1
107 label: LABEL_OPTIONAL
108 type: TYPE_STRING
109 json_name: "s"
110 }
111 }
112 options {
113 go_package: "google.golang.org/protobuf/internal/testprotos/irregular"
114 }
115`
Damien Neil47d58932019-09-30 15:34:27 -0700116
117type AberrantMessage int
118
119func (m AberrantMessage) ProtoMessage() {}
120func (m AberrantMessage) Reset() {}
121func (m AberrantMessage) String() string { return "" }
122func (m AberrantMessage) Marshal() ([]byte, error) { return nil, nil }
123func (m AberrantMessage) Unmarshal([]byte) error { return nil }