blob: cc9c5499c1dd464af80c819b8a6dae3afb45341b [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"
11 "google.golang.org/protobuf/types/descriptorpb"
12)
13
14type IrregularMessage struct {
15 set bool
16 value string
17}
18
19func (m *IrregularMessage) ProtoReflect() pref.Message { return (*message)(m) }
20
21type message IrregularMessage
22
23func (m *message) Descriptor() pref.MessageDescriptor { return descriptor.Messages().Get(0) }
24func (m *message) Type() pref.MessageType { return nil }
25func (m *message) KnownFields() pref.KnownFields { return (*known)(m) }
26func (m *message) UnknownFields() pref.UnknownFields { return (*unknown)(m) }
27func (m *message) New() pref.Message { return &message{} }
28func (m *message) Interface() pref.ProtoMessage { return (*IrregularMessage)(m) }
29
30type known IrregularMessage
31
32func (m *known) Len() int {
33 if m.set {
34 return 1
35 }
36 return 0
37}
38
39func (m *known) Has(num pref.FieldNumber) bool {
40 switch num {
41 case fieldS:
42 return m.set
43 }
44 return false
45}
46
47func (m *known) Get(num pref.FieldNumber) pref.Value {
48 switch num {
49 case fieldS:
50 return pref.ValueOf(m.value)
51 }
52 return pref.Value{}
53}
54
55func (m *known) Set(num pref.FieldNumber, v pref.Value) {
56 switch num {
57 case fieldS:
58 m.value = v.String()
59 default:
60 panic("unknown field")
61 }
62}
63
64func (m *known) Clear(num pref.FieldNumber) {
65 switch num {
66 case fieldS:
67 m.value = ""
68 m.set = false
69 default:
70 panic("unknown field")
71 }
72}
73
74func (m *known) WhichOneof(name pref.Name) pref.FieldNumber {
75 return 0
76}
77
78func (m *known) Range(f func(pref.FieldNumber, pref.Value) bool) {
79 if m.set {
80 f(fieldS, pref.ValueOf(m.value))
81 }
82}
83
84func (m *known) NewMessage(num pref.FieldNumber) pref.Message {
85 panic("not a message field")
86}
87
88func (m *known) ExtensionTypes() pref.ExtensionFieldTypes {
89 return (*exttypes)(m)
90}
91
92type unknown IrregularMessage
93
94func (m *unknown) Len() int { return 0 }
95func (m *unknown) Get(pref.FieldNumber) pref.RawFields { return nil }
96func (m *unknown) Set(pref.FieldNumber, pref.RawFields) {}
97func (m *unknown) Range(func(pref.FieldNumber, pref.RawFields) bool) {}
98func (m *unknown) IsSupported() bool { return false }
99
100type exttypes IrregularMessage
101
102func (m *exttypes) Len() int { return 0 }
103func (m *exttypes) Register(pref.ExtensionType) { panic("not extendable") }
104func (m *exttypes) Remove(pref.ExtensionType) {}
105func (m *exttypes) ByNumber(pref.FieldNumber) pref.ExtensionType { return nil }
106func (m *exttypes) ByName(pref.FullName) pref.ExtensionType { return nil }
107func (m *exttypes) Range(func(pref.ExtensionType) bool) {}
108
109const fieldS = pref.FieldNumber(1)
110
111var descriptor = func() pref.FileDescriptor {
112 p := &descriptorpb.FileDescriptorProto{}
113 if err := prototext.Unmarshal([]byte(descriptorText), p); err != nil {
114 panic(err)
115 }
116 file, err := protodesc.NewFile(p, nil)
117 if err != nil {
118 panic(err)
119 }
120 return file
121}()
122
123func file_irregular_irregular_proto_init() { _ = descriptor }
124
125const descriptorText = `
126 name: "internal/testprotos/irregular/irregular.proto"
127 package: "goproto.proto.thirdparty"
128 message_type {
129 name: "IrregularMessage"
130 field {
131 name: "s"
132 number: 1
133 label: LABEL_OPTIONAL
134 type: TYPE_STRING
135 json_name: "s"
136 }
137 }
138 options {
139 go_package: "google.golang.org/protobuf/internal/testprotos/irregular"
140 }
141`