blob: a663e87d41610b6d7167cb0ca8855cd8ae2dfa26 [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"
Damien Neilf12fb452020-01-21 11:27:51 -080011 "google.golang.org/protobuf/runtime/protoiface"
Joe Tsaid4211502019-07-02 14:58:02 -070012
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
Damien Neil16163b42019-08-06 15:43:25 -070025func (m *message) Descriptor() pref.MessageDescriptor { return fileDesc.Messages().Get(0) }
26func (m *message) Type() pref.MessageType { return m }
Damien Neil5b6d0472019-06-14 11:54:07 -070027func (m *message) New() pref.Message { return &message{} }
Damien Neil16163b42019-08-06 15:43:25 -070028func (m *message) Zero() pref.Message { return (*message)(nil) }
Damien Neil5b6d0472019-06-14 11:54:07 -070029func (m *message) Interface() pref.ProtoMessage { return (*IrregularMessage)(m) }
Damien Neilf12fb452020-01-21 11:27:51 -080030func (m *message) ProtoMethods() *protoiface.Methods { return nil }
Damien Neil5b6d0472019-06-14 11:54:07 -070031
Joe Tsaid4211502019-07-02 14:58:02 -070032var fieldDescS = fileDesc.Messages().Get(0).Fields().Get(0)
Damien Neil5b6d0472019-06-14 11:54:07 -070033
Joe Tsai378c1322019-04-25 23:48:08 -070034func (m *message) Range(f func(pref.FieldDescriptor, pref.Value) bool) {
35 if m.set {
36 f(fieldDescS, pref.ValueOf(m.value))
37 }
38}
39
40func (m *message) Has(fd pref.FieldDescriptor) bool {
41 if fd == fieldDescS {
Damien Neil5b6d0472019-06-14 11:54:07 -070042 return m.set
43 }
Joe Tsai378c1322019-04-25 23:48:08 -070044 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070045}
46
Joe Tsai378c1322019-04-25 23:48:08 -070047func (m *message) Clear(fd pref.FieldDescriptor) {
48 if fd == fieldDescS {
Damien Neil5b6d0472019-06-14 11:54:07 -070049 m.value = ""
50 m.set = false
Joe Tsai378c1322019-04-25 23:48:08 -070051 return
Damien Neil5b6d0472019-06-14 11:54:07 -070052 }
Joe Tsai378c1322019-04-25 23:48:08 -070053 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070054}
55
Joe Tsai378c1322019-04-25 23:48:08 -070056func (m *message) Get(fd pref.FieldDescriptor) pref.Value {
57 if fd == fieldDescS {
58 return pref.ValueOf(m.value)
Damien Neil5b6d0472019-06-14 11:54:07 -070059 }
Joe Tsai378c1322019-04-25 23:48:08 -070060 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070061}
62
Joe Tsai378c1322019-04-25 23:48:08 -070063func (m *message) Set(fd pref.FieldDescriptor, v pref.Value) {
64 if fd == fieldDescS {
65 m.value = v.String()
66 m.set = true
67 return
68 }
69 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070070}
71
Joe Tsai378c1322019-04-25 23:48:08 -070072func (m *message) Mutable(pref.FieldDescriptor) pref.Value {
73 panic("invalid field descriptor")
Damien Neil5b6d0472019-06-14 11:54:07 -070074}
75
Damien Neilf5274512019-08-05 10:48:38 -070076func (m *message) NewField(pref.FieldDescriptor) pref.Value {
77 panic("invalid field descriptor")
78}
79
Joe Tsai378c1322019-04-25 23:48:08 -070080func (m *message) WhichOneof(pref.OneofDescriptor) pref.FieldDescriptor {
81 panic("invalid oneof descriptor")
82}
Damien Neil5b6d0472019-06-14 11:54:07 -070083
Joe Tsai378c1322019-04-25 23:48:08 -070084func (m *message) GetUnknown() pref.RawFields { return nil }
85func (m *message) SetUnknown(pref.RawFields) { return }
Damien Neil5b6d0472019-06-14 11:54:07 -070086
Damien Neil82886da2019-11-26 13:27:24 -080087func (m *message) IsValid() bool {
88 return m != nil
89}
90
Joe Tsaid4211502019-07-02 14:58:02 -070091var fileDesc = func() pref.FileDescriptor {
Damien Neil5b6d0472019-06-14 11:54:07 -070092 p := &descriptorpb.FileDescriptorProto{}
93 if err := prototext.Unmarshal([]byte(descriptorText), p); err != nil {
94 panic(err)
95 }
96 file, err := protodesc.NewFile(p, nil)
97 if err != nil {
98 panic(err)
99 }
100 return file
101}()
102
Damien Neil3c5fb5f2020-02-04 15:03:30 -0800103func file_internal_testprotos_irregular_irregular_proto_init() { _ = fileDesc }
Damien Neil5b6d0472019-06-14 11:54:07 -0700104
105const descriptorText = `
106 name: "internal/testprotos/irregular/irregular.proto"
107 package: "goproto.proto.thirdparty"
108 message_type {
109 name: "IrregularMessage"
110 field {
111 name: "s"
112 number: 1
113 label: LABEL_OPTIONAL
114 type: TYPE_STRING
115 json_name: "s"
116 }
117 }
118 options {
119 go_package: "google.golang.org/protobuf/internal/testprotos/irregular"
120 }
121`
Damien Neil47d58932019-09-30 15:34:27 -0700122
123type AberrantMessage int
124
125func (m AberrantMessage) ProtoMessage() {}
126func (m AberrantMessage) Reset() {}
127func (m AberrantMessage) String() string { return "" }
128func (m AberrantMessage) Marshal() ([]byte, error) { return nil, nil }
129func (m AberrantMessage) Unmarshal([]byte) error { return nil }