Skip to content

Commit 95ddd2a

Browse files
committed
jsonpb loading
1 parent c119d8d commit 95ddd2a

2 files changed

Lines changed: 129 additions & 13 deletions

File tree

infra/conf/v2jsonpb/any2.go

Lines changed: 120 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,39 @@ func (v V2JsonProtobufAnyTypeDescriptor) FullName() protoreflect.FullName {
4242
}
4343

4444
func (v V2JsonProtobufAnyTypeDescriptor) Fields() protoreflect.FieldDescriptors {
45+
return V2JsonProtobufAnyTypeFields{v.MessageDescriptor.Fields()}
46+
}
47+
48+
type V2JsonProtobufAnyTypeFields struct {
49+
protoreflect.FieldDescriptors
50+
}
51+
52+
func (v V2JsonProtobufAnyTypeFields) Len() int {
53+
panic("implement me")
54+
}
55+
56+
func (v V2JsonProtobufAnyTypeFields) Get(i int) protoreflect.FieldDescriptor {
57+
panic("implement me")
58+
}
59+
60+
func (v V2JsonProtobufAnyTypeFields) ByName(s protoreflect.Name) protoreflect.FieldDescriptor {
61+
panic("implement me")
62+
}
63+
64+
func (v V2JsonProtobufAnyTypeFields) ByJSONName(s string) protoreflect.FieldDescriptor {
65+
switch s {
66+
case "type":
67+
return &V2JsonProtobufFollowerFieldDescriptor{v.FieldDescriptors.ByName("type_url")}
68+
default:
69+
return &V2JsonProtobufAnyValueField{v.FieldDescriptors.ByName("value"), "value"}
70+
}
71+
}
72+
73+
func (v V2JsonProtobufAnyTypeFields) ByTextName(s string) protoreflect.FieldDescriptor {
74+
panic("implement me")
75+
}
76+
77+
func (v V2JsonProtobufAnyTypeFields) ByNumber(n protoreflect.FieldNumber) protoreflect.FieldDescriptor {
4578
panic("implement me")
4679
}
4780

@@ -123,7 +156,7 @@ func (v V2JsonProtobufListFollower) Set(i int, value protoreflect.Value) {
123156
}
124157

125158
func (v V2JsonProtobufListFollower) Append(value protoreflect.Value) {
126-
panic("implement me")
159+
v.List.Append(value)
127160
}
128161

