From 29c522d5d8a31721b32fa0932f2f4abba445ec77 Mon Sep 17 00:00:00 2001
From: Evgenii Stratonikov <e.stratonikov@yadro.com>
Date: Mon, 7 Oct 2024 15:00:16 +0300
Subject: [PATCH] [#122] protogen: Always marshal empty fields

This is how it was done previously:
https://git.frostfs.info/TrueCloudLab/frostfs-api-go/src/commit/a0a9b765f3a56423b1c6f1fef1d1b413da0e03ef/rpc/message/encoding.go#L31

The tricky part is `[]byte` which is marshaled as `null` by easyjson
helper, but as `""` by protojson.

Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
---
 accounting/grpc/service_frostfs.pb.go     |  128 +-
 accounting/grpc/types_frostfs.pb.go       |   36 +-
 acl/grpc/types_frostfs.pb.go              |  536 +++---
 ape/grpc/types_frostfs.pb.go              |   60 +-
 apemanager/grpc/service_frostfs.pb.go     |  418 ++---
 container/grpc/service_frostfs.pb.go      |  574 +++---
 container/grpc/types_frostfs.pb.go        |  144 +-
 lock/grpc/types_frostfs.pb.go             |   30 +-
 netmap/grpc/service_frostfs.pb.go         |  352 ++--
 netmap/grpc/types_frostfs.pb.go           |  756 ++++----
 object/grpc/service_frostfs.pb.go         | 1926 +++++++++------------
 object/grpc/types_frostfs.pb.go           |  892 +++++-----
 refs/grpc/types_frostfs.pb.go             |  260 +--
 session/grpc/service_frostfs.pb.go        |  168 +-
 session/grpc/types_frostfs.pb.go          |  762 ++++----
 status/grpc/types_frostfs.pb.go           |   96 +-
 tombstone/grpc/types_frostfs.pb.go        |   68 +-
 util/proto/marshal_test.go                |   44 +-
 util/proto/test/custom/test_frostfs.pb.go |  530 +++---
 util/protogen/internalgengo/json.go       |   24 +-
 20 files changed, 3574 insertions(+), 4230 deletions(-)

diff --git a/accounting/grpc/service_frostfs.pb.go b/accounting/grpc/service_frostfs.pb.go
index 4f11303..9c8c946 100644
--- a/accounting/grpc/service_frostfs.pb.go
+++ b/accounting/grpc/service_frostfs.pb.go
@@ -101,16 +101,14 @@ func (x *BalanceRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.OwnerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"ownerId\":"
-			out.RawString(prefix)
-			x.OwnerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"ownerId\":"
+		out.RawString(prefix)
+		x.OwnerId.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -306,40 +304,34 @@ func (x *BalanceRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -485,16 +477,14 @@ func (x *BalanceResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Balance != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"balance\":"
-			out.RawString(prefix)
-			x.Balance.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"balance\":"
+		out.RawString(prefix)
+		x.Balance.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -690,40 +680,34 @@ func (x *BalanceResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
diff --git a/accounting/grpc/types_frostfs.pb.go b/accounting/grpc/types_frostfs.pb.go
index 8585583..b7e6b40 100644
--- a/accounting/grpc/types_frostfs.pb.go
+++ b/accounting/grpc/types_frostfs.pb.go
@@ -117,30 +117,26 @@ func (x *Decimal) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Value != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"value\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendInt(out.Buffer.Buf, x.Value, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"value\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendInt(out.Buffer.Buf, x.Value, 10)
+		out.RawByte('"')
 	}
 	{
-		if x.Precision != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"precision\":"
-			out.RawString(prefix)
-			out.Uint32(x.Precision)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"precision\":"
+		out.RawString(prefix)
+		out.Uint32(x.Precision)
 	}
 	out.RawByte('}')
 }
diff --git a/acl/grpc/types_frostfs.pb.go b/acl/grpc/types_frostfs.pb.go
index 1ba6c53..e5a6f32 100644
--- a/acl/grpc/types_frostfs.pb.go
+++ b/acl/grpc/types_frostfs.pb.go
@@ -355,62 +355,54 @@ func (x *EACLRecord_Filter) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.HeaderType != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"headerType\":"
-			out.RawString(prefix)
-			v := int32(x.HeaderType)
-			if vv, ok := HeaderType_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"headerType\":"
+		out.RawString(prefix)
+		v := int32(x.HeaderType)
+		if vv, ok := HeaderType_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	{
-		if x.MatchType != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"matchType\":"
-			out.RawString(prefix)
-			v := int32(x.MatchType)
-			if vv, ok := MatchType_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"matchType\":"
+		out.RawString(prefix)
+		v := int32(x.MatchType)
+		if vv, ok := MatchType_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	{
-		if len(x.Key) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"key\":"
-			out.RawString(prefix)
-			out.String(x.Key)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"key\":"
+		out.RawString(prefix)
+		out.String(x.Key)
 	}
 	{
-		if len(x.Value) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"value\":"
-			out.RawString(prefix)
-			out.String(x.Value)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"value\":"
+		out.RawString(prefix)
+		out.String(x.Value)
 	}
 	out.RawByte('}')
 }
@@ -608,40 +600,40 @@ func (x *EACLRecord_Target) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Role != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"role\":"
-			out.RawString(prefix)
-			v := int32(x.Role)
-			if vv, ok := Role_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"role\":"
+		out.RawString(prefix)
+		v := int32(x.Role)
+		if vv, ok := Role_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	{
-		if len(x.Keys) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"keys\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Keys {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				out.Base64Bytes(x.Keys[i])
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"keys\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Keys {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			if x.Keys[i] != nil {
+				out.Base64Bytes(x.Keys[i])
+			} else {
+				out.String("")
+			}
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -870,76 +862,68 @@ func (x *EACLRecord) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Operation != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"operation\":"
-			out.RawString(prefix)
-			v := int32(x.Operation)
-			if vv, ok := Operation_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"operation\":"
+		out.RawString(prefix)
+		v := int32(x.Operation)
+		if vv, ok := Operation_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	{
-		if x.Action != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"action\":"
-			out.RawString(prefix)
-			v := int32(x.Action)
-			if vv, ok := Action_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"action\":"
+		out.RawString(prefix)
+		v := int32(x.Action)
+		if vv, ok := Action_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	{
-		if len(x.Filters) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"filters\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Filters {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Filters[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"filters\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Filters {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Filters[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	{
-		if len(x.Targets) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"targets\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Targets {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Targets[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"targets\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Targets {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Targets[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -1185,47 +1169,41 @@ func (x *EACLTable) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Version != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"version\":"
-			out.RawString(prefix)
-			x.Version.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"version\":"
+		out.RawString(prefix)
+		x.Version.MarshalEasyJSON(out)
 	}
 	{
-		if x.ContainerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"containerID\":"
-			out.RawString(prefix)
-			x.ContainerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"containerID\":"
+		out.RawString(prefix)
+		x.ContainerId.MarshalEasyJSON(out)
 	}
 	{
-		if len(x.Records) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"records\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Records {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Records[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"records\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Records {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Records[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -1415,46 +1393,40 @@ func (x *BearerToken_Body_TokenLifetime) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Exp != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"exp\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Exp, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"exp\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Exp, 10)
+		out.RawByte('"')
 	}
 	{
-		if x.Nbf != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"nbf\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Nbf, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"nbf\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Nbf, 10)
+		out.RawByte('"')
 	}
 	{
-		if x.Iat != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"iat\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Iat, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"iat\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Iat, 10)
+		out.RawByte('"')
 	}
 	out.RawByte('}')
 }
@@ -1647,35 +1619,31 @@ func (x *BearerToken_Body_APEOverride) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Target != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"target\":"
-			out.RawString(prefix)
-			x.Target.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"target\":"
+		out.RawString(prefix)
+		x.Target.MarshalEasyJSON(out)
 	}
 	{
-		if len(x.Chains) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"chains\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Chains {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Chains[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"chains\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Chains {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Chains[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -1910,64 +1878,54 @@ func (x *BearerToken_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.EaclTable != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"eaclTable\":"
-			out.RawString(prefix)
-			x.EaclTable.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"eaclTable\":"
+		out.RawString(prefix)
+		x.EaclTable.MarshalEasyJSON(out)
 	}
 	{
-		if x.OwnerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"ownerID\":"
-			out.RawString(prefix)
-			x.OwnerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"ownerID\":"
+		out.RawString(prefix)
+		x.OwnerId.MarshalEasyJSON(out)
 	}
 	{
-		if x.Lifetime != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"lifetime\":"
-			out.RawString(prefix)
-			x.Lifetime.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"lifetime\":"
+		out.RawString(prefix)
+		x.Lifetime.MarshalEasyJSON(out)
 	}
 	{
-		if x.AllowImpersonate {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"allowImpersonate\":"
-			out.RawString(prefix)
-			out.Bool(x.AllowImpersonate)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"allowImpersonate\":"
+		out.RawString(prefix)
+		out.Bool(x.AllowImpersonate)
 	}
 	{
-		if x.ApeOverride != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"apeOverride\":"
-			out.RawString(prefix)
-			x.ApeOverride.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"apeOverride\":"
+		out.RawString(prefix)
+		x.ApeOverride.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2149,28 +2107,24 @@ func (x *BearerToken) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.Signature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"signature\":"
-			out.RawString(prefix)
-			x.Signature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"signature\":"
+		out.RawString(prefix)
+		x.Signature.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
diff --git a/ape/grpc/types_frostfs.pb.go b/ape/grpc/types_frostfs.pb.go
index 7967e13..cf9499f 100644
--- a/ape/grpc/types_frostfs.pb.go
+++ b/ape/grpc/types_frostfs.pb.go
@@ -158,33 +158,29 @@ func (x *ChainTarget) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Type != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"type\":"
-			out.RawString(prefix)
-			v := int32(x.Type)
-			if vv, ok := TargetType_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"type\":"
+		out.RawString(prefix)
+		v := int32(x.Type)
+		if vv, ok := TargetType_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	{
-		if len(x.Name) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"name\":"
-			out.RawString(prefix)
-			out.String(x.Name)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"name\":"
+		out.RawString(prefix)
+		out.String(x.Name)
 	}
 	out.RawByte('}')
 }
@@ -358,15 +354,17 @@ func (x *Chain) MarshalEasyJSON(out *jwriter.Writer) {
 	switch xx := x.Kind.(type) {
 	case *Chain_Raw:
 		{
-			if len(xx.Raw) != 0 {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"raw\":"
-				out.RawString(prefix)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
+			}
+			const prefix string = "\"raw\":"
+			out.RawString(prefix)
+			if xx.Raw != nil {
 				out.Base64Bytes(xx.Raw)
+			} else {
+				out.String("")
 			}
 		}
 	}
diff --git a/apemanager/grpc/service_frostfs.pb.go b/apemanager/grpc/service_frostfs.pb.go
index 2a30850..7f3ed10 100644
--- a/apemanager/grpc/service_frostfs.pb.go
+++ b/apemanager/grpc/service_frostfs.pb.go
@@ -124,28 +124,24 @@ func (x *AddChainRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Target != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"target\":"
-			out.RawString(prefix)
-			x.Target.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"target\":"
+		out.RawString(prefix)
+		x.Target.MarshalEasyJSON(out)
 	}
 	{
-		if x.Chain != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"chain\":"
-			out.RawString(prefix)
-			x.Chain.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"chain\":"
+		out.RawString(prefix)
+		x.Chain.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -348,40 +344,34 @@ func (x *AddChainRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -524,15 +514,17 @@ func (x *AddChainResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.ChainId) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"chainId\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"chainId\":"
+		out.RawString(prefix)
+		if x.ChainId != nil {
 			out.Base64Bytes(x.ChainId)
+		} else {
+			out.String("")
 		}
 	}
 	out.RawByte('}')
@@ -728,40 +720,34 @@ func (x *AddChainResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -927,27 +913,27 @@ func (x *RemoveChainRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Target != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"target\":"
-			out.RawString(prefix)
-			x.Target.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"target\":"
+		out.RawString(prefix)
+		x.Target.MarshalEasyJSON(out)
 	}
 	{
-		if len(x.ChainId) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"chainId\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"chainId\":"
+		out.RawString(prefix)
+		if x.ChainId != nil {
 			out.Base64Bytes(x.ChainId)
+		} else {
+			out.String("")
 		}
 	}
 	out.RawByte('}')
@@ -1150,40 +1136,34 @@ func (x *RemoveChainRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -1488,40 +1468,34 @@ func (x *RemoveChainResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -1667,16 +1641,14 @@ func (x *ListChainsRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Target != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"target\":"
-			out.RawString(prefix)
-			x.Target.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"target\":"
+		out.RawString(prefix)
+		x.Target.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -1872,40 +1844,34 @@ func (x *ListChainsRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2054,23 +2020,21 @@ func (x *ListChainsResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Chains) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"chains\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Chains {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Chains[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"chains\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Chains {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Chains[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -2273,40 +2237,34 @@ func (x *ListChainsResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
diff --git a/container/grpc/service_frostfs.pb.go b/container/grpc/service_frostfs.pb.go
index 4ccb595..cc05dde 100644
--- a/container/grpc/service_frostfs.pb.go
+++ b/container/grpc/service_frostfs.pb.go
@@ -124,28 +124,24 @@ func (x *PutRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Container != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"container\":"
-			out.RawString(prefix)
-			x.Container.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"container\":"
+		out.RawString(prefix)
+		x.Container.MarshalEasyJSON(out)
 	}
 	{
-		if x.Signature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"signature\":"
-			out.RawString(prefix)
-			x.Signature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"signature\":"
+		out.RawString(prefix)
+		x.Signature.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -348,40 +344,34 @@ func (x *PutRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -527,16 +517,14 @@ func (x *PutResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.ContainerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"containerId\":"
-			out.RawString(prefix)
-			x.ContainerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"containerId\":"
+		out.RawString(prefix)
+		x.ContainerId.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -732,40 +720,34 @@ func (x *PutResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -934,28 +916,24 @@ func (x *DeleteRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.ContainerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"containerId\":"
-			out.RawString(prefix)
-			x.ContainerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"containerId\":"
+		out.RawString(prefix)
+		x.ContainerId.MarshalEasyJSON(out)
 	}
 	{
-		if x.Signature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"signature\":"
-			out.RawString(prefix)
-			x.Signature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"signature\":"
+		out.RawString(prefix)
+		x.Signature.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -1158,40 +1136,34 @@ func (x *DeleteRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -1496,40 +1468,34 @@ func (x *DeleteResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -1675,16 +1641,14 @@ func (x *GetRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.ContainerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"containerId\":"
-			out.RawString(prefix)
-			x.ContainerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"containerId\":"
+		out.RawString(prefix)
+		x.ContainerId.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -1880,40 +1844,34 @@ func (x *GetRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2105,40 +2063,34 @@ func (x *GetResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Container != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"container\":"
-			out.RawString(prefix)
-			x.Container.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"container\":"
+		out.RawString(prefix)
+		x.Container.MarshalEasyJSON(out)
 	}
 	{
-		if x.Signature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"signature\":"
-			out.RawString(prefix)
-			x.Signature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"signature\":"
+		out.RawString(prefix)
+		x.Signature.MarshalEasyJSON(out)
 	}
 	{
-		if x.SessionToken != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"sessionToken\":"
-			out.RawString(prefix)
-			x.SessionToken.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"sessionToken\":"
+		out.RawString(prefix)
+		x.SessionToken.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2348,40 +2300,34 @@ func (x *GetResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2527,16 +2473,14 @@ func (x *ListRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.OwnerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"ownerId\":"
-			out.RawString(prefix)
-			x.OwnerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"ownerId\":"
+		out.RawString(prefix)
+		x.OwnerId.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2732,40 +2676,34 @@ func (x *ListRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2914,23 +2852,21 @@ func (x *ListResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.ContainerIds) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"containerIds\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.ContainerIds {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.ContainerIds[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"containerIds\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.ContainerIds {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.ContainerIds[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -3133,40 +3069,34 @@ func (x *ListResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
diff --git a/container/grpc/types_frostfs.pb.go b/container/grpc/types_frostfs.pb.go
index e5da35f..4ca23fa 100644
--- a/container/grpc/types_frostfs.pb.go
+++ b/container/grpc/types_frostfs.pb.go
@@ -119,28 +119,24 @@ func (x *Container_Attribute) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Key) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"key\":"
-			out.RawString(prefix)
-			out.String(x.Key)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"key\":"
+		out.RawString(prefix)
+		out.String(x.Key)
 	}
 	{
-		if len(x.Value) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"value\":"
-			out.RawString(prefix)
-			out.String(x.Value)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"value\":"
+		out.RawString(prefix)
+		out.String(x.Value)
 	}
 	out.RawByte('}')
 }
@@ -389,83 +385,75 @@ func (x *Container) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Version != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"version\":"
-			out.RawString(prefix)
-			x.Version.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"version\":"
+		out.RawString(prefix)
+		x.Version.MarshalEasyJSON(out)
 	}
 	{
-		if x.OwnerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"ownerID\":"
-			out.RawString(prefix)
-			x.OwnerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"ownerID\":"
+		out.RawString(prefix)
+		x.OwnerId.MarshalEasyJSON(out)
 	}
 	{
-		if len(x.Nonce) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"nonce\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"nonce\":"
+		out.RawString(prefix)
+		if x.Nonce != nil {
 			out.Base64Bytes(x.Nonce)
+		} else {
+			out.String("")
 		}
 	}
 	{
-		if x.BasicAcl != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"basicACL\":"
-			out.RawString(prefix)
-			out.Uint32(x.BasicAcl)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"basicACL\":"
+		out.RawString(prefix)
+		out.Uint32(x.BasicAcl)
 	}
 	{
-		if len(x.Attributes) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"attributes\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Attributes {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Attributes[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"attributes\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Attributes {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Attributes[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	{
-		if x.PlacementPolicy != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"placementPolicy\":"
-			out.RawString(prefix)
-			x.PlacementPolicy.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"placementPolicy\":"
+		out.RawString(prefix)
+		x.PlacementPolicy.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
diff --git a/lock/grpc/types_frostfs.pb.go b/lock/grpc/types_frostfs.pb.go
index 33f22c5..004a01f 100644
--- a/lock/grpc/types_frostfs.pb.go
+++ b/lock/grpc/types_frostfs.pb.go
@@ -103,23 +103,21 @@ func (x *Lock) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Members) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"members\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Members {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Members[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"members\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Members {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Members[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
diff --git a/netmap/grpc/service_frostfs.pb.go b/netmap/grpc/service_frostfs.pb.go
index 4d53031..9ebbf98 100644
--- a/netmap/grpc/service_frostfs.pb.go
+++ b/netmap/grpc/service_frostfs.pb.go
@@ -260,40 +260,34 @@ func (x *LocalNodeInfoRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -462,28 +456,24 @@ func (x *LocalNodeInfoResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Version != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"version\":"
-			out.RawString(prefix)
-			x.Version.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"version\":"
+		out.RawString(prefix)
+		x.Version.MarshalEasyJSON(out)
 	}
 	{
-		if x.NodeInfo != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"nodeInfo\":"
-			out.RawString(prefix)
-			x.NodeInfo.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"nodeInfo\":"
+		out.RawString(prefix)
+		x.NodeInfo.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -686,40 +676,34 @@ func (x *LocalNodeInfoResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -1024,40 +1008,34 @@ func (x *NetworkInfoRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -1203,16 +1181,14 @@ func (x *NetworkInfoResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.NetworkInfo != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"networkInfo\":"
-			out.RawString(prefix)
-			x.NetworkInfo.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"networkInfo\":"
+		out.RawString(prefix)
+		x.NetworkInfo.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -1408,40 +1384,34 @@ func (x *NetworkInfoResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -1746,40 +1716,34 @@ func (x *NetmapSnapshotRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -1925,16 +1889,14 @@ func (x *NetmapSnapshotResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Netmap != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"netmap\":"
-			out.RawString(prefix)
-			x.Netmap.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"netmap\":"
+		out.RawString(prefix)
+		x.Netmap.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2130,40 +2092,34 @@ func (x *NetmapSnapshotResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
diff --git a/netmap/grpc/types_frostfs.pb.go b/netmap/grpc/types_frostfs.pb.go
index a4b10f9..0328531 100644
--- a/netmap/grpc/types_frostfs.pb.go
+++ b/netmap/grpc/types_frostfs.pb.go
@@ -277,76 +277,66 @@ func (x *Filter) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Name) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"name\":"
-			out.RawString(prefix)
-			out.String(x.Name)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"name\":"
+		out.RawString(prefix)
+		out.String(x.Name)
+	}
+	{
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"key\":"
+		out.RawString(prefix)
+		out.String(x.Key)
+	}
+	{
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"op\":"
+		out.RawString(prefix)
+		v := int32(x.Op)
+		if vv, ok := Operation_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	{
-		if len(x.Key) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"key\":"
-			out.RawString(prefix)
-			out.String(x.Key)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"value\":"
+		out.RawString(prefix)
+		out.String(x.Value)
 	}
 	{
-		if x.Op != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"op\":"
-			out.RawString(prefix)
-			v := int32(x.Op)
-			if vv, ok := Operation_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
-	}
-	{
-		if len(x.Value) != 0 {
-			if !first {
+		const prefix string = "\"filters\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Filters {
+			if i != 0 {
 				out.RawByte(',')
-			} else {
-				first = false
 			}
-			const prefix string = "\"value\":"
-			out.RawString(prefix)
-			out.String(x.Value)
-		}
-	}
-	{
-		if len(x.Filters) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"filters\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Filters {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Filters[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+			x.Filters[i].MarshalEasyJSON(out)
 		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -602,69 +592,59 @@ func (x *Selector) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Name) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"name\":"
-			out.RawString(prefix)
-			out.String(x.Name)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"name\":"
+		out.RawString(prefix)
+		out.String(x.Name)
+	}
+	{
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"count\":"
+		out.RawString(prefix)
+		out.Uint32(x.Count)
+	}
+	{
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"clause\":"
+		out.RawString(prefix)
+		v := int32(x.Clause)
+		if vv, ok := Clause_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	{
-		if x.Count != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"count\":"
-			out.RawString(prefix)
-			out.Uint32(x.Count)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"attribute\":"
+		out.RawString(prefix)
+		out.String(x.Attribute)
 	}
 	{
-		if x.Clause != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"clause\":"
-			out.RawString(prefix)
-			v := int32(x.Clause)
-			if vv, ok := Clause_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
-		}
-	}
-	{
-		if len(x.Attribute) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"attribute\":"
-			out.RawString(prefix)
-			out.String(x.Attribute)
-		}
-	}
-	{
-		if len(x.Filter) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"filter\":"
-			out.RawString(prefix)
-			out.String(x.Filter)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"filter\":"
+		out.RawString(prefix)
+		out.String(x.Filter)
 	}
 	out.RawByte('}')
 }
@@ -900,52 +880,44 @@ func (x *Replica) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Count != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"count\":"
-			out.RawString(prefix)
-			out.Uint32(x.Count)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"count\":"
+		out.RawString(prefix)
+		out.Uint32(x.Count)
 	}
 	{
-		if len(x.Selector) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"selector\":"
-			out.RawString(prefix)
-			out.String(x.Selector)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"selector\":"
+		out.RawString(prefix)
+		out.String(x.Selector)
 	}
 	{
-		if x.EcDataCount != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"ecDataCount\":"
-			out.RawString(prefix)
-			out.Uint32(x.EcDataCount)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"ecDataCount\":"
+		out.RawString(prefix)
+		out.Uint32(x.EcDataCount)
 	}
 	{
-		if x.EcParityCount != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"ecParityCount\":"
-			out.RawString(prefix)
-			out.Uint32(x.EcParityCount)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"ecParityCount\":"
+		out.RawString(prefix)
+		out.Uint32(x.EcParityCount)
 	}
 	out.RawByte('}')
 }
@@ -1213,85 +1185,75 @@ func (x *PlacementPolicy) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Replicas) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"replicas\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Replicas {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Replicas[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"replicas\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Replicas {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Replicas[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	{
-		if x.ContainerBackupFactor != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"containerBackupFactor\":"
-			out.RawString(prefix)
-			out.Uint32(x.ContainerBackupFactor)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"containerBackupFactor\":"
+		out.RawString(prefix)
+		out.Uint32(x.ContainerBackupFactor)
 	}
 	{
-		if len(x.Selectors) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"selectors\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Selectors {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Selectors[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"selectors\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Selectors {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Selectors[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	{
-		if len(x.Filters) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"filters\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Filters {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Filters[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"filters\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Filters {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Filters[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	{
-		if x.Unique {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"unique\":"
-			out.RawString(prefix)
-			out.Bool(x.Unique)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"unique\":"
+		out.RawString(prefix)
+		out.Bool(x.Unique)
 	}
 	out.RawByte('}')
 }
@@ -1553,47 +1515,41 @@ func (x *NodeInfo_Attribute) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Key) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"key\":"
-			out.RawString(prefix)
-			out.String(x.Key)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"key\":"
+		out.RawString(prefix)
+		out.String(x.Key)
 	}
 	{
-		if len(x.Value) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"value\":"
-			out.RawString(prefix)
-			out.String(x.Value)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"value\":"
+		out.RawString(prefix)
+		out.String(x.Value)
 	}
 	{
-		if len(x.Parents) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"parents\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Parents {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				out.String(x.Parents[i])
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"parents\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Parents {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			out.String(x.Parents[i])
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -1806,70 +1762,66 @@ func (x *NodeInfo) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.PublicKey) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"publicKey\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"publicKey\":"
+		out.RawString(prefix)
+		if x.PublicKey != nil {
 			out.Base64Bytes(x.PublicKey)
+		} else {
+			out.String("")
 		}
 	}
 	{
-		if len(x.Addresses) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"addresses\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Addresses {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				out.String(x.Addresses[i])
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"addresses\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Addresses {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			out.String(x.Addresses[i])
+		}
+		out.RawByte(']')
 	}
 	{
-		if len(x.Attributes) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"attributes\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Attributes {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Attributes[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"attributes\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Attributes {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Attributes[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	{
-		if x.State != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"state\":"
-			out.RawString(prefix)
-			v := int32(x.State)
-			if vv, ok := NodeInfo_State_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"state\":"
+		out.RawString(prefix)
+		v := int32(x.State)
+		if vv, ok := NodeInfo_State_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	out.RawByte('}')
@@ -2073,37 +2025,33 @@ func (x *Netmap) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Epoch != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"epoch\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Epoch, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"epoch\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Epoch, 10)
+		out.RawByte('"')
 	}
 	{
-		if len(x.Nodes) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"nodes\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Nodes {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Nodes[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"nodes\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Nodes {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Nodes[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -2273,27 +2221,31 @@ func (x *NetworkConfig_Parameter) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Key) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"key\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"key\":"
+		out.RawString(prefix)
+		if x.Key != nil {
 			out.Base64Bytes(x.Key)
+		} else {
+			out.String("")
 		}
 	}
 	{
-		if len(x.Value) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"value\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"value\":"
+		out.RawString(prefix)
+		if x.Value != nil {
 			out.Base64Bytes(x.Value)
+		} else {
+			out.String("")
 		}
 	}
 	out.RawByte('}')
@@ -2434,23 +2386,21 @@ func (x *NetworkConfig) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Parameters) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"parameters\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Parameters {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Parameters[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"parameters\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Parameters {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Parameters[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -2649,58 +2599,50 @@ func (x *NetworkInfo) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.CurrentEpoch != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"currentEpoch\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.CurrentEpoch, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"currentEpoch\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.CurrentEpoch, 10)
+		out.RawByte('"')
 	}
 	{
-		if x.MagicNumber != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"magicNumber\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.MagicNumber, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"magicNumber\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.MagicNumber, 10)
+		out.RawByte('"')
 	}
 	{
-		if x.MsPerBlock != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"msPerBlock\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendInt(out.Buffer.Buf, x.MsPerBlock, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"msPerBlock\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendInt(out.Buffer.Buf, x.MsPerBlock, 10)
+		out.RawByte('"')
 	}
 	{
-		if x.NetworkConfig != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"networkConfig\":"
-			out.RawString(prefix)
-			x.NetworkConfig.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"networkConfig\":"
+		out.RawString(prefix)
+		x.NetworkConfig.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
diff --git a/object/grpc/service_frostfs.pb.go b/object/grpc/service_frostfs.pb.go
index f934f3b..9ee5a3d 100644
--- a/object/grpc/service_frostfs.pb.go
+++ b/object/grpc/service_frostfs.pb.go
@@ -122,28 +122,24 @@ func (x *GetRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Address != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"address\":"
-			out.RawString(prefix)
-			x.Address.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"address\":"
+		out.RawString(prefix)
+		x.Address.MarshalEasyJSON(out)
 	}
 	{
-		if x.Raw {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"raw\":"
-			out.RawString(prefix)
-			out.Bool(x.Raw)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"raw\":"
+		out.RawString(prefix)
+		out.Bool(x.Raw)
 	}
 	out.RawByte('}')
 }
@@ -345,40 +341,34 @@ func (x *GetRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -570,40 +560,34 @@ func (x *GetResponse_Body_Init) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.ObjectId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"objectId\":"
-			out.RawString(prefix)
-			x.ObjectId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"objectId\":"
+		out.RawString(prefix)
+		x.ObjectId.MarshalEasyJSON(out)
 	}
 	{
-		if x.Signature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"signature\":"
-			out.RawString(prefix)
-			x.Signature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"signature\":"
+		out.RawString(prefix)
+		x.Signature.MarshalEasyJSON(out)
 	}
 	{
-		if x.Header != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"header\":"
-			out.RawString(prefix)
-			x.Header.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"header\":"
+		out.RawString(prefix)
+		x.Header.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -851,55 +835,51 @@ func (x *GetResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	switch xx := x.ObjectPart.(type) {
 	case *GetResponse_Body_Init_:
 		{
-			if xx.Init != nil {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"init\":"
-				out.RawString(prefix)
-				xx.Init.MarshalEasyJSON(out)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
 			}
+			const prefix string = "\"init\":"
+			out.RawString(prefix)
+			xx.Init.MarshalEasyJSON(out)
 		}
 	case *GetResponse_Body_Chunk:
 		{
-			if len(xx.Chunk) != 0 {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"chunk\":"
-				out.RawString(prefix)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
+			}
+			const prefix string = "\"chunk\":"
+			out.RawString(prefix)
+			if xx.Chunk != nil {
 				out.Base64Bytes(xx.Chunk)
+			} else {
+				out.String("")
 			}
 		}
 	case *GetResponse_Body_SplitInfo:
 		{
-			if xx.SplitInfo != nil {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"splitInfo\":"
-				out.RawString(prefix)
-				xx.SplitInfo.MarshalEasyJSON(out)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
 			}
+			const prefix string = "\"splitInfo\":"
+			out.RawString(prefix)
+			xx.SplitInfo.MarshalEasyJSON(out)
 		}
 	case *GetResponse_Body_EcInfo:
 		{
-			if xx.EcInfo != nil {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"ecInfo\":"
-				out.RawString(prefix)
-				xx.EcInfo.MarshalEasyJSON(out)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
 			}
+			const prefix string = "\"ecInfo\":"
+			out.RawString(prefix)
+			xx.EcInfo.MarshalEasyJSON(out)
 		}
 	}
 	out.RawByte('}')
@@ -1152,40 +1132,34 @@ func (x *GetResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -1399,59 +1373,51 @@ func (x *PutRequest_Body_Init) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.ObjectId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"objectId\":"
-			out.RawString(prefix)
-			x.ObjectId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"objectId\":"
+		out.RawString(prefix)
+		x.ObjectId.MarshalEasyJSON(out)
 	}
 	{
-		if x.Signature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"signature\":"
-			out.RawString(prefix)
-			x.Signature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"signature\":"
+		out.RawString(prefix)
+		x.Signature.MarshalEasyJSON(out)
 	}
 	{
-		if x.Header != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"header\":"
-			out.RawString(prefix)
-			x.Header.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"header\":"
+		out.RawString(prefix)
+		x.Header.MarshalEasyJSON(out)
 	}
 	{
-		if len(x.CopiesNumber) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"copiesNumber\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.CopiesNumber {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				out.Uint32(x.CopiesNumber[i])
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"copiesNumber\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.CopiesNumber {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			out.Uint32(x.CopiesNumber[i])
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -1666,28 +1632,28 @@ func (x *PutRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	switch xx := x.ObjectPart.(type) {
 	case *PutRequest_Body_Init_:
 		{
-			if xx.Init != nil {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"init\":"
-				out.RawString(prefix)
-				xx.Init.MarshalEasyJSON(out)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
 			}
+			const prefix string = "\"init\":"
+			out.RawString(prefix)
+			xx.Init.MarshalEasyJSON(out)
 		}
 	case *PutRequest_Body_Chunk:
 		{
-			if len(xx.Chunk) != 0 {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"chunk\":"
-				out.RawString(prefix)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
+			}
+			const prefix string = "\"chunk\":"
+			out.RawString(prefix)
+			if xx.Chunk != nil {
 				out.Base64Bytes(xx.Chunk)
+			} else {
+				out.String("")
 			}
 		}
 	}
@@ -1911,40 +1877,34 @@ func (x *PutRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2090,16 +2050,14 @@ func (x *PutResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.ObjectId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"objectId\":"
-			out.RawString(prefix)
-			x.ObjectId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"objectId\":"
+		out.RawString(prefix)
+		x.ObjectId.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2295,40 +2253,34 @@ func (x *PutResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2474,16 +2426,14 @@ func (x *DeleteRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Address != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"address\":"
-			out.RawString(prefix)
-			x.Address.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"address\":"
+		out.RawString(prefix)
+		x.Address.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2679,40 +2629,34 @@ func (x *DeleteRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2858,16 +2802,14 @@ func (x *DeleteResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Tombstone != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"tombstone\":"
-			out.RawString(prefix)
-			x.Tombstone.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"tombstone\":"
+		out.RawString(prefix)
+		x.Tombstone.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -3063,40 +3005,34 @@ func (x *DeleteResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -3282,40 +3218,34 @@ func (x *HeadRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Address != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"address\":"
-			out.RawString(prefix)
-			x.Address.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"address\":"
+		out.RawString(prefix)
+		x.Address.MarshalEasyJSON(out)
 	}
 	{
-		if x.MainOnly {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"mainOnly\":"
-			out.RawString(prefix)
-			out.Bool(x.MainOnly)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"mainOnly\":"
+		out.RawString(prefix)
+		out.Bool(x.MainOnly)
 	}
 	{
-		if x.Raw {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"raw\":"
-			out.RawString(prefix)
-			out.Bool(x.Raw)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"raw\":"
+		out.RawString(prefix)
+		out.Bool(x.Raw)
 	}
 	out.RawByte('}')
 }
@@ -3523,40 +3453,34 @@ func (x *HeadRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -3725,28 +3649,24 @@ func (x *HeaderWithSignature) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Header != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"header\":"
-			out.RawString(prefix)
-			x.Header.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"header\":"
+		out.RawString(prefix)
+		x.Header.MarshalEasyJSON(out)
 	}
 	{
-		if x.Signature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"signature\":"
-			out.RawString(prefix)
-			x.Signature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"signature\":"
+		out.RawString(prefix)
+		x.Signature.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -3982,55 +3902,47 @@ func (x *HeadResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	switch xx := x.Head.(type) {
 	case *HeadResponse_Body_Header:
 		{
-			if xx.Header != nil {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"header\":"
-				out.RawString(prefix)
-				xx.Header.MarshalEasyJSON(out)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
 			}
+			const prefix string = "\"header\":"
+			out.RawString(prefix)
+			xx.Header.MarshalEasyJSON(out)
 		}
 	case *HeadResponse_Body_ShortHeader:
 		{
-			if xx.ShortHeader != nil {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"shortHeader\":"
-				out.RawString(prefix)
-				xx.ShortHeader.MarshalEasyJSON(out)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
 			}
+			const prefix string = "\"shortHeader\":"
+			out.RawString(prefix)
+			xx.ShortHeader.MarshalEasyJSON(out)
 		}
 	case *HeadResponse_Body_SplitInfo:
 		{
-			if xx.SplitInfo != nil {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"splitInfo\":"
-				out.RawString(prefix)
-				xx.SplitInfo.MarshalEasyJSON(out)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
 			}
+			const prefix string = "\"splitInfo\":"
+			out.RawString(prefix)
+			xx.SplitInfo.MarshalEasyJSON(out)
 		}
 	case *HeadResponse_Body_EcInfo:
 		{
-			if xx.EcInfo != nil {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"ecInfo\":"
-				out.RawString(prefix)
-				xx.EcInfo.MarshalEasyJSON(out)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
 			}
+			const prefix string = "\"ecInfo\":"
+			out.RawString(prefix)
+			xx.EcInfo.MarshalEasyJSON(out)
 		}
 	}
 	out.RawByte('}')
@@ -4284,40 +4196,34 @@ func (x *HeadResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -4500,45 +4406,39 @@ func (x *SearchRequest_Body_Filter) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.MatchType != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"matchType\":"
-			out.RawString(prefix)
-			v := int32(x.MatchType)
-			if vv, ok := MatchType_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"matchType\":"
+		out.RawString(prefix)
+		v := int32(x.MatchType)
+		if vv, ok := MatchType_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	{
-		if len(x.Key) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"key\":"
-			out.RawString(prefix)
-			out.String(x.Key)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"key\":"
+		out.RawString(prefix)
+		out.String(x.Key)
 	}
 	{
-		if len(x.Value) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"value\":"
-			out.RawString(prefix)
-			out.String(x.Value)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"value\":"
+		out.RawString(prefix)
+		out.String(x.Value)
 	}
 	out.RawByte('}')
 }
@@ -4743,47 +4643,41 @@ func (x *SearchRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.ContainerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"containerId\":"
-			out.RawString(prefix)
-			x.ContainerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"containerId\":"
+		out.RawString(prefix)
+		x.ContainerId.MarshalEasyJSON(out)
 	}
 	{
-		if x.Version != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"version\":"
-			out.RawString(prefix)
-			out.Uint32(x.Version)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"version\":"
+		out.RawString(prefix)
+		out.Uint32(x.Version)
 	}
 	{
-		if len(x.Filters) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"filters\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Filters {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Filters[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"filters\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Filters {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Filters[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -5007,40 +4901,34 @@ func (x *SearchRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -5189,23 +5077,21 @@ func (x *SearchResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.IdList) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"idList\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.IdList {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.IdList[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"idList\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.IdList {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.IdList[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -5408,40 +5294,34 @@ func (x *SearchResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -5604,32 +5484,28 @@ func (x *Range) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Offset != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"offset\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Offset, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"offset\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Offset, 10)
+		out.RawByte('"')
 	}
 	{
-		if x.Length != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"length\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Length, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"length\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Length, 10)
+		out.RawByte('"')
 	}
 	out.RawByte('}')
 }
@@ -5825,40 +5701,34 @@ func (x *GetRangeRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Address != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"address\":"
-			out.RawString(prefix)
-			x.Address.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"address\":"
+		out.RawString(prefix)
+		x.Address.MarshalEasyJSON(out)
 	}
 	{
-		if x.Range != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"range\":"
-			out.RawString(prefix)
-			x.Range.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"range\":"
+		out.RawString(prefix)
+		x.Range.MarshalEasyJSON(out)
 	}
 	{
-		if x.Raw {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"raw\":"
-			out.RawString(prefix)
-			out.Bool(x.Raw)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"raw\":"
+		out.RawString(prefix)
+		out.Bool(x.Raw)
 	}
 	out.RawByte('}')
 }
@@ -6067,40 +5937,34 @@ func (x *GetRangeRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -6321,42 +6185,40 @@ func (x *GetRangeResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	switch xx := x.RangePart.(type) {
 	case *GetRangeResponse_Body_Chunk:
 		{
-			if len(xx.Chunk) != 0 {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"chunk\":"
-				out.RawString(prefix)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
+			}
+			const prefix string = "\"chunk\":"
+			out.RawString(prefix)
+			if xx.Chunk != nil {
 				out.Base64Bytes(xx.Chunk)
+			} else {
+				out.String("")
 			}
 		}
 	case *GetRangeResponse_Body_SplitInfo:
 		{
-			if xx.SplitInfo != nil {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"splitInfo\":"
-				out.RawString(prefix)
-				xx.SplitInfo.MarshalEasyJSON(out)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
 			}
+			const prefix string = "\"splitInfo\":"
+			out.RawString(prefix)
+			xx.SplitInfo.MarshalEasyJSON(out)
 		}
 	case *GetRangeResponse_Body_EcInfo:
 		{
-			if xx.EcInfo != nil {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"ecInfo\":"
-				out.RawString(prefix)
-				xx.EcInfo.MarshalEasyJSON(out)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
 			}
+			const prefix string = "\"ecInfo\":"
+			out.RawString(prefix)
+			xx.EcInfo.MarshalEasyJSON(out)
 		}
 	}
 	out.RawByte('}')
@@ -6594,40 +6456,34 @@ func (x *GetRangeResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -6839,63 +6695,59 @@ func (x *GetRangeHashRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Address != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"address\":"
-			out.RawString(prefix)
-			x.Address.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"address\":"
+		out.RawString(prefix)
+		x.Address.MarshalEasyJSON(out)
 	}
 	{
-		if len(x.Ranges) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"ranges\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Ranges {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Ranges[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"ranges\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Ranges {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Ranges[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	{
-		if len(x.Salt) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"salt\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"salt\":"
+		out.RawString(prefix)
+		if x.Salt != nil {
 			out.Base64Bytes(x.Salt)
+		} else {
+			out.String("")
 		}
 	}
 	{
-		if x.Type != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"type\":"
-			out.RawString(prefix)
-			v := int32(x.Type)
-			if vv, ok := grpc.ChecksumType_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"type\":"
+		out.RawString(prefix)
+		v := int32(x.Type)
+		if vv, ok := grpc.ChecksumType_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	out.RawByte('}')
@@ -7134,40 +6986,34 @@ func (x *GetRangeHashRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -7330,40 +7176,40 @@ func (x *GetRangeHashResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Type != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"type\":"
-			out.RawString(prefix)
-			v := int32(x.Type)
-			if vv, ok := grpc.ChecksumType_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"type\":"
+		out.RawString(prefix)
+		v := int32(x.Type)
+		if vv, ok := grpc.ChecksumType_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	{
-		if len(x.HashList) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"hashList\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.HashList {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				out.Base64Bytes(x.HashList[i])
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"hashList\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.HashList {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			if x.HashList[i] != nil {
+				out.Base64Bytes(x.HashList[i])
+			} else {
+				out.String("")
+			}
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -7587,40 +7433,34 @@ func (x *GetRangeHashResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -7788,35 +7628,31 @@ func (x *PutSingleRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Object != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"object\":"
-			out.RawString(prefix)
-			x.Object.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"object\":"
+		out.RawString(prefix)
+		x.Object.MarshalEasyJSON(out)
 	}
 	{
-		if len(x.CopiesNumber) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"copiesNumber\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.CopiesNumber {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				out.Uint32(x.CopiesNumber[i])
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"copiesNumber\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.CopiesNumber {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			out.Uint32(x.CopiesNumber[i])
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -8033,40 +7869,34 @@ func (x *PutSingleRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -8371,40 +8201,34 @@ func (x *PutSingleResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -8570,27 +8394,27 @@ func (x *PatchRequest_Body_Patch) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.SourceRange != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"sourceRange\":"
-			out.RawString(prefix)
-			x.SourceRange.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"sourceRange\":"
+		out.RawString(prefix)
+		x.SourceRange.MarshalEasyJSON(out)
 	}
 	{
-		if len(x.Chunk) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"chunk\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"chunk\":"
+		out.RawString(prefix)
+		if x.Chunk != nil {
 			out.Base64Bytes(x.Chunk)
+		} else {
+			out.String("")
 		}
 	}
 	out.RawByte('}')
@@ -8798,59 +8622,51 @@ func (x *PatchRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Address != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"address\":"
-			out.RawString(prefix)
-			x.Address.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"address\":"
+		out.RawString(prefix)
+		x.Address.MarshalEasyJSON(out)
 	}
 	{
-		if len(x.NewAttributes) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"newAttributes\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.NewAttributes {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.NewAttributes[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"newAttributes\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.NewAttributes {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.NewAttributes[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	{
-		if x.ReplaceAttributes {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"replaceAttributes\":"
-			out.RawString(prefix)
-			out.Bool(x.ReplaceAttributes)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"replaceAttributes\":"
+		out.RawString(prefix)
+		out.Bool(x.ReplaceAttributes)
 	}
 	{
-		if x.Patch != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"patch\":"
-			out.RawString(prefix)
-			x.Patch.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"patch\":"
+		out.RawString(prefix)
+		x.Patch.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -9073,40 +8889,34 @@ func (x *PatchRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -9252,16 +9062,14 @@ func (x *PatchResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.ObjectId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"objectId\":"
-			out.RawString(prefix)
-			x.ObjectId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"objectId\":"
+		out.RawString(prefix)
+		x.ObjectId.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -9457,40 +9265,34 @@ func (x *PatchResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
diff --git a/object/grpc/types_frostfs.pb.go b/object/grpc/types_frostfs.pb.go
index 0ee939a..e4a916f 100644
--- a/object/grpc/types_frostfs.pb.go
+++ b/object/grpc/types_frostfs.pb.go
@@ -307,97 +307,83 @@ func (x *ShortHeader) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Version != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"version\":"
-			out.RawString(prefix)
-			x.Version.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"version\":"
+		out.RawString(prefix)
+		x.Version.MarshalEasyJSON(out)
+	}
+	{
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"creationEpoch\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.CreationEpoch, 10)
+		out.RawByte('"')
+	}
+	{
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"ownerID\":"
+		out.RawString(prefix)
+		x.OwnerId.MarshalEasyJSON(out)
+	}
+	{
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"objectType\":"
+		out.RawString(prefix)
+		v := int32(x.ObjectType)
+		if vv, ok := ObjectType_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	{
-		if x.CreationEpoch != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"creationEpoch\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.CreationEpoch, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"payloadLength\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.PayloadLength, 10)
+		out.RawByte('"')
 	}
 	{
-		if x.OwnerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"ownerID\":"
-			out.RawString(prefix)
-			x.OwnerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"payloadHash\":"
+		out.RawString(prefix)
+		x.PayloadHash.MarshalEasyJSON(out)
 	}
 	{
-		if x.ObjectType != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"objectType\":"
-			out.RawString(prefix)
-			v := int32(x.ObjectType)
-			if vv, ok := ObjectType_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
-		}
-	}
-	{
-		if x.PayloadLength != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"payloadLength\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.PayloadLength, 10)
-			out.RawByte('"')
-		}
-	}
-	{
-		if x.PayloadHash != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"payloadHash\":"
-			out.RawString(prefix)
-			x.PayloadHash.MarshalEasyJSON(out)
-		}
-	}
-	{
-		if x.HomomorphicHash != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"homomorphicHash\":"
-			out.RawString(prefix)
-			x.HomomorphicHash.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"homomorphicHash\":"
+		out.RawString(prefix)
+		x.HomomorphicHash.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -617,28 +603,24 @@ func (x *Header_Attribute) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Key) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"key\":"
-			out.RawString(prefix)
-			out.String(x.Key)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"key\":"
+		out.RawString(prefix)
+		out.String(x.Key)
 	}
 	{
-		if len(x.Value) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"value\":"
-			out.RawString(prefix)
-			out.String(x.Value)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"value\":"
+		out.RawString(prefix)
+		out.String(x.Value)
 	}
 	out.RawByte('}')
 }
@@ -890,82 +872,74 @@ func (x *Header_Split) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Parent != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"parent\":"
-			out.RawString(prefix)
-			x.Parent.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"parent\":"
+		out.RawString(prefix)
+		x.Parent.MarshalEasyJSON(out)
 	}
 	{
-		if x.Previous != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"previous\":"
-			out.RawString(prefix)
-			x.Previous.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"previous\":"
+		out.RawString(prefix)
+		x.Previous.MarshalEasyJSON(out)
 	}
 	{
-		if x.ParentSignature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"parentSignature\":"
-			out.RawString(prefix)
-			x.ParentSignature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"parentSignature\":"
+		out.RawString(prefix)
+		x.ParentSignature.MarshalEasyJSON(out)
 	}
 	{
-		if x.ParentHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"parentHeader\":"
-			out.RawString(prefix)
-			x.ParentHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"parentHeader\":"
+		out.RawString(prefix)
+		x.ParentHeader.MarshalEasyJSON(out)
 	}
 	{
-		if len(x.Children) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"children\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Children {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Children[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"children\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Children {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Children[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	{
-		if len(x.SplitId) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"splitID\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"splitID\":"
+		out.RawString(prefix)
+		if x.SplitId != nil {
 			out.Base64Bytes(x.SplitId)
+		} else {
+			out.String("")
 		}
 	}
 	out.RawByte('}')
@@ -1288,107 +1262,99 @@ func (x *Header_EC) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Parent != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"parent\":"
-			out.RawString(prefix)
-			x.Parent.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"parent\":"
+		out.RawString(prefix)
+		x.Parent.MarshalEasyJSON(out)
 	}
 	{
-		if x.Index != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"index\":"
-			out.RawString(prefix)
-			out.Uint32(x.Index)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"index\":"
+		out.RawString(prefix)
+		out.Uint32(x.Index)
 	}
 	{
-		if x.Total != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"total\":"
-			out.RawString(prefix)
-			out.Uint32(x.Total)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"total\":"
+		out.RawString(prefix)
+		out.Uint32(x.Total)
 	}
 	{
-		if x.HeaderLength != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"headerLength\":"
-			out.RawString(prefix)
-			out.Uint32(x.HeaderLength)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"headerLength\":"
+		out.RawString(prefix)
+		out.Uint32(x.HeaderLength)
 	}
 	{
-		if len(x.Header) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"header\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"header\":"
+		out.RawString(prefix)
+		if x.Header != nil {
 			out.Base64Bytes(x.Header)
+		} else {
+			out.String("")
 		}
 	}
 	{
-		if len(x.ParentSplitId) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"parentSplitID\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"parentSplitID\":"
+		out.RawString(prefix)
+		if x.ParentSplitId != nil {
 			out.Base64Bytes(x.ParentSplitId)
+		} else {
+			out.String("")
 		}
 	}
 	{
-		if x.ParentSplitParentId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"parentSplitParentID\":"
-			out.RawString(prefix)
-			x.ParentSplitParentId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"parentSplitParentID\":"
+		out.RawString(prefix)
+		x.ParentSplitParentId.MarshalEasyJSON(out)
 	}
 	{
-		if len(x.ParentAttributes) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"parentAttributes\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.ParentAttributes {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.ParentAttributes[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"parentAttributes\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.ParentAttributes {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.ParentAttributes[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -1842,164 +1808,140 @@ func (x *Header) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Version != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"version\":"
-			out.RawString(prefix)
-			x.Version.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"version\":"
+		out.RawString(prefix)
+		x.Version.MarshalEasyJSON(out)
+	}
+	{
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"containerID\":"
+		out.RawString(prefix)
+		x.ContainerId.MarshalEasyJSON(out)
+	}
+	{
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"ownerID\":"
+		out.RawString(prefix)
+		x.OwnerId.MarshalEasyJSON(out)
+	}
+	{
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"creationEpoch\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.CreationEpoch, 10)
+		out.RawByte('"')
+	}
+	{
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"payloadLength\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.PayloadLength, 10)
+		out.RawByte('"')
+	}
+	{
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"payloadHash\":"
+		out.RawString(prefix)
+		x.PayloadHash.MarshalEasyJSON(out)
+	}
+	{
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"objectType\":"
+		out.RawString(prefix)
+		v := int32(x.ObjectType)
+		if vv, ok := ObjectType_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	{
-		if x.ContainerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"containerID\":"
-			out.RawString(prefix)
-			x.ContainerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"homomorphicHash\":"
+		out.RawString(prefix)
+		x.HomomorphicHash.MarshalEasyJSON(out)
 	}
 	{
-		if x.OwnerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"ownerID\":"
-			out.RawString(prefix)
-			x.OwnerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"sessionToken\":"
+		out.RawString(prefix)
+		x.SessionToken.MarshalEasyJSON(out)
 	}
 	{
-		if x.CreationEpoch != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"creationEpoch\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.CreationEpoch, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"attributes\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Attributes {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Attributes[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	{
-		if x.PayloadLength != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"payloadLength\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.PayloadLength, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"split\":"
+		out.RawString(prefix)
+		x.Split.MarshalEasyJSON(out)
 	}
 	{
-		if x.PayloadHash != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"payloadHash\":"
-			out.RawString(prefix)
-			x.PayloadHash.MarshalEasyJSON(out)
-		}
-	}
-	{
-		if x.ObjectType != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"objectType\":"
-			out.RawString(prefix)
-			v := int32(x.ObjectType)
-			if vv, ok := ObjectType_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
-		}
-	}
-	{
-		if x.HomomorphicHash != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"homomorphicHash\":"
-			out.RawString(prefix)
-			x.HomomorphicHash.MarshalEasyJSON(out)
-		}
-	}
-	{
-		if x.SessionToken != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"sessionToken\":"
-			out.RawString(prefix)
-			x.SessionToken.MarshalEasyJSON(out)
-		}
-	}
-	{
-		if len(x.Attributes) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"attributes\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Attributes {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Attributes[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
-		}
-	}
-	{
-		if x.Split != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"split\":"
-			out.RawString(prefix)
-			x.Split.MarshalEasyJSON(out)
-		}
-	}
-	{
-		if x.Ec != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"ec\":"
-			out.RawString(prefix)
-			x.Ec.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"ec\":"
+		out.RawString(prefix)
+		x.Ec.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2310,51 +2252,47 @@ func (x *Object) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.ObjectId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"objectID\":"
-			out.RawString(prefix)
-			x.ObjectId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"objectID\":"
+		out.RawString(prefix)
+		x.ObjectId.MarshalEasyJSON(out)
 	}
 	{
-		if x.Signature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"signature\":"
-			out.RawString(prefix)
-			x.Signature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"signature\":"
+		out.RawString(prefix)
+		x.Signature.MarshalEasyJSON(out)
 	}
 	{
-		if x.Header != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"header\":"
-			out.RawString(prefix)
-			x.Header.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"header\":"
+		out.RawString(prefix)
+		x.Header.MarshalEasyJSON(out)
 	}
 	{
-		if len(x.Payload) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"payload\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"payload\":"
+		out.RawString(prefix)
+		if x.Payload != nil {
 			out.Base64Bytes(x.Payload)
+		} else {
+			out.String("")
 		}
 	}
 	out.RawByte('}')
@@ -2550,40 +2488,38 @@ func (x *SplitInfo) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.SplitId) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"splitId\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"splitId\":"
+		out.RawString(prefix)
+		if x.SplitId != nil {
 			out.Base64Bytes(x.SplitId)
+		} else {
+			out.String("")
 		}
 	}
 	{
-		if x.LastPart != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"lastPart\":"
-			out.RawString(prefix)
-			x.LastPart.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"lastPart\":"
+		out.RawString(prefix)
+		x.LastPart.MarshalEasyJSON(out)
 	}
 	{
-		if x.Link != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"link\":"
-			out.RawString(prefix)
-			x.Link.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"link\":"
+		out.RawString(prefix)
+		x.Link.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2768,40 +2704,34 @@ func (x *ECInfo_Chunk) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Id != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"id\":"
-			out.RawString(prefix)
-			x.Id.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"id\":"
+		out.RawString(prefix)
+		x.Id.MarshalEasyJSON(out)
 	}
 	{
-		if x.Index != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"index\":"
-			out.RawString(prefix)
-			out.Uint32(x.Index)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"index\":"
+		out.RawString(prefix)
+		out.Uint32(x.Index)
 	}
 	{
-		if x.Total != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"total\":"
-			out.RawString(prefix)
-			out.Uint32(x.Total)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"total\":"
+		out.RawString(prefix)
+		out.Uint32(x.Total)
 	}
 	out.RawByte('}')
 }
@@ -2964,23 +2894,21 @@ func (x *ECInfo) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Chunks) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"chunks\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Chunks {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Chunks[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"chunks\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Chunks {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Chunks[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
diff --git a/refs/grpc/types_frostfs.pb.go b/refs/grpc/types_frostfs.pb.go
index 3ed647c..5a16f8e 100644
--- a/refs/grpc/types_frostfs.pb.go
+++ b/refs/grpc/types_frostfs.pb.go
@@ -193,28 +193,24 @@ func (x *Address) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.ContainerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"containerID\":"
-			out.RawString(prefix)
-			x.ContainerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"containerID\":"
+		out.RawString(prefix)
+		x.ContainerId.MarshalEasyJSON(out)
 	}
 	{
-		if x.ObjectId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"objectID\":"
-			out.RawString(prefix)
-			x.ObjectId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"objectID\":"
+		out.RawString(prefix)
+		x.ObjectId.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -350,15 +346,17 @@ func (x *ObjectID) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Value) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"value\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"value\":"
+		out.RawString(prefix)
+		if x.Value != nil {
 			out.Base64Bytes(x.Value)
+		} else {
+			out.String("")
 		}
 	}
 	out.RawByte('}')
@@ -487,15 +485,17 @@ func (x *ContainerID) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Value) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"value\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"value\":"
+		out.RawString(prefix)
+		if x.Value != nil {
 			out.Base64Bytes(x.Value)
+		} else {
+			out.String("")
 		}
 	}
 	out.RawByte('}')
@@ -624,15 +624,17 @@ func (x *OwnerID) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Value) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"value\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"value\":"
+		out.RawString(prefix)
+		if x.Value != nil {
 			out.Base64Bytes(x.Value)
+		} else {
+			out.String("")
 		}
 	}
 	out.RawByte('}')
@@ -781,28 +783,24 @@ func (x *Version) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Major != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"major\":"
-			out.RawString(prefix)
-			out.Uint32(x.Major)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"major\":"
+		out.RawString(prefix)
+		out.Uint32(x.Major)
 	}
 	{
-		if x.Minor != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"minor\":"
-			out.RawString(prefix)
-			out.Uint32(x.Minor)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"minor\":"
+		out.RawString(prefix)
+		out.Uint32(x.Minor)
 	}
 	out.RawByte('}')
 }
@@ -992,44 +990,46 @@ func (x *Signature) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Key) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"key\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"key\":"
+		out.RawString(prefix)
+		if x.Key != nil {
 			out.Base64Bytes(x.Key)
+		} else {
+			out.String("")
 		}
 	}
 	{
-		if len(x.Sign) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"signature\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"signature\":"
+		out.RawString(prefix)
+		if x.Sign != nil {
 			out.Base64Bytes(x.Sign)
+		} else {
+			out.String("")
 		}
 	}
 	{
-		if x.Scheme != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"scheme\":"
-			out.RawString(prefix)
-			v := int32(x.Scheme)
-			if vv, ok := SignatureScheme_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"scheme\":"
+		out.RawString(prefix)
+		v := int32(x.Scheme)
+		if vv, ok := SignatureScheme_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	out.RawByte('}')
@@ -1206,27 +1206,31 @@ func (x *SignatureRFC6979) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Key) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"key\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"key\":"
+		out.RawString(prefix)
+		if x.Key != nil {
 			out.Base64Bytes(x.Key)
+		} else {
+			out.String("")
 		}
 	}
 	{
-		if len(x.Sign) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"signature\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"signature\":"
+		out.RawString(prefix)
+		if x.Sign != nil {
 			out.Base64Bytes(x.Sign)
+		} else {
+			out.String("")
 		}
 	}
 	out.RawByte('}')
@@ -1381,32 +1385,32 @@ func (x *Checksum) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Type != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"type\":"
-			out.RawString(prefix)
-			v := int32(x.Type)
-			if vv, ok := ChecksumType_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"type\":"
+		out.RawString(prefix)
+		v := int32(x.Type)
+		if vv, ok := ChecksumType_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	{
-		if len(x.Sum) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"sum\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"sum\":"
+		out.RawString(prefix)
+		if x.Sum != nil {
 			out.Base64Bytes(x.Sum)
+		} else {
+			out.String("")
 		}
 	}
 	out.RawByte('}')
diff --git a/session/grpc/service_frostfs.pb.go b/session/grpc/service_frostfs.pb.go
index c71325a..6d3ea9f 100644
--- a/session/grpc/service_frostfs.pb.go
+++ b/session/grpc/service_frostfs.pb.go
@@ -121,30 +121,26 @@ func (x *CreateRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.OwnerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"ownerId\":"
-			out.RawString(prefix)
-			x.OwnerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"ownerId\":"
+		out.RawString(prefix)
+		x.OwnerId.MarshalEasyJSON(out)
 	}
 	{
-		if x.Expiration != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"expiration\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Expiration, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"expiration\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Expiration, 10)
+		out.RawByte('"')
 	}
 	out.RawByte('}')
 }
@@ -354,40 +350,34 @@ func (x *CreateRequest) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -550,27 +540,31 @@ func (x *CreateResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Id) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"id\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"id\":"
+		out.RawString(prefix)
+		if x.Id != nil {
 			out.Base64Bytes(x.Id)
+		} else {
+			out.String("")
 		}
 	}
 	{
-		if len(x.SessionKey) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"sessionKey\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"sessionKey\":"
+		out.RawString(prefix)
+		if x.SessionKey != nil {
 			out.Base64Bytes(x.SessionKey)
+		} else {
+			out.String("")
 		}
 	}
 	out.RawByte('}')
@@ -772,40 +766,34 @@ func (x *CreateResponse) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaHeader\":"
-			out.RawString(prefix)
-			x.MetaHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaHeader\":"
+		out.RawString(prefix)
+		x.MetaHeader.MarshalEasyJSON(out)
 	}
 	{
-		if x.VerifyHeader != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verifyHeader\":"
-			out.RawString(prefix)
-			x.VerifyHeader.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"verifyHeader\":"
+		out.RawString(prefix)
+		x.VerifyHeader.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
diff --git a/session/grpc/types_frostfs.pb.go b/session/grpc/types_frostfs.pb.go
index e18c1ab..e9f3b42 100644
--- a/session/grpc/types_frostfs.pb.go
+++ b/session/grpc/types_frostfs.pb.go
@@ -182,35 +182,31 @@ func (x *ObjectSessionContext_Target) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Container != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"container\":"
-			out.RawString(prefix)
-			x.Container.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"container\":"
+		out.RawString(prefix)
+		x.Container.MarshalEasyJSON(out)
 	}
 	{
-		if len(x.Objects) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"objects\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Objects {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Objects[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"objects\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Objects {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Objects[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
@@ -376,33 +372,29 @@ func (x *ObjectSessionContext) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Verb != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verb\":"
-			out.RawString(prefix)
-			v := int32(x.Verb)
-			if vv, ok := ObjectSessionContext_Verb_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"verb\":"
+		out.RawString(prefix)
+		v := int32(x.Verb)
+		if vv, ok := ObjectSessionContext_Verb_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	{
-		if x.Target != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"target\":"
-			out.RawString(prefix)
-			x.Target.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"target\":"
+		out.RawString(prefix)
+		x.Target.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -634,45 +626,39 @@ func (x *ContainerSessionContext) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Verb != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"verb\":"
-			out.RawString(prefix)
-			v := int32(x.Verb)
-			if vv, ok := ContainerSessionContext_Verb_name[v]; ok {
-				out.String(vv)
-			} else {
-				out.Int32(v)
-			}
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"verb\":"
+		out.RawString(prefix)
+		v := int32(x.Verb)
+		if vv, ok := ContainerSessionContext_Verb_name[v]; ok {
+			out.String(vv)
+		} else {
+			out.Int32(v)
 		}
 	}
 	{
-		if x.Wildcard {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"wildcard\":"
-			out.RawString(prefix)
-			out.Bool(x.Wildcard)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"wildcard\":"
+		out.RawString(prefix)
+		out.Bool(x.Wildcard)
 	}
 	{
-		if x.ContainerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"containerID\":"
-			out.RawString(prefix)
-			x.ContainerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"containerID\":"
+		out.RawString(prefix)
+		x.ContainerId.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -869,46 +855,40 @@ func (x *SessionToken_Body_TokenLifetime) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Exp != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"exp\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Exp, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"exp\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Exp, 10)
+		out.RawByte('"')
 	}
 	{
-		if x.Nbf != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"nbf\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Nbf, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"nbf\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Nbf, 10)
+		out.RawByte('"')
 	}
 	{
-		if x.Iat != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"iat\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Iat, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"iat\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Iat, 10)
+		out.RawByte('"')
 	}
 	out.RawByte('}')
 }
@@ -1202,79 +1182,75 @@ func (x *SessionToken_Body) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Id) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"id\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"id\":"
+		out.RawString(prefix)
+		if x.Id != nil {
 			out.Base64Bytes(x.Id)
+		} else {
+			out.String("")
 		}
 	}
 	{
-		if x.OwnerId != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"ownerID\":"
-			out.RawString(prefix)
-			x.OwnerId.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"ownerID\":"
+		out.RawString(prefix)
+		x.OwnerId.MarshalEasyJSON(out)
 	}
 	{
-		if x.Lifetime != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"lifetime\":"
-			out.RawString(prefix)
-			x.Lifetime.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"lifetime\":"
+		out.RawString(prefix)
+		x.Lifetime.MarshalEasyJSON(out)
 	}
 	{
-		if len(x.SessionKey) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"sessionKey\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"sessionKey\":"
+		out.RawString(prefix)
+		if x.SessionKey != nil {
 			out.Base64Bytes(x.SessionKey)
+		} else {
+			out.String("")
 		}
 	}
 	switch xx := x.Context.(type) {
 	case *SessionToken_Body_Object:
 		{
-			if xx.Object != nil {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"object\":"
-				out.RawString(prefix)
-				xx.Object.MarshalEasyJSON(out)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
 			}
+			const prefix string = "\"object\":"
+			out.RawString(prefix)
+			xx.Object.MarshalEasyJSON(out)
 		}
 	case *SessionToken_Body_Container:
 		{
-			if xx.Container != nil {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"container\":"
-				out.RawString(prefix)
-				xx.Container.MarshalEasyJSON(out)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
 			}
+			const prefix string = "\"container\":"
+			out.RawString(prefix)
+			xx.Container.MarshalEasyJSON(out)
 		}
 	}
 	out.RawByte('}')
@@ -1483,28 +1459,24 @@ func (x *SessionToken) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Body != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"body\":"
-			out.RawString(prefix)
-			x.Body.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"body\":"
+		out.RawString(prefix)
+		x.Body.MarshalEasyJSON(out)
 	}
 	{
-		if x.Signature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"signature\":"
-			out.RawString(prefix)
-			x.Signature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"signature\":"
+		out.RawString(prefix)
+		x.Signature.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -1660,28 +1632,24 @@ func (x *XHeader) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.Key) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"key\":"
-			out.RawString(prefix)
-			out.String(x.Key)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"key\":"
+		out.RawString(prefix)
+		out.String(x.Key)
 	}
 	{
-		if len(x.Value) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"value\":"
-			out.RawString(prefix)
-			out.String(x.Value)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"value\":"
+		out.RawString(prefix)
+		out.String(x.Value)
 	}
 	out.RawByte('}')
 }
@@ -1973,111 +1941,95 @@ func (x *RequestMetaHeader) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Version != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"version\":"
-			out.RawString(prefix)
-			x.Version.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"version\":"
+		out.RawString(prefix)
+		x.Version.MarshalEasyJSON(out)
 	}
 	{
-		if x.Epoch != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"epoch\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Epoch, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"epoch\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Epoch, 10)
+		out.RawByte('"')
 	}
 	{
-		if x.Ttl != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"ttl\":"
-			out.RawString(prefix)
-			out.Uint32(x.Ttl)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"ttl\":"
+		out.RawString(prefix)
+		out.Uint32(x.Ttl)
 	}
 	{
-		if len(x.XHeaders) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"xHeaders\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.XHeaders {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.XHeaders[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"xHeaders\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.XHeaders {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.XHeaders[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	{
-		if x.SessionToken != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"sessionToken\":"
-			out.RawString(prefix)
-			x.SessionToken.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"sessionToken\":"
+		out.RawString(prefix)
+		x.SessionToken.MarshalEasyJSON(out)
 	}
 	{
-		if x.BearerToken != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"bearerToken\":"
-			out.RawString(prefix)
-			x.BearerToken.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"bearerToken\":"
+		out.RawString(prefix)
+		x.BearerToken.MarshalEasyJSON(out)
 	}
 	{
-		if x.Origin != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"origin\":"
-			out.RawString(prefix)
-			x.Origin.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"origin\":"
+		out.RawString(prefix)
+		x.Origin.MarshalEasyJSON(out)
 	}
 	{
-		if x.MagicNumber != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"magicNumber\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.MagicNumber, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"magicNumber\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.MagicNumber, 10)
+		out.RawByte('"')
 	}
 	out.RawByte('}')
 }
@@ -2398,85 +2350,73 @@ func (x *ResponseMetaHeader) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Version != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"version\":"
-			out.RawString(prefix)
-			x.Version.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"version\":"
+		out.RawString(prefix)
+		x.Version.MarshalEasyJSON(out)
 	}
 	{
-		if x.Epoch != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"epoch\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Epoch, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"epoch\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Epoch, 10)
+		out.RawByte('"')
 	}
 	{
-		if x.Ttl != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"ttl\":"
-			out.RawString(prefix)
-			out.Uint32(x.Ttl)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"ttl\":"
+		out.RawString(prefix)
+		out.Uint32(x.Ttl)
 	}
 	{
-		if len(x.XHeaders) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"xHeaders\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.XHeaders {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.XHeaders[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"xHeaders\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.XHeaders {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.XHeaders[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	{
-		if x.Origin != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"origin\":"
-			out.RawString(prefix)
-			x.Origin.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"origin\":"
+		out.RawString(prefix)
+		x.Origin.MarshalEasyJSON(out)
 	}
 	{
-		if x.Status != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"status\":"
-			out.RawString(prefix)
-			x.Status.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"status\":"
+		out.RawString(prefix)
+		x.Status.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -2733,52 +2673,44 @@ func (x *RequestVerificationHeader) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.BodySignature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"bodySignature\":"
-			out.RawString(prefix)
-			x.BodySignature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"bodySignature\":"
+		out.RawString(prefix)
+		x.BodySignature.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaSignature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaSignature\":"
-			out.RawString(prefix)
-			x.MetaSignature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaSignature\":"
+		out.RawString(prefix)
+		x.MetaSignature.MarshalEasyJSON(out)
 	}
 	{
-		if x.OriginSignature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"originSignature\":"
-			out.RawString(prefix)
-			x.OriginSignature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"originSignature\":"
+		out.RawString(prefix)
+		x.OriginSignature.MarshalEasyJSON(out)
 	}
 	{
-		if x.Origin != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"origin\":"
-			out.RawString(prefix)
-			x.Origin.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"origin\":"
+		out.RawString(prefix)
+		x.Origin.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
@@ -3000,52 +2932,44 @@ func (x *ResponseVerificationHeader) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.BodySignature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"bodySignature\":"
-			out.RawString(prefix)
-			x.BodySignature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"bodySignature\":"
+		out.RawString(prefix)
+		x.BodySignature.MarshalEasyJSON(out)
 	}
 	{
-		if x.MetaSignature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"metaSignature\":"
-			out.RawString(prefix)
-			x.MetaSignature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"metaSignature\":"
+		out.RawString(prefix)
+		x.MetaSignature.MarshalEasyJSON(out)
 	}
 	{
-		if x.OriginSignature != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"originSignature\":"
-			out.RawString(prefix)
-			x.OriginSignature.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"originSignature\":"
+		out.RawString(prefix)
+		x.OriginSignature.MarshalEasyJSON(out)
 	}
 	{
-		if x.Origin != nil {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"origin\":"
-			out.RawString(prefix)
-			x.Origin.MarshalEasyJSON(out)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"origin\":"
+		out.RawString(prefix)
+		x.Origin.MarshalEasyJSON(out)
 	}
 	out.RawByte('}')
 }
diff --git a/status/grpc/types_frostfs.pb.go b/status/grpc/types_frostfs.pb.go
index 609fc03..1d8b477 100644
--- a/status/grpc/types_frostfs.pb.go
+++ b/status/grpc/types_frostfs.pb.go
@@ -371,27 +371,27 @@ func (x *Status_Detail) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Id != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"id\":"
-			out.RawString(prefix)
-			out.Uint32(x.Id)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"id\":"
+		out.RawString(prefix)
+		out.Uint32(x.Id)
 	}
 	{
-		if len(x.Value) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"value\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"value\":"
+		out.RawString(prefix)
+		if x.Value != nil {
 			out.Base64Bytes(x.Value)
+		} else {
+			out.String("")
 		}
 	}
 	out.RawByte('}')
@@ -580,47 +580,41 @@ func (x *Status) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.Code != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"code\":"
-			out.RawString(prefix)
-			out.Uint32(x.Code)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"code\":"
+		out.RawString(prefix)
+		out.Uint32(x.Code)
 	}
 	{
-		if len(x.Message) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"message\":"
-			out.RawString(prefix)
-			out.String(x.Message)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"message\":"
+		out.RawString(prefix)
+		out.String(x.Message)
 	}
 	{
-		if len(x.Details) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"details\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Details {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Details[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"details\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Details {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Details[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
diff --git a/tombstone/grpc/types_frostfs.pb.go b/tombstone/grpc/types_frostfs.pb.go
index e5b67d5..acb1836 100644
--- a/tombstone/grpc/types_frostfs.pb.go
+++ b/tombstone/grpc/types_frostfs.pb.go
@@ -144,49 +144,47 @@ func (x *Tombstone) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.ExpirationEpoch != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"expirationEpoch\":"
-			out.RawString(prefix)
-			out.RawByte('"')
-			out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.ExpirationEpoch, 10)
-			out.RawByte('"')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"expirationEpoch\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.ExpirationEpoch, 10)
+		out.RawByte('"')
 	}
 	{
-		if len(x.SplitId) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"splitID\":"
-			out.RawString(prefix)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
+		}
+		const prefix string = "\"splitID\":"
+		out.RawString(prefix)
+		if x.SplitId != nil {
 			out.Base64Bytes(x.SplitId)
+		} else {
+			out.String("")
 		}
 	}
 	{
-		if len(x.Members) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"members\":"
-			out.RawString(prefix)
-			out.RawByte('[')
-			for i := range x.Members {
-				if i != 0 {
-					out.RawByte(',')
-				}
-				x.Members[i].MarshalEasyJSON(out)
-			}
-			out.RawByte(']')
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"members\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.Members {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			x.Members[i].MarshalEasyJSON(out)
+		}
+		out.RawByte(']')
 	}
 	out.RawByte('}')
 }
diff --git a/util/proto/marshal_test.go b/util/proto/marshal_test.go
index 8b717be..5498cf9 100644
--- a/util/proto/marshal_test.go
+++ b/util/proto/marshal_test.go
@@ -26,11 +26,37 @@ func nonZero[T protoInt]() T {
 
 func TestStableMarshalSingle(t *testing.T) {
 	t.Run("empty", func(t *testing.T) {
-		input := &generated.Primitives{}
-		require.Zero(t, input.StableSize())
+		t.Run("proto", func(t *testing.T) {
+			input := &generated.Primitives{}
+			require.Zero(t, input.StableSize())
 
-		r := input.MarshalProtobuf(nil)
-		require.Empty(t, r)
+			r := input.MarshalProtobuf(nil)
+			require.Empty(t, r)
+		})
+		t.Run("json", func(t *testing.T) {
+			input := &generated.Primitives{}
+			r, err := input.MarshalJSON()
+			require.NoError(t, err)
+			require.NotEmpty(t, r)
+
+			var actual test.Primitives
+			require.NoError(t, protojson.Unmarshal(r, &actual))
+
+			t.Run("protojson compatibility", func(t *testing.T) {
+				data, err := protojson.MarshalOptions{EmitUnpopulated: true}.Marshal(&actual)
+				require.NoError(t, err)
+				require.JSONEq(t, string(data), string(r))
+			})
+
+			var actualFrostfs generated.Primitives
+			require.NoError(t, actualFrostfs.UnmarshalJSON(r))
+			if len(actualFrostfs.FieldA) == 0 {
+				actualFrostfs.FieldA = nil
+			}
+			require.Equal(t, input, &actualFrostfs)
+
+			primitivesEqual(t, input, &actual)
+		})
 	})
 
 	marshalCases := []struct {
@@ -77,13 +103,16 @@ func TestStableMarshalSingle(t *testing.T) {
 				require.NoError(t, protojson.Unmarshal(r, &actual))
 
 				t.Run("protojson compatibility", func(t *testing.T) {
-					data, err := protojson.Marshal(&actual)
+					data, err := protojson.MarshalOptions{EmitUnpopulated: true}.Marshal(&actual)
 					require.NoError(t, err)
 					require.JSONEq(t, string(data), string(r))
 				})
 
 				var actualFrostfs generated.Primitives
 				require.NoError(t, actualFrostfs.UnmarshalJSON(r))
+				if len(actualFrostfs.FieldA) == 0 {
+					actualFrostfs.FieldA = nil
+				}
 				require.Equal(t, tc.input, &actualFrostfs)
 
 				primitivesEqual(t, tc.input, &actual)
@@ -94,7 +123,10 @@ func TestStableMarshalSingle(t *testing.T) {
 
 func primitivesEqual(t *testing.T, a *generated.Primitives, b *test.Primitives) {
 	// Compare each field directly, because proto-generated code has private fields.
-	require.Equal(t, a.FieldA, b.FieldA)
+	require.Equal(t, len(a.FieldA), len(b.FieldA))
+	if len(a.FieldA) != 0 {
+		require.Equal(t, a.FieldA, b.FieldA)
+	}
 	require.Equal(t, a.FieldB, b.FieldB)
 	require.Equal(t, a.FieldC, b.FieldC)
 	require.Equal(t, a.FieldD, b.FieldD)
diff --git a/util/proto/test/custom/test_frostfs.pb.go b/util/proto/test/custom/test_frostfs.pb.go
index 3804e46..f979038 100644
--- a/util/proto/test/custom/test_frostfs.pb.go
+++ b/util/proto/test/custom/test_frostfs.pb.go
@@ -133,16 +133,14 @@ func (x *Primitives_Aux) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.InnerField != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"innerField\":"
-			out.RawString(prefix)
-			out.Uint32(x.InnerField)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"innerField\":"
+		out.RawString(prefix)
+		out.Uint32(x.InnerField)
 	}
 	out.RawByte('}')
 }
@@ -579,187 +577,167 @@ func (x *Primitives) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.FieldA) != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"fieldA\":"
-			out.RawString(prefix)
+		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 len(x.FieldB) != 0 {
-			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 = "\"fieldB\":"
+		out.RawString(prefix)
+		out.String(x.FieldB)
 	}
 	{
-		if x.FieldC {
-			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 = "\"fieldC\":"
+		out.RawString(prefix)
+		out.Bool(x.FieldC)
 	}
 	{
-		if x.FieldD != 0 {
-			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 = "\"fieldD\":"
+		out.RawString(prefix)
+		out.Int32(x.FieldD)
 	}
 	{
-		if x.FieldE != 0 {
-			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 = "\"fieldE\":"
+		out.RawString(prefix)
+		out.Uint32(x.FieldE)
 	}
 	{
-		if x.FieldF != 0 {
-			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 = "\"fieldF\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendInt(out.Buffer.Buf, x.FieldF, 10)
+		out.RawByte('"')
 	}
 	{
-		if x.FieldG != 0 {
-			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 = "\"fieldG\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.FieldG, 10)
+		out.RawByte('"')
 	}
 	{
-		if x.FieldI != 0 {
-			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 = "\"fieldI\":"
+		out.RawString(prefix)
+		out.RawByte('"')
+		out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.FieldI, 10)
+		out.RawByte('"')
 	}
 	{
-		if x.FieldJ != 0 {
-			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 = "\"fieldJ\":"
+		out.RawString(prefix)
+		out.Float64(x.FieldJ)
 	}
 	{
-		if x.FieldK != 0 {
-			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 = "\"fieldK\":"
+		out.RawString(prefix)
+		out.Uint32(x.FieldK)
 	}
 	{
-		if x.FieldH != 0 {
-			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)
-			}
+		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 len(xx.FieldMa) != 0 {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"fieldMa\":"
-				out.RawString(prefix)
+			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 xx.FieldMe != 0 {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"fieldMe\":"
-				out.RawString(prefix)
-				out.Uint32(xx.FieldMe)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
 			}
+			const prefix string = "\"fieldMe\":"
+			out.RawString(prefix)
+			out.Uint32(xx.FieldMe)
 		}
 	case *Primitives_FieldAux:
 		{
-			if xx.FieldAux != nil {
-				if !first {
-					out.RawByte(',')
-				} else {
-					first = false
-				}
-				const prefix string = "\"fieldAux\":"
-				out.RawString(prefix)
-				xx.FieldAux.MarshalEasyJSON(out)
+			if !first {
+				out.RawByte(',')
+			} else {
+				first = false
 			}
+			const prefix string = "\"fieldAux\":"
+			out.RawString(prefix)
+			xx.FieldAux.MarshalEasyJSON(out)
 		}
 	}
 	out.RawByte('}')
@@ -1067,16 +1045,14 @@ func (x *RepPrimitives_Aux) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if x.InnerField != 0 {
-			if !first {
-				out.RawByte(',')
-			} else {
-				first = false
-			}
-			const prefix string = "\"innerField\":"
-			out.RawString(prefix)
-			out.Uint32(x.InnerField)
+		if !first {
+			out.RawByte(',')
+		} else {
+			first = false
 		}
+		const prefix string = "\"innerField\":"
+		out.RawString(prefix)
+		out.Uint32(x.InnerField)
 	}
 	out.RawByte('}')
 }
@@ -1365,162 +1341,150 @@ func (x *RepPrimitives) MarshalEasyJSON(out *jwriter.Writer) {
 	first := true
 	out.RawByte('{')
 	{
-		if len(x.FieldA) != 0 {
-			if !first {
+		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(',')
-			} 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(']')
 		}
+		out.RawByte(']')
 	}
 	{
-		if len(x.FieldB) != 0 {
-			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 = "\"fieldB\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.FieldB {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			out.String(x.FieldB[i])
+		}
+		out.RawByte(']')
 	}
 	{
-		if len(x.FieldC) != 0 {
-			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 = "\"fieldC\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.FieldC {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			out.Int32(x.FieldC[i])
+		}
+		out.RawByte(']')
 	}
 	{
-		if len(x.FieldD) != 0 {
-			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 = "\"fieldD\":"
+		out.RawString(prefix)
+		out.RawByte('[')
+		for i := range x.FieldD {
+			if i != 0 {
+				out.RawByte(',')
+			}
+			out.Uint32(x.FieldD[i])
+		}
+		out.RawByte(']')
 	}
 	{
-		if len(x.FieldE) != 0 {
-			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 = "\"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 len(x.FieldF) != 0 {
-			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 = "\"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 len(x.FieldFu) != 0 {
-			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 = "\"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 len(x.FieldAux) != 0 {
-			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(']')
+		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('}')
 }
diff --git a/util/protogen/internalgengo/json.go b/util/protogen/internalgengo/json.go
index 3267955..15facfd 100644
--- a/util/protogen/internalgengo/json.go
+++ b/util/protogen/internalgengo/json.go
@@ -192,14 +192,17 @@ func emitJSONFieldWrite(g *protogen.GeneratedFile, f *protogen.Field, name strin
 
 	selector := name + "." + f.GoName
 
-	isNotDefault := notNil
-	if f.Desc.IsList() {
-		isNotDefault = notEmpty
-	} else if f.Desc.Kind() != protoreflect.MessageKind {
-		_, isNotDefault = easyprotoKindInfo(f.Desc.Kind())
-	}
-	g.P("if ", isNotDefault(selector), "{")
-	defer g.P("}")
+	// This code is responsible for ignoring default values.
+	// We will restore it after having parametrized JSON marshaling.
+	//
+	// isNotDefault := notNil
+	// if f.Desc.IsList() {
+	// 	isNotDefault = notEmpty
+	// } else if f.Desc.Kind() != protoreflect.MessageKind {
+	// 	_, isNotDefault = easyprotoKindInfo(f.Desc.Kind())
+	// }
+	// g.P("if ", isNotDefault(selector), "{")
+	// defer g.P("}")
 
 	g.P("if !first { out.RawByte(','); } else { first = false; }")
 	g.P("const prefix string = ", `"\"`, fieldJSONName(f), `\":"`)
@@ -247,7 +250,10 @@ func emitJSONFieldWrite(g *protogen.GeneratedFile, f *protogen.Field, name strin
 	case protoreflect.StringKind:
 		template = "out.String(%s)"
 	case protoreflect.BytesKind:
-		template = "out.Base64Bytes(%s)"
+		g.P("if ", selector, "!= nil {")
+		g.P("out.Base64Bytes(", selector, ")")
+		g.P("} else { out.String(\"\") }")
+		return
 	case protoreflect.MessageKind:
 		template = "%s.MarshalEasyJSON(out)"
 	case protoreflect.GroupKind: