// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.

package test

import (
	json "encoding/json"
	fmt "fmt"
	pool "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/pool"
	proto "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/proto"
	encoding "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/proto/encoding"
	easyproto "github.com/VictoriaMetrics/easyproto"
	jlexer "github.com/mailru/easyjson/jlexer"
	jwriter "github.com/mailru/easyjson/jwriter"
	protowire "google.golang.org/protobuf/encoding/protowire"
	strconv "strconv"
)

type Primitives_SomeEnum int32

const (
	Primitives_UNKNOWN  Primitives_SomeEnum = 0
	Primitives_POSITIVE Primitives_SomeEnum = 1
	Primitives_NEGATIVE Primitives_SomeEnum = -1
)

var (
	Primitives_SomeEnum_name = map[int32]string{
		0:  "UNKNOWN",
		1:  "POSITIVE",
		-1: "NEGATIVE",
	}
	Primitives_SomeEnum_value = map[string]int32{
		"UNKNOWN":  0,
		"POSITIVE": 1,
		"NEGATIVE": -1,
	}
)

func (x Primitives_SomeEnum) String() string {
	if v, ok := Primitives_SomeEnum_name[int32(x)]; ok {
		return v
	}
	return strconv.FormatInt(int64(x), 10)
}
func (x *Primitives_SomeEnum) FromString(s string) bool {
	if v, ok := Primitives_SomeEnum_value[s]; ok {
		*x = Primitives_SomeEnum(v)
		return true
	}
	return false
}

type Primitives_Aux struct {
	InnerField uint32 `json:"innerField"`
}

var (
	_ encoding.ProtoMarshaler   = (*Primitives_Aux)(nil)
	_ encoding.ProtoUnmarshaler = (*Primitives_Aux)(nil)
	_ json.Marshaler            = (*Primitives_Aux)(nil)
	_ json.Unmarshaler          = (*Primitives_Aux)(nil)
)

// StableSize returns the size of x in protobuf format.
//
// Structures with the same field values have the same binary size.
func (x *Primitives_Aux) StableSize() (size int) {
	if x == nil {
		return 0
	}
	size += proto.UInt32Size(1, x.InnerField)
	return size
}

// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
func (x *Primitives_Aux) MarshalProtobuf(dst []byte) []byte {
	m := pool.MarshalerPool.Get()
	defer pool.MarshalerPool.Put(m)
	x.EmitProtobuf(m.MessageMarshaler())
	dst = m.Marshal(dst)
	return dst
}

func (x *Primitives_Aux) EmitProtobuf(mm *easyproto.MessageMarshaler) {
	if x == nil {
		return
	}
	if x.InnerField != 0 {
		mm.AppendUint32(1, x.InnerField)
	}
}

// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
func (x *Primitives_Aux) UnmarshalProtobuf(src []byte) (err error) {
	var fc easyproto.FieldContext
	for len(src) > 0 {
		src, err = fc.NextField(src)
		if err != nil {
			return fmt.Errorf("cannot read next field in %s", "Primitives_Aux")
		}
		switch fc.FieldNum {
		case 1: // InnerField
			data, ok := fc.Uint32()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "InnerField")
			}
			x.InnerField = data
		}
	}
	return nil
}
func (x *Primitives_Aux) GetInnerField() uint32 {
	if x != nil {
		return x.InnerField
	}
	return 0
}
func (x *Primitives_Aux) SetInnerField(v uint32) {
	x.InnerField = v
}

// MarshalJSON implements the json.Marshaler interface.
func (x *Primitives_Aux) MarshalJSON() ([]byte, error) {
	w := jwriter.Writer{}
	x.MarshalEasyJSON(&w)
	return w.Buffer.BuildBytes(), w.Error
}
func (x *Primitives_Aux) MarshalEasyJSON(out *jwriter.Writer) {
	if x == nil {
		out.RawString("null")
		return
	}
	first := true
	out.RawByte('{')
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"innerField\":"
		out.RawString(prefix)
		out.Uint32(x.InnerField)
	}
	out.RawByte('}')
}

// UnmarshalJSON implements the json.Unmarshaler interface.
func (x *Primitives_Aux) UnmarshalJSON(data []byte) error {
	r := jlexer.Lexer{Data: data}
	x.UnmarshalEasyJSON(&r)
	return r.Error()
}
func (x *Primitives_Aux) UnmarshalEasyJSON(in *jlexer.Lexer) {
	isTopLevel := in.IsStart()
	if in.IsNull() {
		if isTopLevel {
			in.Consumed()
		}
		in.Skip()
		return
	}
	in.Delim('{')
	for !in.IsDelim('}') {
		key := in.UnsafeFieldName(false)
		in.WantColon()
		if in.IsNull() {
			in.Skip()
			in.WantComma()
			continue
		}
		switch key {
		case "innerField":
			{
				var f uint32
				r := in.JsonNumber()
				n := r.String()
				v, err := strconv.ParseUint(n, 10, 32)
				if err != nil {
					in.AddError(err)
					return
				}
				pv := uint32(v)
				f = pv
				x.InnerField = f
			}
		}
		in.WantComma()
	}
	in.Delim('}')
	if isTopLevel {
		in.Consumed()
	}
}

type Primitives struct {
	FieldA []byte              `json:"fieldA"`
	FieldB string              `json:"fieldB"`
	FieldC bool                `json:"fieldC"`
	FieldD int32               `json:"fieldD"`
	FieldE uint32              `json:"fieldE"`
	FieldF int64               `json:"fieldF"`
	FieldG uint64              `json:"fieldG"`
	FieldI uint64              `json:"fieldI"`
	FieldJ float64             `json:"fieldJ"`
	FieldK uint32              `json:"fieldK"`
	FieldH Primitives_SomeEnum `json:"fieldH"`
	FieldM isPrimitives_FieldM
}

var (
	_ encoding.ProtoMarshaler   = (*Primitives)(nil)
	_ encoding.ProtoUnmarshaler = (*Primitives)(nil)
	_ json.Marshaler            = (*Primitives)(nil)
	_ json.Unmarshaler          = (*Primitives)(nil)
)

// StableSize returns the size of x in protobuf format.
//
// Structures with the same field values have the same binary size.
func (x *Primitives) StableSize() (size int) {
	if x == nil {
		return 0
	}
	size += proto.BytesSize(1, x.FieldA)
	size += proto.StringSize(2, x.FieldB)
	size += proto.BoolSize(200, x.FieldC)
	size += proto.Int32Size(201, x.FieldD)
	size += proto.UInt32Size(202, x.FieldE)
	size += proto.Int64Size(203, x.FieldF)
	size += proto.UInt64Size(204, x.FieldG)
	size += proto.Fixed64Size(205, x.FieldI)
	size += proto.Float64Size(206, x.FieldJ)
	size += proto.Fixed32Size(207, x.FieldK)
	size += proto.EnumSize(300, int32(x.FieldH))
	if inner, ok := x.FieldM.(*Primitives_FieldMa); ok {
		size += proto.BytesSize(401, inner.FieldMa)
	}
	if inner, ok := x.FieldM.(*Primitives_FieldMe); ok {
		size += proto.UInt32Size(402, inner.FieldMe)
	}
	if inner, ok := x.FieldM.(*Primitives_FieldAux); ok {
		size += proto.NestedStructureSize(403, inner.FieldAux)
	}
	return size
}

// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
func (x *Primitives) MarshalProtobuf(dst []byte) []byte {
	m := pool.MarshalerPool.Get()
	defer pool.MarshalerPool.Put(m)
	x.EmitProtobuf(m.MessageMarshaler())
	dst = m.Marshal(dst)
	return dst
}

func (x *Primitives) EmitProtobuf(mm *easyproto.MessageMarshaler) {
	if x == nil {
		return
	}
	if len(x.FieldA) != 0 {
		mm.AppendBytes(1, x.FieldA)
	}
	if len(x.FieldB) != 0 {
		mm.AppendString(2, x.FieldB)
	}
	if x.FieldC {
		mm.AppendBool(200, x.FieldC)
	}
	if x.FieldD != 0 {
		mm.AppendInt32(201, x.FieldD)
	}
	if x.FieldE != 0 {
		mm.AppendUint32(202, x.FieldE)
	}
	if x.FieldF != 0 {
		mm.AppendInt64(203, x.FieldF)
	}
	if x.FieldG != 0 {
		mm.AppendUint64(204, x.FieldG)
	}
	if x.FieldI != 0 {
		mm.AppendFixed64(205, x.FieldI)
	}
	if x.FieldJ != 0 {
		mm.AppendDouble(206, x.FieldJ)
	}
	if x.FieldK != 0 {
		mm.AppendFixed32(207, x.FieldK)
	}
	if int32(x.FieldH) != 0 {
		mm.AppendInt32(300, int32(x.FieldH))
	}
	if inner, ok := x.FieldM.(*Primitives_FieldMa); ok {
		if len(inner.FieldMa) != 0 {
			mm.AppendBytes(401, inner.FieldMa)
		}
	}
	if inner, ok := x.FieldM.(*Primitives_FieldMe); ok {
		if inner.FieldMe != 0 {
			mm.AppendUint32(402, inner.FieldMe)
		}
	}
	if inner, ok := x.FieldM.(*Primitives_FieldAux); ok {
		if inner.FieldAux != nil {
			inner.FieldAux.EmitProtobuf(mm.AppendMessage(403))
		}
	}
}

// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
func (x *Primitives) UnmarshalProtobuf(src []byte) (err error) {
	var fc easyproto.FieldContext
	for len(src) > 0 {
		src, err = fc.NextField(src)
		if err != nil {
			return fmt.Errorf("cannot read next field in %s", "Primitives")
		}
		switch fc.FieldNum {
		case 1: // FieldA
			data, ok := fc.Bytes()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldA")
			}
			x.FieldA = data
		case 2: // FieldB
			data, ok := fc.String()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldB")
			}
			x.FieldB = data
		case 200: // FieldC
			data, ok := fc.Bool()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldC")
			}
			x.FieldC = data
		case 201: // FieldD
			data, ok := fc.Int32()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldD")
			}
			x.FieldD = data
		case 202: // FieldE
			data, ok := fc.Uint32()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldE")
			}
			x.FieldE = data
		case 203: // FieldF
			data, ok := fc.Int64()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldF")
			}
			x.FieldF = data
		case 204: // FieldG
			data, ok := fc.Uint64()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldG")
			}
			x.FieldG = data
		case 205: // FieldI
			data, ok := fc.Fixed64()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldI")
			}
			x.FieldI = data
		case 206: // FieldJ
			data, ok := fc.Double()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldJ")
			}
			x.FieldJ = data
		case 207: // FieldK
			data, ok := fc.Fixed32()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldK")
			}
			x.FieldK = data
		case 300: // FieldH
			data, ok := fc.Int32()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldH")
			}
			x.FieldH = Primitives_SomeEnum(data)
		case 401: // FieldMa
			data, ok := fc.Bytes()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldMa")
			}
			x.FieldM = &Primitives_FieldMa{FieldMa: data}
		case 402: // FieldMe
			data, ok := fc.Uint32()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldMe")
			}
			x.FieldM = &Primitives_FieldMe{FieldMe: data}
		case 403: // FieldAux
			data, ok := fc.MessageData()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldAux")
			}
			oneofField := &Primitives_FieldAux{FieldAux: new(Primitives_Aux)}
			if err := oneofField.FieldAux.UnmarshalProtobuf(data); err != nil {
				return fmt.Errorf("unmarshal: %w", err)
			}
			x.FieldM = oneofField
		}
	}
	return nil
}
func (x *Primitives) GetFieldA() []byte {
	if x != nil {
		return x.FieldA
	}
	return nil
}
func (x *Primitives) SetFieldA(v []byte) {
	x.FieldA = v
}
func (x *Primitives) GetFieldB() string {
	if x != nil {
		return x.FieldB
	}
	return ""
}
func (x *Primitives) SetFieldB(v string) {
	x.FieldB = v
}
func (x *Primitives) GetFieldC() bool {
	if x != nil {
		return x.FieldC
	}
	return false
}
func (x *Primitives) SetFieldC(v bool) {
	x.FieldC = v
}
func (x *Primitives) GetFieldD() int32 {
	if x != nil {
		return x.FieldD
	}
	return 0
}
func (x *Primitives) SetFieldD(v int32) {
	x.FieldD = v
}
func (x *Primitives) GetFieldE() uint32 {
	if x != nil {
		return x.FieldE
	}
	return 0
}
func (x *Primitives) SetFieldE(v uint32) {
	x.FieldE = v
}
func (x *Primitives) GetFieldF() int64 {
	if x != nil {
		return x.FieldF
	}
	return 0
}
func (x *Primitives) SetFieldF(v int64) {
	x.FieldF = v
}
func (x *Primitives) GetFieldG() uint64 {
	if x != nil {
		return x.FieldG
	}
	return 0
}
func (x *Primitives) SetFieldG(v uint64) {
	x.FieldG = v
}
func (x *Primitives) GetFieldI() uint64 {
	if x != nil {
		return x.FieldI
	}
	return 0
}
func (x *Primitives) SetFieldI(v uint64) {
	x.FieldI = v
}
func (x *Primitives) GetFieldJ() float64 {
	if x != nil {
		return x.FieldJ
	}
	return 0
}
func (x *Primitives) SetFieldJ(v float64) {
	x.FieldJ = v
}
func (x *Primitives) GetFieldK() uint32 {
	if x != nil {
		return x.FieldK
	}
	return 0
}
func (x *Primitives) SetFieldK(v uint32) {
	x.FieldK = v
}
func (x *Primitives) GetFieldH() Primitives_SomeEnum {
	if x != nil {
		return x.FieldH
	}
	return 0
}
func (x *Primitives) SetFieldH(v Primitives_SomeEnum) {
	x.FieldH = v
}
func (x *Primitives) GetFieldM() isPrimitives_FieldM {
	if x != nil {
		return x.FieldM
	}
	return nil
}
func (x *Primitives) SetFieldM(v isPrimitives_FieldM) {
	x.FieldM = v
}
func (x *Primitives) GetFieldMa() []byte {
	if xx, ok := x.GetFieldM().(*Primitives_FieldMa); ok {
		return xx.FieldMa
	}
	return nil
}
func (x *Primitives) SetFieldMa(v *Primitives_FieldMa) {
	x.FieldM = v
}
func (x *Primitives_FieldMa) GetFieldMa() []byte {
	if x != nil {
		return x.FieldMa
	}
	return nil
}
func (x *Primitives_FieldMa) SetFieldMa(v []byte) {
	x.FieldMa = v
}
func (x *Primitives) GetFieldMe() uint32 {
	if xx, ok := x.GetFieldM().(*Primitives_FieldMe); ok {
		return xx.FieldMe
	}
	return 0
}
func (x *Primitives) SetFieldMe(v *Primitives_FieldMe) {
	x.FieldM = v
}
func (x *Primitives_FieldMe) GetFieldMe() uint32 {
	if x != nil {
		return x.FieldMe
	}
	return 0
}
func (x *Primitives_FieldMe) SetFieldMe(v uint32) {
	x.FieldMe = v
}
func (x *Primitives) GetFieldAux() *Primitives_Aux {
	if xx, ok := x.GetFieldM().(*Primitives_FieldAux); ok {
		return xx.FieldAux
	}
	return nil
}
func (x *Primitives) SetFieldAux(v *Primitives_Aux) {
	x.FieldM = &Primitives_FieldAux{FieldAux: v}
}

// MarshalJSON implements the json.Marshaler interface.
func (x *Primitives) MarshalJSON() ([]byte, error) {
	w := jwriter.Writer{}
	x.MarshalEasyJSON(&w)
	return w.Buffer.BuildBytes(), w.Error
}
func (x *Primitives) MarshalEasyJSON(out *jwriter.Writer) {
	if x == nil {
		out.RawString("null")
		return
	}
	first := true
	out.RawByte('{')
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldA\":"
		out.RawString(prefix)
		if x.FieldA != nil {
			out.Base64Bytes(x.FieldA)
		} else {
			out.String("")
		}
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldB\":"
		out.RawString(prefix)
		out.String(x.FieldB)
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldC\":"
		out.RawString(prefix)
		out.Bool(x.FieldC)
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldD\":"
		out.RawString(prefix)
		out.Int32(x.FieldD)
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldE\":"
		out.RawString(prefix)
		out.Uint32(x.FieldE)
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldF\":"
		out.RawString(prefix)
		out.RawByte('"')
		out.Buffer.Buf = strconv.AppendInt(out.Buffer.Buf, x.FieldF, 10)
		out.RawByte('"')
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldG\":"
		out.RawString(prefix)
		out.RawByte('"')
		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.FieldG, 10)
		out.RawByte('"')
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldI\":"
		out.RawString(prefix)
		out.RawByte('"')
		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.FieldI, 10)
		out.RawByte('"')
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldJ\":"
		out.RawString(prefix)
		out.Float64(x.FieldJ)
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldK\":"
		out.RawString(prefix)
		out.Uint32(x.FieldK)
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldH\":"
		out.RawString(prefix)
		v := int32(x.FieldH)
		if vv, ok := Primitives_SomeEnum_name[v]; ok {
			out.String(vv)
		} else {
			out.Int32(v)
		}
	}
	switch xx := x.FieldM.(type) {
	case *Primitives_FieldMa:
		{
			if !first {
				out.RawByte(',')
			} else {
				first = false
			}
			const prefix string = "\"fieldMa\":"
			out.RawString(prefix)
			if xx.FieldMa != nil {
				out.Base64Bytes(xx.FieldMa)
			} else {
				out.String("")
			}
		}
	case *Primitives_FieldMe:
		{
			if !first {
				out.RawByte(',')
			} else {
				first = false
			}
			const prefix string = "\"fieldMe\":"
			out.RawString(prefix)
			out.Uint32(xx.FieldMe)
		}
	case *Primitives_FieldAux:
		{
			if !first {
				out.RawByte(',')
			} else {
				first = false
			}
			const prefix string = "\"fieldAux\":"
			out.RawString(prefix)
			xx.FieldAux.MarshalEasyJSON(out)
		}
	}
	out.RawByte('}')
}

// UnmarshalJSON implements the json.Unmarshaler interface.
func (x *Primitives) UnmarshalJSON(data []byte) error {
	r := jlexer.Lexer{Data: data}
	x.UnmarshalEasyJSON(&r)
	return r.Error()
}
func (x *Primitives) UnmarshalEasyJSON(in *jlexer.Lexer) {
	isTopLevel := in.IsStart()
	if in.IsNull() {
		if isTopLevel {
			in.Consumed()
		}
		in.Skip()
		return
	}
	in.Delim('{')
	for !in.IsDelim('}') {
		key := in.UnsafeFieldName(false)
		in.WantColon()
		if in.IsNull() {
			in.Skip()
			in.WantComma()
			continue
		}
		switch key {
		case "fieldA":
			{
				var f []byte
				{
					tmp := in.Bytes()
					if len(tmp) == 0 {
						tmp = nil
					}
					f = tmp
				}
				x.FieldA = f
			}
		case "fieldB":
			{
				var f string
				f = in.String()
				x.FieldB = f
			}
		case "fieldC":
			{
				var f bool
				f = in.Bool()
				x.FieldC = f
			}
		case "fieldD":
			{
				var f int32
				r := in.JsonNumber()
				n := r.String()
				v, err := strconv.ParseInt(n, 10, 32)
				if err != nil {
					in.AddError(err)
					return
				}
				pv := int32(v)
				f = pv
				x.FieldD = f
			}
		case "fieldE":
			{
				var f uint32
				r := in.JsonNumber()
				n := r.String()
				v, err := strconv.ParseUint(n, 10, 32)
				if err != nil {
					in.AddError(err)
					return
				}
				pv := uint32(v)
				f = pv
				x.FieldE = f
			}
		case "fieldF":
			{
				var f int64
				r := in.JsonNumber()
				n := r.String()
				v, err := strconv.ParseInt(n, 10, 64)
				if err != nil {
					in.AddError(err)
					return
				}
				pv := int64(v)
				f = pv
				x.FieldF = f
			}
		case "fieldG":
			{
				var f uint64
				r := in.JsonNumber()
				n := r.String()
				v, err := strconv.ParseUint(n, 10, 64)
				if err != nil {
					in.AddError(err)
					return
				}
				pv := uint64(v)
				f = pv
				x.FieldG = f
			}
		case "fieldI":
			{
				var f uint64
				r := in.JsonNumber()
				n := r.String()
				v, err := strconv.ParseUint(n, 10, 64)
				if err != nil {
					in.AddError(err)
					return
				}
				pv := uint64(v)
				f = pv
				x.FieldI = f
			}
		case "fieldJ":
			{
				var f float64
				f = in.Float64()
				x.FieldJ = f
			}
		case "fieldK":
			{
				var f uint32
				r := in.JsonNumber()
				n := r.String()
				v, err := strconv.ParseUint(n, 10, 32)
				if err != nil {
					in.AddError(err)
					return
				}
				pv := uint32(v)
				f = pv
				x.FieldK = f
			}
		case "fieldH":
			{
				var f Primitives_SomeEnum
				var parsedValue Primitives_SomeEnum
				switch v := in.Interface().(type) {
				case string:
					if vv, ok := Primitives_SomeEnum_value[v]; ok {
						parsedValue = Primitives_SomeEnum(vv)
						break
					}
					vv, err := strconv.ParseInt(v, 10, 32)
					if err != nil {
						in.AddError(err)
						return
					}
					parsedValue = Primitives_SomeEnum(vv)
				case float64:
					parsedValue = Primitives_SomeEnum(v)
				}
				f = parsedValue
				x.FieldH = f
			}
		case "fieldMa":
			xx := new(Primitives_FieldMa)
			x.FieldM = xx
			{
				var f []byte
				{
					tmp := in.Bytes()
					if len(tmp) == 0 {
						tmp = nil
					}
					f = tmp
				}
				xx.FieldMa = f
			}
		case "fieldMe":
			xx := new(Primitives_FieldMe)
			x.FieldM = xx
			{
				var f uint32
				r := in.JsonNumber()
				n := r.String()
				v, err := strconv.ParseUint(n, 10, 32)
				if err != nil {
					in.AddError(err)
					return
				}
				pv := uint32(v)
				f = pv
				xx.FieldMe = f
			}
		case "fieldAux":
			xx := new(Primitives_FieldAux)
			x.FieldM = xx
			{
				var f *Primitives_Aux
				f = new(Primitives_Aux)
				f.UnmarshalEasyJSON(in)
				xx.FieldAux = f
			}
		}
		in.WantComma()
	}
	in.Delim('}')
	if isTopLevel {
		in.Consumed()
	}
}

type isPrimitives_FieldM interface {
	isPrimitives_FieldM()
}

type Primitives_FieldMa struct {
	FieldMa []byte
}

type Primitives_FieldMe struct {
	FieldMe uint32
}

type Primitives_FieldAux struct {
	FieldAux *Primitives_Aux
}

func (*Primitives_FieldMa) isPrimitives_FieldM() {}

func (*Primitives_FieldMe) isPrimitives_FieldM() {}

func (*Primitives_FieldAux) isPrimitives_FieldM() {}

type RepPrimitives_Aux struct {
	InnerField uint32 `json:"innerField"`
}

var (
	_ encoding.ProtoMarshaler   = (*RepPrimitives_Aux)(nil)
	_ encoding.ProtoUnmarshaler = (*RepPrimitives_Aux)(nil)
	_ json.Marshaler            = (*RepPrimitives_Aux)(nil)
	_ json.Unmarshaler          = (*RepPrimitives_Aux)(nil)
)

// StableSize returns the size of x in protobuf format.
//
// Structures with the same field values have the same binary size.
func (x *RepPrimitives_Aux) StableSize() (size int) {
	if x == nil {
		return 0
	}
	size += proto.UInt32Size(1, x.InnerField)
	return size
}

// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
func (x *RepPrimitives_Aux) MarshalProtobuf(dst []byte) []byte {
	m := pool.MarshalerPool.Get()
	defer pool.MarshalerPool.Put(m)
	x.EmitProtobuf(m.MessageMarshaler())
	dst = m.Marshal(dst)
	return dst
}

func (x *RepPrimitives_Aux) EmitProtobuf(mm *easyproto.MessageMarshaler) {
	if x == nil {
		return
	}
	if x.InnerField != 0 {
		mm.AppendUint32(1, x.InnerField)
	}
}

// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
func (x *RepPrimitives_Aux) UnmarshalProtobuf(src []byte) (err error) {
	var fc easyproto.FieldContext
	for len(src) > 0 {
		src, err = fc.NextField(src)
		if err != nil {
			return fmt.Errorf("cannot read next field in %s", "RepPrimitives_Aux")
		}
		switch fc.FieldNum {
		case 1: // InnerField
			data, ok := fc.Uint32()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "InnerField")
			}
			x.InnerField = data
		}
	}
	return nil
}
func (x *RepPrimitives_Aux) GetInnerField() uint32 {
	if x != nil {
		return x.InnerField
	}
	return 0
}
func (x *RepPrimitives_Aux) SetInnerField(v uint32) {
	x.InnerField = v
}

// MarshalJSON implements the json.Marshaler interface.
func (x *RepPrimitives_Aux) MarshalJSON() ([]byte, error) {
	w := jwriter.Writer{}
	x.MarshalEasyJSON(&w)
	return w.Buffer.BuildBytes(), w.Error
}
func (x *RepPrimitives_Aux) MarshalEasyJSON(out *jwriter.Writer) {
	if x == nil {
		out.RawString("null")
		return
	}
	first := true
	out.RawByte('{')
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"innerField\":"
		out.RawString(prefix)
		out.Uint32(x.InnerField)
	}
	out.RawByte('}')
}

// UnmarshalJSON implements the json.Unmarshaler interface.
func (x *RepPrimitives_Aux) UnmarshalJSON(data []byte) error {
	r := jlexer.Lexer{Data: data}
	x.UnmarshalEasyJSON(&r)
	return r.Error()
}
func (x *RepPrimitives_Aux) UnmarshalEasyJSON(in *jlexer.Lexer) {
	isTopLevel := in.IsStart()
	if in.IsNull() {
		if isTopLevel {
			in.Consumed()
		}
		in.Skip()
		return
	}
	in.Delim('{')
	for !in.IsDelim('}') {
		key := in.UnsafeFieldName(false)
		in.WantColon()
		if in.IsNull() {
			in.Skip()
			in.WantComma()
			continue
		}
		switch key {
		case "innerField":
			{
				var f uint32
				r := in.JsonNumber()
				n := r.String()
				v, err := strconv.ParseUint(n, 10, 32)
				if err != nil {
					in.AddError(err)
					return
				}
				pv := uint32(v)
				f = pv
				x.InnerField = f
			}
		}
		in.WantComma()
	}
	in.Delim('}')
	if isTopLevel {
		in.Consumed()
	}
}

type RepPrimitives struct {
	FieldA   [][]byte            `json:"fieldA"`
	FieldB   []string            `json:"fieldB"`
	FieldC   []int32             `json:"fieldC"`
	FieldD   []uint32            `json:"fieldD"`
	FieldE   []int64             `json:"fieldE"`
	FieldF   []uint64            `json:"fieldF"`
	FieldFu  []uint64            `json:"fieldFu"`
	FieldAux []RepPrimitives_Aux `json:"fieldAux"`
}

var (
	_ encoding.ProtoMarshaler   = (*RepPrimitives)(nil)
	_ encoding.ProtoUnmarshaler = (*RepPrimitives)(nil)
	_ json.Marshaler            = (*RepPrimitives)(nil)
	_ json.Unmarshaler          = (*RepPrimitives)(nil)
)

// StableSize returns the size of x in protobuf format.
//
// Structures with the same field values have the same binary size.
func (x *RepPrimitives) StableSize() (size int) {
	if x == nil {
		return 0
	}
	var n int
	size += proto.RepeatedBytesSize(1, x.FieldA)
	size += proto.RepeatedStringSize(2, x.FieldB)
	n, _ = proto.RepeatedInt32Size(3, x.FieldC)
	size += n
	n, _ = proto.RepeatedUInt32Size(4, x.FieldD)
	size += n
	n, _ = proto.RepeatedInt64Size(5, x.FieldE)
	size += n
	n, _ = proto.RepeatedUInt64Size(6, x.FieldF)
	size += n
	for i := range x.FieldFu {
		size += protowire.SizeGroup(protowire.Number(7), protowire.SizeVarint(x.FieldFu[i]))
	}
	for i := range x.FieldAux {
		size += proto.NestedStructureSizeUnchecked(8, &x.FieldAux[i])
	}
	return size
}

// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
func (x *RepPrimitives) MarshalProtobuf(dst []byte) []byte {
	m := pool.MarshalerPool.Get()
	defer pool.MarshalerPool.Put(m)
	x.EmitProtobuf(m.MessageMarshaler())
	dst = m.Marshal(dst)
	return dst
}

func (x *RepPrimitives) EmitProtobuf(mm *easyproto.MessageMarshaler) {
	if x == nil {
		return
	}
	for j := range x.FieldA {
		mm.AppendBytes(1, x.FieldA[j])
	}
	for j := range x.FieldB {
		mm.AppendString(2, x.FieldB[j])
	}
	if len(x.FieldC) != 0 {
		mm.AppendInt32s(3, x.FieldC)
	}
	if len(x.FieldD) != 0 {
		mm.AppendUint32s(4, x.FieldD)
	}
	if len(x.FieldE) != 0 {
		mm.AppendInt64s(5, x.FieldE)
	}
	if len(x.FieldF) != 0 {
		mm.AppendUint64s(6, x.FieldF)
	}
	for j := range x.FieldFu {
		mm.AppendUint64(7, x.FieldFu[j])
	}
	for i := range x.FieldAux {
		x.FieldAux[i].EmitProtobuf(mm.AppendMessage(8))
	}
}

// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
func (x *RepPrimitives) UnmarshalProtobuf(src []byte) (err error) {
	var fc easyproto.FieldContext
	for len(src) > 0 {
		src, err = fc.NextField(src)
		if err != nil {
			return fmt.Errorf("cannot read next field in %s", "RepPrimitives")
		}
		switch fc.FieldNum {
		case 1: // FieldA
			data, ok := fc.Bytes()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldA")
			}
			x.FieldA = append(x.FieldA, data)
		case 2: // FieldB
			data, ok := fc.String()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldB")
			}
			x.FieldB = append(x.FieldB, data)
		case 3: // FieldC
			data, ok := fc.UnpackInt32s(nil)
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldC")
			}
			x.FieldC = data
		case 4: // FieldD
			data, ok := fc.UnpackUint32s(nil)
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldD")
			}
			x.FieldD = data
		case 5: // FieldE
			data, ok := fc.UnpackInt64s(nil)
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldE")
			}
			x.FieldE = data
		case 6: // FieldF
			data, ok := fc.UnpackUint64s(nil)
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldF")
			}
			x.FieldF = data
		case 7: // FieldFu
			data, ok := fc.Uint64()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldFu")
			}
			x.FieldFu = append(x.FieldFu, data)
		case 8: // FieldAux
			data, ok := fc.MessageData()
			if !ok {
				return fmt.Errorf("cannot unmarshal field %s", "FieldAux")
			}
			x.FieldAux = append(x.FieldAux, RepPrimitives_Aux{})
			ff := &x.FieldAux[len(x.FieldAux)-1]
			if err := ff.UnmarshalProtobuf(data); err != nil {
				return fmt.Errorf("unmarshal: %w", err)
			}
		}
	}
	return nil
}
func (x *RepPrimitives) GetFieldA() [][]byte {
	if x != nil {
		return x.FieldA
	}
	return nil
}
func (x *RepPrimitives) SetFieldA(v [][]byte) {
	x.FieldA = v
}
func (x *RepPrimitives) GetFieldB() []string {
	if x != nil {
		return x.FieldB
	}
	return nil
}
func (x *RepPrimitives) SetFieldB(v []string) {
	x.FieldB = v
}
func (x *RepPrimitives) GetFieldC() []int32 {
	if x != nil {
		return x.FieldC
	}
	return nil
}
func (x *RepPrimitives) SetFieldC(v []int32) {
	x.FieldC = v
}
func (x *RepPrimitives) GetFieldD() []uint32 {
	if x != nil {
		return x.FieldD
	}
	return nil
}
func (x *RepPrimitives) SetFieldD(v []uint32) {
	x.FieldD = v
}
func (x *RepPrimitives) GetFieldE() []int64 {
	if x != nil {
		return x.FieldE
	}
	return nil
}
func (x *RepPrimitives) SetFieldE(v []int64) {
	x.FieldE = v
}
func (x *RepPrimitives) GetFieldF() []uint64 {
	if x != nil {
		return x.FieldF
	}
	return nil
}
func (x *RepPrimitives) SetFieldF(v []uint64) {
	x.FieldF = v
}
func (x *RepPrimitives) GetFieldFu() []uint64 {
	if x != nil {
		return x.FieldFu
	}
	return nil
}
func (x *RepPrimitives) SetFieldFu(v []uint64) {
	x.FieldFu = v
}
func (x *RepPrimitives) GetFieldAux() []RepPrimitives_Aux {
	if x != nil {
		return x.FieldAux
	}
	return nil
}
func (x *RepPrimitives) SetFieldAux(v []RepPrimitives_Aux) {
	x.FieldAux = v
}

// MarshalJSON implements the json.Marshaler interface.
func (x *RepPrimitives) MarshalJSON() ([]byte, error) {
	w := jwriter.Writer{}
	x.MarshalEasyJSON(&w)
	return w.Buffer.BuildBytes(), w.Error
}
func (x *RepPrimitives) MarshalEasyJSON(out *jwriter.Writer) {
	if x == nil {
		out.RawString("null")
		return
	}
	first := true
	out.RawByte('{')
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldA\":"
		out.RawString(prefix)
		out.RawByte('[')
		for i := range x.FieldA {
			if i != 0 {
				out.RawByte(',')
			}
			if x.FieldA[i] != nil {
				out.Base64Bytes(x.FieldA[i])
			} else {
				out.String("")
			}
		}
		out.RawByte(']')
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldB\":"
		out.RawString(prefix)
		out.RawByte('[')
		for i := range x.FieldB {
			if i != 0 {
				out.RawByte(',')
			}
			out.String(x.FieldB[i])
		}
		out.RawByte(']')
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldC\":"
		out.RawString(prefix)
		out.RawByte('[')
		for i := range x.FieldC {
			if i != 0 {
				out.RawByte(',')
			}
			out.Int32(x.FieldC[i])
		}
		out.RawByte(']')
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldD\":"
		out.RawString(prefix)
		out.RawByte('[')
		for i := range x.FieldD {
			if i != 0 {
				out.RawByte(',')
			}
			out.Uint32(x.FieldD[i])
		}
		out.RawByte(']')
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldE\":"
		out.RawString(prefix)
		out.RawByte('[')
		for i := range x.FieldE {
			if i != 0 {
				out.RawByte(',')
			}
			out.RawByte('"')
			out.Buffer.Buf = strconv.AppendInt(out.Buffer.Buf, x.FieldE[i], 10)
			out.RawByte('"')
		}
		out.RawByte(']')
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldF\":"
		out.RawString(prefix)
		out.RawByte('[')
		for i := range x.FieldF {
			if i != 0 {
				out.RawByte(',')
			}
			out.RawByte('"')
			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.FieldF[i], 10)
			out.RawByte('"')
		}
		out.RawByte(']')
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldFu\":"
		out.RawString(prefix)
		out.RawByte('[')
		for i := range x.FieldFu {
			if i != 0 {
				out.RawByte(',')
			}
			out.RawByte('"')
			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.FieldFu[i], 10)
			out.RawByte('"')
		}
		out.RawByte(']')
	}
	{
		if !first {
			out.RawByte(',')
		} else {
			first = false
		}
		const prefix string = "\"fieldAux\":"
		out.RawString(prefix)
		out.RawByte('[')
		for i := range x.FieldAux {
			if i != 0 {
				out.RawByte(',')
			}
			x.FieldAux[i].MarshalEasyJSON(out)
		}
		out.RawByte(']')
	}
	out.RawByte('}')
}