129162
func (v V2JsonProtobufListFollower) AppendMutable() protoreflect.Value {
@@ -135,7 +168,8 @@ func (v V2JsonProtobufListFollower) Truncate(i int) {
135168
}
136169

137170
func (v V2JsonProtobufListFollower) NewElement() protoreflect.Value {
138-
panic("implement me")
171+
newelement := v.List.NewElement()
172+
return protoreflect.ValueOfMessage(&V2JsonProtobufFollower{newelement.Message()})
139173
}
140174

141175
func (v V2JsonProtobufListFollower) IsValid() bool {
@@ -158,7 +192,7 @@ func (v V2JsonProtobufMapFollower) Range(f func(protoreflect.MapKey, protoreflec
158192
}
159193

160194
func (v V2JsonProtobufMapFollower) Has(key protoreflect.MapKey) bool {
161-
panic("implement me")
195+
return v.Map.Has(key)
162196
}
163197

164198
func (v V2JsonProtobufMapFollower) Clear(key protoreflect.MapKey) {
@@ -170,15 +204,16 @@ func (v V2JsonProtobufMapFollower) Get(key protoreflect.MapKey) protoreflect.Val
170204
}
171205

172206
func (v V2JsonProtobufMapFollower) Set(key protoreflect.MapKey, value protoreflect.Value) {
173-
panic("implement me")
207+
v.Map.Set(key, value)
174208
}
175209

176210
func (v V2JsonProtobufMapFollower) Mutable(key protoreflect.MapKey) protoreflect.Value {
177211
panic("implement me")
178212
}
179213

180214
func (v V2JsonProtobufMapFollower) NewValue() protoreflect.Value {
181-
panic("implement me")
215+
newelement := v.Map.NewValue()
216+
return protoreflect.ValueOfMessage(&V2JsonProtobufFollower{newelement.Message()})
182217
}
183218

184219
func (v V2JsonProtobufMapFollower) IsValid() bool {
@@ -194,7 +229,7 @@ func (v *V2JsonProtobufFollower) New() protoreflect.Message {
194229
}
195230

196231
func (v *V2JsonProtobufFollower) Interface() protoreflect.ProtoMessage {
197-
panic("implement me")
232+
return v.Message.Interface()
198233
}
199234

200235
func (v *V2JsonProtobufFollower) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
@@ -273,19 +308,71 @@ func (v *V2JsonProtobufFollower) Has(descriptor protoreflect.FieldDescriptor) bo
273308
}
274309

275310
func (v *V2JsonProtobufFollower) Clear(descriptor protoreflect.FieldDescriptor) {
276-
panic("implement me")
311+
v.Message.Clear(descriptor)
277312
}
278313

279314
func (v *V2JsonProtobufFollower) Set(descriptor protoreflect.FieldDescriptor, value protoreflect.Value) {
280-
panic("implement me")
315+
switch descriptor.(type) {
316+
case V2JsonProtobufFollowerFieldDescriptor:
317+
v.Message.Set(descriptor.(V2JsonProtobufFollowerFieldDescriptor).FieldDescriptor, value)
318+
case *V2JsonProtobufFollowerFieldDescriptor:
319+
v.Message.Set(descriptor.(*V2JsonProtobufFollowerFieldDescriptor).FieldDescriptor, value)
320+
case *V2JsonProtobufAnyValueField:
321+
protodata := value.Message()
322+
bytesw, err := proto.MarshalOptions{AllowPartial: true}.Marshal(&V2JsonProtobufAnyValueFieldReturn{protodata})
323+
if err != nil {
324+
panic(err)
325+
}
326+
v.Message.Set(descriptor.(*V2JsonProtobufAnyValueField).FieldDescriptor, protoreflect.ValueOfBytes(bytesw))
327+
default:
328+
v.Message.Set(descriptor, value)
329+
}
330+
331+
}
332+
333+
type V2JsonProtobufAnyValueFieldReturn struct {
334+
protoreflect.Message
335+
}
336+
337+
func (v *V2JsonProtobufAnyValueFieldReturn) ProtoReflect() protoreflect.Message {
338+
if bufFollow, ok := v.Message.(*V2JsonProtobufFollower); ok {
339+
return bufFollow.Message
340+
}
341+
return v.Message
281342
}
282343

283344
func (v *V2JsonProtobufFollower) Mutable(descriptor protoreflect.FieldDescriptor) protoreflect.Value {
284-
panic("implement me")
345+
value := v.Message.Mutable(descriptor.(V2JsonProtobufFollowerFieldDescriptor).FieldDescriptor)
346+
if descriptor.IsList() {
347+
return protoreflect.ValueOfList(&V2JsonProtobufListFollower{value.List()})
348+
}
349+
if descriptor.IsMap() {
350+
return protoreflect.ValueOfMap(&V2JsonProtobufMapFollower{value.Map(), descriptor})
351+
}
352+
if descriptor.Kind() == protoreflect.MessageKind {
353+
return protoreflect.ValueOfMessage(&V2JsonProtobufFollower{value.Message()})
354+
}
355+
return value
285356
}
286357

287358
func (v *V2JsonProtobufFollower) NewField(descriptor protoreflect.FieldDescriptor) protoreflect.Value {
288-
panic("implement me")
359+
360+
if _, ok := descriptor.(*V2JsonProtobufAnyValueField); ok {
361+
362+
url := v.Message.Get(v.Message.Descriptor().Fields().ByName("type_url")).String()
363+
364+
v2type := serial.V2TypeFromURL(url)
365+
instance, err := serial.GetInstance(v2type)
366+
if err != nil {
367+
panic(err)
368+
}
369+
newvalue := protoreflect.ValueOfMessage(&V2JsonProtobufFollower{instance.(proto.Message).ProtoReflect()})
370+
return newvalue
371+
}
372+
373+
value := v.Message.NewField(descriptor.(V2JsonProtobufFollowerFieldDescriptor).FieldDescriptor)
374+
newvalue := protoreflect.ValueOfMessage(&V2JsonProtobufFollower{value.Message()})
375+
return newvalue
289376
}
290377

291378
func (v *V2JsonProtobufFollower) WhichOneof(descriptor protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
@@ -297,11 +384,11 @@ func (v *V2JsonProtobufFollower) GetUnknown() protoreflect.RawFields {
297384
}
298385

299386
func (v *V2JsonProtobufFollower) SetUnknown(fields protoreflect.RawFields) {
300-
panic("implement me")
387+
v.Message.SetUnknown(fields)
301388
}
302389

303390
func (v *V2JsonProtobufFollower) IsValid() bool {
304-
panic("implement me")
391+
return v.Message.IsValid()
305392
}
306393

307394
func (v *V2JsonProtobufFollower) ProtoReflect() protoreflect.Message {
@@ -315,9 +402,29 @@ func (v *V2JsonProtobufFollower) Descriptor() protoreflect.MessageDescriptor {
315402
desc := &V2JsonProtobufAnyTypeDescriptor{(&anypb.Any{}).ProtoReflect().Descriptor()}
316403
return desc
317404
}
318-
return v.Message.Descriptor()
405+
return &V2JsonProtobufFollowerDescriptor{v.Message.Descriptor()}
319406
}
320407

321408
func (v *V2JsonProtobufFollower) Get(fd protoreflect.FieldDescriptor) protoreflect.Value {
322409
panic("implement me")
323410
}
411+
412+
type V2JsonProtobufFollowerDescriptor struct {
413+
protoreflect.MessageDescriptor
414+
}
415+
416+
func (v *V2JsonProtobufFollowerDescriptor) Fields() protoreflect.FieldDescriptors {
417+
return &V2JsonProtobufFollowerFields{v.MessageDescriptor.Fields()}
418+
}
419+
420+
type V2JsonProtobufFollowerFields struct {
421+
protoreflect.FieldDescriptors
422+
}
423+
424+
func (v *V2JsonProtobufFollowerFields) ByJSONName(s string) protoreflect.FieldDescriptor {
425+
return V2JsonProtobufFollowerFieldDescriptor{v.FieldDescriptors.ByJSONName(s)}
426+
}
427+
428+
func (v *V2JsonProtobufFollowerFields) ByTextName(s string) protoreflect.FieldDescriptor {
429+
return V2JsonProtobufFollowerFieldDescriptor{v.FieldDescriptors.ByTextName(s)}
430+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package v2jsonpb
2+
3+
import "github.com/v2fly/v2ray-core/v4/common/errors"
4+
5+
type errPathObjHolder struct{}
6+
7+
func newError(values ...interface{}) *errors.Error {
8+
return errors.New(values...).WithPathObj(errPathObjHolder{})
9+
}

0 commit comments

Comments
 (0)