followermap.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package v2jsonpb
  2. import "google.golang.org/protobuf/reflect/protoreflect"
  3. type V2JsonProtobufMapFollower struct {
  4. protoreflect.Map
  5. ValueKind protoreflect.FieldDescriptor
  6. }
  7. func (v V2JsonProtobufMapFollower) Len() int {
  8. panic("implement me")
  9. }
  10. func (v V2JsonProtobufMapFollower) Range(f func(protoreflect.MapKey, protoreflect.Value) bool) {
  11. v.Map.Range(func(key protoreflect.MapKey, value protoreflect.Value) bool {
  12. return followMapValue(v.ValueKind, value, key, f)
  13. })
  14. }
  15. func (v V2JsonProtobufMapFollower) Has(key protoreflect.MapKey) bool {
  16. return v.Map.Has(key)
  17. }
  18. func (v V2JsonProtobufMapFollower) Clear(key protoreflect.MapKey) {
  19. panic("implement me")
  20. }
  21. func (v V2JsonProtobufMapFollower) Get(key protoreflect.MapKey) protoreflect.Value {
  22. panic("implement me")
  23. }
  24. func (v V2JsonProtobufMapFollower) Set(key protoreflect.MapKey, value protoreflect.Value) {
  25. v.Map.Set(key, value)
  26. }
  27. func (v V2JsonProtobufMapFollower) Mutable(key protoreflect.MapKey) protoreflect.Value {
  28. panic("implement me")
  29. }
  30. func (v V2JsonProtobufMapFollower) NewValue() protoreflect.Value {
  31. newelement := v.Map.NewValue()
  32. return protoreflect.ValueOfMessage(&V2JsonProtobufFollower{newelement.Message()})
  33. }
  34. func (v V2JsonProtobufMapFollower) IsValid() bool {
  35. panic("implement me")
  36. }
  37. func followMapValue(descriptor protoreflect.FieldDescriptor, value protoreflect.Value, mapkey protoreflect.MapKey, f func(protoreflect.MapKey, protoreflect.Value) bool) bool {
  38. if descriptor.Kind() == protoreflect.MessageKind {
  39. if descriptor.IsList() {
  40. value2 := protoreflect.ValueOfList(V2JsonProtobufListFollower{value.List()})
  41. return f(mapkey, value2)
  42. }
  43. if descriptor.IsMap() {
  44. value2 := protoreflect.ValueOfMap(V2JsonProtobufMapFollower{value.Map(), descriptor.MapValue()})
  45. return f(mapkey, value2)
  46. }
  47. value2 := protoreflect.ValueOfMessage(&V2JsonProtobufFollower{value.Message()})
  48. return f(mapkey, value2)
  49. }
  50. return f(mapkey, value)
  51. }