func (x *SearchUsersRequest) UnmarshalProtoJSON(s *jsonplugin.UnmarshalState) {
	if s.ReadNil() {
		return
	}
	s.ReadObject(func(key string) {
		switch key {
		default:
			s.ReadAny()  
		case "id_contains", "idContains":
			s.AddField("id_contains")
			x.IdContains = s.ReadString()
		case "name_contains", "nameContains":
			s.AddField("name_contains")
			x.NameContains = s.ReadString()
		case "description_contains", "descriptionContains":
			s.AddField("description_contains")
			x.DescriptionContains = s.ReadString()
		case "attributes_contain", "attributesContain":
			s.AddField("attributes_contain")
			x.AttributesContain = make(map[string]string)
			s.ReadStringMap(func(key string) {
				x.AttributesContain[key] = s.ReadString()
			})
		case "state":
			s.AddField("state")
			s.ReadArray(func() {
				var v State
				v.UnmarshalProtoJSON(s)
				x.State = append(x.State, v)
			})
		case "field_mask", "fieldMask":
			s.AddField("field_mask")
			v := gogo.UnmarshalFieldMask(s)
			if s.Err() != nil {
				return
			}
			x.FieldMask = v
		case "order":
			s.AddField("order")
			x.Order = s.ReadString()
		case "limit":
			s.AddField("limit")
			x.Limit = s.ReadUint32()
		case "page":
			s.AddField("page")
			x.Page = s.ReadUint32()
		case "deleted":
			s.AddField("deleted")
			x.Deleted = s.ReadBool()
		}
	})
}
UnmarshalProtoJSON unmarshals the SearchUsersRequest message from JSON.
package ttnpb
import (
	gogo "github.com/TheThingsIndustries/protoc-gen-go-json/gogo"
	jsonplugin "github.com/TheThingsIndustries/protoc-gen-go-json/jsonplugin"
)
func (x *SearchClientsRequest) MarshalProtoJSON(s *jsonplugin.MarshalState) {
	if x == nil {
		s.WriteNil()
		return
	}
	s.WriteObjectStart()
	var wroteField bool
	if x.IdContains != "" || s.HasField("id_contains") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("id_contains")
		s.WriteString(x.IdContains)
	}
	if x.NameContains != "" || s.HasField("name_contains") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("name_contains")
		s.WriteString(x.NameContains)
	}
	if x.DescriptionContains != "" || s.HasField("description_contains") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("description_contains")
		s.WriteString(x.DescriptionContains)
	}
	if x.AttributesContain != nil || s.HasField("attributes_contain") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("attributes_contain")
		s.WriteObjectStart()
		var wroteElement bool
		for k, v := range x.AttributesContain {
			s.WriteMoreIf(&wroteElement)
			s.WriteObjectStringField(k)
			s.WriteString(v)
		}
		s.WriteObjectEnd()
	}
	if len(x.State) > 0 || s.HasField("state") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("state")
		s.WriteArrayStart()
		var wroteElement bool
		for _, element := range x.State {
			s.WriteMoreIf(&wroteElement)
			element.MarshalProtoJSON(s)
		}
		s.WriteArrayEnd()
	}
	if x.FieldMask != nil || s.HasField("field_mask") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("field_mask")
		if x.FieldMask == nil {
			s.WriteNil()
		} else {
			gogo.MarshalFieldMask(s, x.FieldMask)
		}
	}
	if x.Order != "" || s.HasField("order") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("order")
		s.WriteString(x.Order)
	}
	if x.Limit != 0 || s.HasField("limit") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("limit")
		s.WriteUint32(x.Limit)
	}
	if x.Page != 0 || s.HasField("page") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("page")
		s.WriteUint32(x.Page)
	}
	if x.Deleted || s.HasField("deleted") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("deleted")
		s.WriteBool(x.Deleted)
	}
	s.WriteObjectEnd()
}
func (x *SearchClientsRequest) UnmarshalProtoJSON(s *jsonplugin.UnmarshalState) {
	if s.ReadNil() {
		return
	}
	s.ReadObject(func(key string) {
		switch key {
		default:
			s.ReadAny()  
		case "id_contains", "idContains":
			s.AddField("id_contains")
			x.IdContains = s.ReadString()
		case "name_contains", "nameContains":
			s.AddField("name_contains")
			x.NameContains = s.ReadString()
		case "description_contains", "descriptionContains":
			s.AddField("description_contains")
			x.DescriptionContains = s.ReadString()
		case "attributes_contain", "attributesContain":
			s.AddField("attributes_contain")
			x.AttributesContain = make(map[string]string)
			s.ReadStringMap(func(key string) {
				x.AttributesContain[key] = s.ReadString()
			})
		case "state":
			s.AddField("state")
			s.ReadArray(func() {
				var v State
				v.UnmarshalProtoJSON(s)
				x.State = append(x.State, v)
			})
		case "field_mask", "fieldMask":
			s.AddField("field_mask")
			v := gogo.UnmarshalFieldMask(s)
			if s.Err() != nil {
				return
			}
			x.FieldMask = v
		case "order":
			s.AddField("order")
			x.Order = s.ReadString()
		case "limit":
			s.AddField("limit")
			x.Limit = s.ReadUint32()
		case "page":
			s.AddField("page")
			x.Page = s.ReadUint32()
		case "deleted":
			s.AddField("deleted")
			x.Deleted = s.ReadBool()
		}
	})
}
func (x *SearchUsersRequest) MarshalProtoJSON(s *jsonplugin.MarshalState) {
	if x == nil {
		s.WriteNil()
		return
	}
	s.WriteObjectStart()
	var wroteField bool
	if x.IdContains != "" || s.HasField("id_contains") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("id_contains")
		s.WriteString(x.IdContains)
	}
	if x.NameContains != "" || s.HasField("name_contains") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("name_contains")
		s.WriteString(x.NameContains)
	}
	if x.DescriptionContains != "" || s.HasField("description_contains") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("description_contains")
		s.WriteString(x.DescriptionContains)
	}
	if x.AttributesContain != nil || s.HasField("attributes_contain") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("attributes_contain")
		s.WriteObjectStart()
		var wroteElement bool
		for k, v := range x.AttributesContain {
			s.WriteMoreIf(&wroteElement)
			s.WriteObjectStringField(k)
			s.WriteString(v)
		}
		s.WriteObjectEnd()
	}
	if len(x.State) > 0 || s.HasField("state") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("state")
		s.WriteArrayStart()
		var wroteElement bool
		for _, element := range x.State {
			s.WriteMoreIf(&wroteElement)
			element.MarshalProtoJSON(s)
		}
		s.WriteArrayEnd()
	}
	if x.FieldMask != nil || s.HasField("field_mask") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("field_mask")
		if x.FieldMask == nil {
			s.WriteNil()
		} else {
			gogo.MarshalFieldMask(s, x.FieldMask)
		}
	}
	if x.Order != "" || s.HasField("order") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("order")
		s.WriteString(x.Order)
	}
	if x.Limit != 0 || s.HasField("limit") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("limit")
		s.WriteUint32(x.Limit)
	}
	if x.Page != 0 || s.HasField("page") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("page")
		s.WriteUint32(x.Page)
	}
	if x.Deleted || s.HasField("deleted") {
		s.WriteMoreIf(&wroteField)
		s.WriteObjectField("deleted")
		s.WriteBool(x.Deleted)
	}
	s.WriteObjectEnd()
}