// Code generated by cmd/tools/jsongen. DO NOT EDIT.
// The source of truth is Sample's json and ethjson tags.

package sample

import (
	"github.com/holiman/uint256"

	"github.com/erigontech/erigon/rpc/jsonstream"
	"github.com/erigontech/erigon/rpc/jsonstream/ethjson"
)

// MarshalFastJSONTo writes the fields Sample declares, in that order.
func (x *Sample) MarshalFastJSONTo(s *jsonstream.Stream) error {
	if x == nil {
		s.WriteNil()
		return nil
	}
	s.WriteObjectStart()
	if err := x.writeJSONFields(s); err != nil {
		return err
	}
	s.WriteObjectEnd()
	return nil
}

// writeJSONFields writes those fields without the enclosing object, for a type another object inlines.
func (x *Sample) writeJSONFields(s *jsonstream.Stream) error {
	ethjson.Data(s, "address", x.Inner.Address[:])
	ethjson.Quantity(s, "count", x.Inner.Count)
	ethjson.Quantity(s, "leftValue", x.Left.Value)
	ethjson.Quantity(s, "rightValue", x.Right.Value)
	ethjson.Data(s, "hash", x.Hash[:])
	ethjson.Data(s, "bytes", x.Bytes[:])
	if len(x.OptBytes) > 0 {
		ethjson.Data(s, "optBytes", x.OptBytes[:])
	}
	if x.PtrBytes == nil {
		s.Field("ptrBytes").WriteNil()
	} else {
		ethjson.Data(s, "ptrBytes", (*x.PtrBytes)[:])
	}
	if x.PtrHash == nil {
		s.Field("ptrHash").WriteNil()
	} else {
		ethjson.Data(s, "ptrHash", x.PtrHash[:])
	}
	ethjson.DataList(s, "topics", x.Topics)
	if len(x.OptTopics) > 0 {
		ethjson.DataList(s, "optTopics", x.OptTopics)
	}
	ethjson.Datas(s, "blobs", x.Blobs)
	if len(x.OptBlobs) > 0 {
		ethjson.Datas(s, "optBlobs", x.OptBlobs)
	}
	ethjson.Quantity(s, "num", x.Num)
	if x.OptNum != 0 {
		ethjson.Quantity(s, "optNum", x.OptNum)
	}
	if x.PtrNum == nil {
		s.Field("ptrNum").WriteNil()
	} else {
		ethjson.Quantity(s, "ptrNum", *x.PtrNum)
	}
	if x.OptPtrNum != nil {
		ethjson.Quantity(s, "optPtrNum", *x.OptPtrNum)
	}
	ethjson.Quantity256(s, "big", (*uint256.Int)(&x.Big))
	ethjson.Quantity256(s, "optBig", (*uint256.Int)(&x.OptBig))
	if x.PtrBig == nil {
		s.Field("ptrBig").WriteNil()
	} else {
		ethjson.Quantity256(s, "ptrBig", (*uint256.Int)(x.PtrBig))
	}
	ethjson.SignedQuantity(s, "signed", x.Signed)
	if x.PtrSigned != nil {
		ethjson.SignedQuantity(s, "ptrSigned", *x.PtrSigned)
	}
	ethjson.String(s, "str", x.Str)
	if x.OptStr != "" {
		ethjson.String(s, "optStr", x.OptStr)
	}
	s.Field("flag").WriteBool(x.Flag)
	if x.OptFlag {
		s.Field("optFlag").WriteBool(x.OptFlag)
	}
	if x.Logs == nil {
		s.Field("logs").WriteNil()
	} else {
		s.Field("logs")
		if err := x.Logs.MarshalFastJSONTo(s); err != nil {
			return err
		}
	}
	if x.OptLogs != nil {
		s.Field("optLogs")
		if err := x.OptLogs.MarshalFastJSONTo(s); err != nil {
			return err
		}
	}
	if x.Nested == nil {
		s.Field("nested").WriteNil()
	} else {
		s.Field("nested")
		if err := x.Nested.MarshalFastJSONTo(s); err != nil {
			return err
		}
	}
	if x.OptNested != nil {
		s.Field("optNested")
		if err := x.OptNested.MarshalFastJSONTo(s); err != nil {
			return err
		}
	}
	s.Field("inners")
	if err := x.Inners.MarshalFastJSONTo(s); err != nil {
		return err
	}
	if len(x.OptInners) > 0 {
		s.Field("optInners")
		if err := x.OptInners.MarshalFastJSONTo(s); err != nil {
			return err
		}
	}
	if x.ZeroInners != nil {
		s.Field("zeroInners")
		if err := x.ZeroInners.MarshalFastJSONTo(s); err != nil {
			return err
		}
	}
	if x.Renamed != 0 {
		ethjson.Quantity(s, "Renamed", x.Renamed)
	}
	x.writeComputedJSON(s)
	return nil
}
