| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430 |
- package v2jsonpb
- import (
- "github.com/golang/protobuf/jsonpb"
- "github.com/v2fly/v2ray-core/v4/common/serial"
- "google.golang.org/protobuf/proto"
- "google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/types/dynamicpb"
- "google.golang.org/protobuf/types/known/anypb"
- )
- type resolver2 struct {
- backgroundResolver jsonpb.AnyResolver
- }
- func (r resolver2) FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error) {
- panic("implement me")
- }
- func (r resolver2) FindMessageByURL(url string) (protoreflect.MessageType, error) {
- msg, err := r.backgroundResolver.Resolve(url)
- if err != nil {
- return nil, err
- }
- return msg.(proto.Message).ProtoReflect().Type(), nil
- }
- func (r resolver2) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) {
- panic("implement me")
- }
- func (r resolver2) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) {
- panic("implement me")
- }
- type V2JsonProtobufAnyTypeDescriptor struct {
- protoreflect.MessageDescriptor
- }
- func (v V2JsonProtobufAnyTypeDescriptor) FullName() protoreflect.FullName {
- return "org.v2fly.SynAny"
- }
- func (v V2JsonProtobufAnyTypeDescriptor) Fields() protoreflect.FieldDescriptors {
- return V2JsonProtobufAnyTypeFields{v.MessageDescriptor.Fields()}
- }
- type V2JsonProtobufAnyTypeFields struct {
- protoreflect.FieldDescriptors
- }
- func (v V2JsonProtobufAnyTypeFields) Len() int {
- panic("implement me")
- }
- func (v V2JsonProtobufAnyTypeFields) Get(i int) protoreflect.FieldDescriptor {
- panic("implement me")
- }
- func (v V2JsonProtobufAnyTypeFields) ByName(s protoreflect.Name) protoreflect.FieldDescriptor {
- panic("implement me")
- }
- func (v V2JsonProtobufAnyTypeFields) ByJSONName(s string) protoreflect.FieldDescriptor {
- switch s {
- case "type":
- return &V2JsonProtobufFollowerFieldDescriptor{v.FieldDescriptors.ByName("type_url")}
- default:
- return &V2JsonProtobufAnyValueField{v.FieldDescriptors.ByName("value"), "value"}
- }
- }
- func (v V2JsonProtobufAnyTypeFields) ByTextName(s string) protoreflect.FieldDescriptor {
- panic("implement me")
- }
- func (v V2JsonProtobufAnyTypeFields) ByNumber(n protoreflect.FieldNumber) protoreflect.FieldDescriptor {
- panic("implement me")
- }
- type V2JsonProtobufAnyType struct {
- originalType protoreflect.MessageType
- syntheticDescriptor V2JsonProtobufAnyTypeDescriptor
- }
- func (v V2JsonProtobufAnyType) New() protoreflect.Message {
- return dynamicpb.NewMessage(v.syntheticDescriptor)
- }
- func (v V2JsonProtobufAnyType) Zero() protoreflect.Message {
- return dynamicpb.NewMessage(v.syntheticDescriptor)
- }
- func (v V2JsonProtobufAnyType) Descriptor() protoreflect.MessageDescriptor {
- return v.syntheticDescriptor
- }
- type V2JsonProtobufFollowerFieldDescriptor struct {
- protoreflect.FieldDescriptor
- }
- type V2JsonProtobufAnyTypeFieldDescriptor struct {
- protoreflect.FieldDescriptor
- }
- func (v V2JsonProtobufAnyTypeFieldDescriptor) JSONName() string {
- return "type"
- }
- func (v V2JsonProtobufAnyTypeFieldDescriptor) TextName() string {
- return "type"
- }
- type V2JsonProtobufAnyValueField struct {
- protoreflect.FieldDescriptor
- name string
- }
- func (v *V2JsonProtobufAnyValueField) Kind() protoreflect.Kind {
- return protoreflect.MessageKind
- }
- func (v *V2JsonProtobufAnyValueField) JSONName() string {
- return v.name
- }
- func (v *V2JsonProtobufAnyValueField) TextName() string {
- return v.name
- }
- type V2JsonProtobufAnyFollower struct {
- protoreflect.Message
- }
- func (v *V2JsonProtobufAnyFollower) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
- v.Message.Range(func(descriptor protoreflect.FieldDescriptor, value protoreflect.Value) bool {
- return followValue(descriptor, value, f)
- })
- }
- type V2JsonProtobufFollower struct {
- protoreflect.Message
- }
- type V2JsonProtobufListFollower struct {
- protoreflect.List
- }
- func (v V2JsonProtobufListFollower) Len() int {
- return v.List.Len()
- }
- func (v V2JsonProtobufListFollower) Get(i int) protoreflect.Value {
- return protoreflect.ValueOfMessage(&V2JsonProtobufFollower{v.List.Get(i).Message()})
- }
- func (v V2JsonProtobufListFollower) Set(i int, value protoreflect.Value) {
- panic("implement me")
- }
- func (v V2JsonProtobufListFollower) Append(value protoreflect.Value) {
- v.List.Append(value)
- }
- func (v V2JsonProtobufListFollower) AppendMutable() protoreflect.Value {
- panic("implement me")
- }
- func (v V2JsonProtobufListFollower) Truncate(i int) {
- panic("implement me")
- }
- func (v V2JsonProtobufListFollower) NewElement() protoreflect.Value {
- newelement := v.List.NewElement()
- return protoreflect.ValueOfMessage(&V2JsonProtobufFollower{newelement.Message()})
- }
- func (v V2JsonProtobufListFollower) IsValid() bool {
- panic("implement me")
- }
- type V2JsonProtobufMapFollower struct {
- protoreflect.Map
- ValueKind protoreflect.FieldDescriptor
- }
- func (v V2JsonProtobufMapFollower) Len() int {
- panic("implement me")
- }
- func (v V2JsonProtobufMapFollower) Range(f func(protoreflect.MapKey, protoreflect.Value) bool) {
- v.Map.Range(func(key protoreflect.MapKey, value protoreflect.Value) bool {
- return followMapValue(v.ValueKind, value, key, f)
- })
- }
- func (v V2JsonProtobufMapFollower) Has(key protoreflect.MapKey) bool {
- return v.Map.Has(key)
- }
- func (v V2JsonProtobufMapFollower) Clear(key protoreflect.MapKey) {
- panic("implement me")
- }
- func (v V2JsonProtobufMapFollower) Get(key protoreflect.MapKey) protoreflect.Value {
- panic("implement me")
- }
- func (v V2JsonProtobufMapFollower) Set(key protoreflect.MapKey, value protoreflect.Value) {
- v.Map.Set(key, value)
- }
- func (v V2JsonProtobufMapFollower) Mutable(key protoreflect.MapKey) protoreflect.Value {
- panic("implement me")
- }
- func (v V2JsonProtobufMapFollower) NewValue() protoreflect.Value {
- newelement := v.Map.NewValue()
- return protoreflect.ValueOfMessage(&V2JsonProtobufFollower{newelement.Message()})
- }
- func (v V2JsonProtobufMapFollower) IsValid() bool {
- panic("implement me")
- }
- func (v *V2JsonProtobufFollower) Type() protoreflect.MessageType {
- panic("implement me")
- }
- func (v *V2JsonProtobufFollower) New() protoreflect.Message {
- panic("implement me")
- }
- func (v *V2JsonProtobufFollower) Interface() protoreflect.ProtoMessage {
- return v.Message.Interface()
- }
- func (v *V2JsonProtobufFollower) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
- v.Message.Range(func(descriptor protoreflect.FieldDescriptor, value protoreflect.Value) bool {
- name := descriptor.FullName()
- fullname := v.Message.Descriptor().FullName()
- if fullname == "google.protobuf.Any" {
- switch name {
- case "google.protobuf.Any.type_url":
- fd := V2JsonProtobufAnyTypeFieldDescriptor{descriptor}
- return f(fd, value)
- case "google.protobuf.Any.value":
- url := v.Message.Get(v.Message.Descriptor().Fields().ByName("type_url")).String()
- fd := &V2JsonProtobufAnyValueField{descriptor, url}
- bytesout := v.Message.Get(v.Message.Descriptor().Fields().Get(1)).Bytes()
- v2type := serial.V2TypeFromURL(url)
- instance, err := serial.GetInstance(v2type)
- if err != nil {
- panic(err)
- }
- unmarshaler := proto.UnmarshalOptions{AllowPartial: true, Resolver: resolver2{backgroundResolver: serial.GetResolver()}}
- err = unmarshaler.Unmarshal(bytesout, instance.(proto.Message))
- if err != nil {
- panic(err)
- }
- return f(fd, protoreflect.ValueOfMessage(&V2JsonProtobufFollower{instance.(proto.Message).ProtoReflect()}))
- default:
- panic("unexpected any value")
- }
- }
- return followValue(descriptor, value, f)
- })
- }
- func followValue(descriptor protoreflect.FieldDescriptor, value protoreflect.Value, f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) bool {
- fd := V2JsonProtobufFollowerFieldDescriptor{descriptor}
- if descriptor.Kind() == protoreflect.MessageKind {
- if descriptor.IsList() {
- value2 := protoreflect.ValueOfList(V2JsonProtobufListFollower{value.List()})
- return f(fd, value2)
- }
- if descriptor.IsMap() {
- value2 := protoreflect.ValueOfMap(V2JsonProtobufMapFollower{value.Map(), descriptor.MapValue()})
- return f(fd, value2)
- }
- value2 := protoreflect.ValueOfMessage(&V2JsonProtobufFollower{value.Message()})
- return f(fd, value2)
- }
- return f(fd, value)
- }
- func followMapValue(descriptor protoreflect.FieldDescriptor, value protoreflect.Value, mapkey protoreflect.MapKey, f func(protoreflect.MapKey, protoreflect.Value) bool) bool {
- if descriptor.Kind() == protoreflect.MessageKind {
- if descriptor.IsList() {
- value2 := protoreflect.ValueOfList(V2JsonProtobufListFollower{value.List()})
- return f(mapkey, value2)
- }
- if descriptor.IsMap() {
- value2 := protoreflect.ValueOfMap(V2JsonProtobufMapFollower{value.Map(), descriptor.MapValue()})
- return f(mapkey, value2)
- }
- value2 := protoreflect.ValueOfMessage(&V2JsonProtobufFollower{value.Message()})
- return f(mapkey, value2)
- }
- return f(mapkey, value)
- }
- func (v *V2JsonProtobufFollower) Has(descriptor protoreflect.FieldDescriptor) bool {
- panic("implement me")
- }
- func (v *V2JsonProtobufFollower) Clear(descriptor protoreflect.FieldDescriptor) {
- v.Message.Clear(descriptor)
- }
- func (v *V2JsonProtobufFollower) Set(descriptor protoreflect.FieldDescriptor, value protoreflect.Value) {
- switch descriptor.(type) {
- case V2JsonProtobufFollowerFieldDescriptor:
- v.Message.Set(descriptor.(V2JsonProtobufFollowerFieldDescriptor).FieldDescriptor, value)
- case *V2JsonProtobufFollowerFieldDescriptor:
- v.Message.Set(descriptor.(*V2JsonProtobufFollowerFieldDescriptor).FieldDescriptor, value)
- case *V2JsonProtobufAnyValueField:
- protodata := value.Message()
- bytesw, err := proto.MarshalOptions{AllowPartial: true}.Marshal(&V2JsonProtobufAnyValueFieldReturn{protodata})
- if err != nil {
- panic(err)
- }
- v.Message.Set(descriptor.(*V2JsonProtobufAnyValueField).FieldDescriptor, protoreflect.ValueOfBytes(bytesw))
- default:
- v.Message.Set(descriptor, value)
- }
- }
- type V2JsonProtobufAnyValueFieldReturn struct {
- protoreflect.Message
- }
- func (v *V2JsonProtobufAnyValueFieldReturn) ProtoReflect() protoreflect.Message {
- if bufFollow, ok := v.Message.(*V2JsonProtobufFollower); ok {
- return bufFollow.Message
- }
- return v.Message
- }
- func (v *V2JsonProtobufFollower) Mutable(descriptor protoreflect.FieldDescriptor) protoreflect.Value {
- value := v.Message.Mutable(descriptor.(V2JsonProtobufFollowerFieldDescriptor).FieldDescriptor)
- if descriptor.IsList() {
- return protoreflect.ValueOfList(&V2JsonProtobufListFollower{value.List()})
- }
- if descriptor.IsMap() {
- return protoreflect.ValueOfMap(&V2JsonProtobufMapFollower{value.Map(), descriptor})
- }
- if descriptor.Kind() == protoreflect.MessageKind {
- return protoreflect.ValueOfMessage(&V2JsonProtobufFollower{value.Message()})
- }
- return value
- }
- func (v *V2JsonProtobufFollower) NewField(descriptor protoreflect.FieldDescriptor) protoreflect.Value {
- if _, ok := descriptor.(*V2JsonProtobufAnyValueField); ok {
- url := v.Message.Get(v.Message.Descriptor().Fields().ByName("type_url")).String()
- v2type := serial.V2TypeFromURL(url)
- instance, err := serial.GetInstance(v2type)
- if err != nil {
- panic(err)
- }
- newvalue := protoreflect.ValueOfMessage(&V2JsonProtobufFollower{instance.(proto.Message).ProtoReflect()})
- return newvalue
- }
- value := v.Message.NewField(descriptor.(V2JsonProtobufFollowerFieldDescriptor).FieldDescriptor)
- newvalue := protoreflect.ValueOfMessage(&V2JsonProtobufFollower{value.Message()})
- return newvalue
- }
- func (v *V2JsonProtobufFollower) WhichOneof(descriptor protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
- panic("implement me")
- }
- func (v *V2JsonProtobufFollower) GetUnknown() protoreflect.RawFields {
- panic("implement me")
- }
- func (v *V2JsonProtobufFollower) SetUnknown(fields protoreflect.RawFields) {
- v.Message.SetUnknown(fields)
- }
- func (v *V2JsonProtobufFollower) IsValid() bool {
- return v.Message.IsValid()
- }
- func (v *V2JsonProtobufFollower) ProtoReflect() protoreflect.Message {
- return v
- }
- func (v *V2JsonProtobufFollower) Descriptor() protoreflect.MessageDescriptor {
- fullname := v.Message.Descriptor().FullName()
- if fullname == "google.protobuf.Any" {
- //desc := &V2JsonProtobufAnyType{v.Message.Type(), V2JsonProtobufAnyTypeDescriptor{(&anypb.Any{}).ProtoReflect().Descriptor()}}
- desc := &V2JsonProtobufAnyTypeDescriptor{(&anypb.Any{}).ProtoReflect().Descriptor()}
- return desc
- }
- return &V2JsonProtobufFollowerDescriptor{v.Message.Descriptor()}
- }
- func (v *V2JsonProtobufFollower) Get(fd protoreflect.FieldDescriptor) protoreflect.Value {
- panic("implement me")
- }
- type V2JsonProtobufFollowerDescriptor struct {
- protoreflect.MessageDescriptor
- }
- func (v *V2JsonProtobufFollowerDescriptor) Fields() protoreflect.FieldDescriptors {
- return &V2JsonProtobufFollowerFields{v.MessageDescriptor.Fields()}
- }
- type V2JsonProtobufFollowerFields struct {
- protoreflect.FieldDescriptors
- }
- func (v *V2JsonProtobufFollowerFields) ByJSONName(s string) protoreflect.FieldDescriptor {
- return V2JsonProtobufFollowerFieldDescriptor{v.FieldDescriptors.ByJSONName(s)}
- }
- func (v *V2JsonProtobufFollowerFields) ByTextName(s string) protoreflect.FieldDescriptor {
- return V2JsonProtobufFollowerFieldDescriptor{v.FieldDescriptors.ByTextName(s)}
- }
|