// UnmarshalJSON implements the json.Unmarshaler interface.
func (x *RepPrimitives) UnmarshalJSON(data []byte) error {
	r := jlexer.Lexer{Data: data}
	x.UnmarshalEasyJSON(&r)
	return r.Error()
}
func (x *RepPrimitives) UnmarshalEasyJSON(in *jlexer.Lexer) {
	isTopLevel := in.IsStart()
	if in.IsNull() {
		if isTopLevel {
			in.Consumed()
		}
		in.Skip()
		return
	}
	in.Delim('{')
	for !in.IsDelim('}') {
		key := in.UnsafeFieldName(false)
		in.WantColon()
		if in.IsNull() {
			in.Skip()
			in.WantComma()
			continue
		}
		switch key {
		case "fieldA":
			{
				var f []byte
				var list [][]byte
				in.Delim('[')
				for !in.IsDelim(']') {
					{
						tmp := in.Bytes()
						if len(tmp) == 0 {
							tmp = nil
						}
						f = tmp
					}
					list = append(list, f)
					in.WantComma()
				}
				x.FieldA = list
				in.Delim(']')
			}
		case "fieldB":
			{
				var f string
				var list []string
				in.Delim('[')
				for !in.IsDelim(']') {
					f = in.String()
					list = append(list, f)
					in.WantComma()
				}
				x.FieldB = list
				in.Delim(']')
			}
		case "fieldC":
			{
				var f int32
				var list []int32
				in.Delim('[')
				for !in.IsDelim(']') {
					r := in.JsonNumber()
					n := r.String()
					v, err := strconv.ParseInt(n, 10, 32)
					if err != nil {
						in.AddError(err)
						return
					}
					pv := int32(v)
					f = pv
					list = append(list, f)
					in.WantComma()
				}
				x.FieldC = list
				in.Delim(']')
			}
		case "fieldD":
			{
				var f uint32
				var list []uint32
				in.Delim('[')
				for !in.IsDelim(']') {
					r := in.JsonNumber()
					n := r.String()
					v, err := strconv.ParseUint(n, 10, 32)
					if err != nil {
						in.AddError(err)
						return
					}
					pv := uint32(v)
					f = pv
					list = append(list, f)
					in.WantComma()
				}
				x.FieldD = list
				in.Delim(']')
			}
		case "fieldE":
			{
				var f int64
				var list []int64
				in.Delim('[')
				for !in.IsDelim(']') {
					r := in.JsonNumber()
					n := r.String()
					v, err := strconv.ParseInt(n, 10, 64)
					if err != nil {
						in.AddError(err)
						return
					}
					pv := int64(v)
					f = pv
					list = append(list, f)
					in.WantComma()
				}
				x.FieldE = list
				in.Delim(']')
			}
		case "fieldF":
			{
				var f uint64
				var list []uint64
				in.Delim('[')
				for !in.IsDelim(']') {
					r := in.JsonNumber()
					n := r.String()
					v, err := strconv.ParseUint(n, 10, 64)
					if err != nil {
						in.AddError(err)
						return
					}
					pv := uint64(v)
					f = pv
					list = append(list, f)
					in.WantComma()
				}
				x.FieldF = list
				in.Delim(']')
			}
		case "fieldFu":
			{
				var f uint64
				var list []uint64
				in.Delim('[')
				for !in.IsDelim(']') {
					r := in.JsonNumber()
					n := r.String()
					v, err := strconv.ParseUint(n, 10, 64)
					if err != nil {
						in.AddError(err)
						return
					}
					pv := uint64(v)
					f = pv
					list = append(list, f)
					in.WantComma()
				}
				x.FieldFu = list
				in.Delim(']')
			}
		case "fieldAux":
			{
				var f RepPrimitives_Aux
				var list []RepPrimitives_Aux
				in.Delim('[')
				for !in.IsDelim(']') {
					f = RepPrimitives_Aux{}
					f.UnmarshalEasyJSON(in)
					list = append(list, f)
					in.WantComma()
				}
				x.FieldAux = list
				in.Delim(']')
			}
		}
		in.WantComma()
	}
	in.Delim('}')
	if isTopLevel {
		in.Consumed()
	}
}