From 6ce73790ea89556327cc77d10ad49f5722aefe9e Mon Sep 17 00:00:00 2001
From: Pavel Pogodaev
Date: Mon, 7 Oct 2024 17:20:25 +0300
Subject: [PATCH] [#276] Merge repo with frostfs-api-go
Signed-off-by: Pavel Pogodaev
---
.gitattributes | 3 +
Makefile | 65 +
accounting/decimal.go | 4 +-
accounting/decimal_test.go | 2 +-
accounting/doc.go | 2 +-
ape/chain.go | 2 +-
ape/chain_target.go | 2 +-
ape/chain_target_test.go | 2 +-
ape/chain_test.go | 2 +-
ape/grpc/types_frostfs.pb.go | 424 +
ape/grpc/types_frostfs_fuzz.go | 45 +
ape/grpc/types_frostfs_test.go | 31 +
api/accounting/accounting.go | 104 +
api/accounting/convert.go | 178 +
api/accounting/grpc/service_frostfs.pb.go | 768 ++
api/accounting/grpc/service_frostfs_fuzz.go | 45 +
api/accounting/grpc/service_frostfs_test.go | 31 +
api/accounting/grpc/service_grpc.pb.go | 119 +
api/accounting/grpc/types_frostfs.pb.go | 204 +
api/accounting/grpc/types_frostfs_fuzz.go | 26 +
api/accounting/grpc/types_frostfs_test.go | 21 +
api/accounting/json.go | 14 +
api/accounting/marshal.go | 104 +
api/accounting/message_test.go | 19 +
api/accounting/test/generate.go | 64 +
api/acl/bench_test.go | 51 +
api/acl/convert.go | 592 ++
api/acl/filters.go | 33 +
api/acl/grpc/types_frostfs.pb.go | 2184 ++++
api/acl/grpc/types_frostfs_fuzz.go | 64 +
api/acl/grpc/types_frostfs_test.go | 41 +
api/acl/json.go | 70 +
api/acl/marshal.go | 350 +
api/acl/message_test.go | 21 +
api/acl/string.go | 110 +
api/acl/test/generate.go | 144 +
api/acl/types.go | 426 +
api/ape/convert.go | 132 +
api/ape/grpc/types_frostfs.pb.go | 430 +
api/ape/grpc/types_frostfs_fuzz.go | 45 +
api/ape/grpc/types_frostfs_test.go | 31 +
api/ape/json.go | 14 +
api/ape/marshal.go | 92 +
api/ape/message_test.go | 15 +
api/ape/string.go | 18 +
api/ape/test/generate.go | 71 +
api/ape/types.go | 79 +
api/apemanager/convert.go | 358 +
api/apemanager/grpc/service_frostfs.pb.go | 2337 ++++
api/apemanager/grpc/service_frostfs_fuzz.go | 121 +
api/apemanager/grpc/service_frostfs_test.go | 71 +
api/apemanager/grpc/service_grpc.pb.go | 245 +
api/apemanager/marshal.go | 205 +
api/apemanager/message_test.go | 26 +
api/apemanager/status.go | 76 +
api/apemanager/status_test.go | 30 +
api/apemanager/test/generate.go | 143 +
api/apemanager/types.go | 226 +
api/container/attributes.go | 90 +
api/container/attributes_test.go | 59 +
api/container/convert.go | 764 ++
api/container/grpc/service_frostfs.pb.go | 3157 ++++++
api/container/grpc/service_frostfs_fuzz.go | 159 +
api/container/grpc/service_frostfs_test.go | 91 +
api/container/grpc/service_grpc.pb.go | 298 +
api/container/grpc/types_frostfs.pb.go | 554 +
api/container/grpc/types_frostfs_fuzz.go | 26 +
api/container/grpc/types_frostfs_test.go | 21 +
api/container/json.go | 22 +
api/container/marshal.go | 345 +
api/container/message_test.go | 36 +
api/container/status.go | 33 +
api/container/status_test.go | 15 +
api/container/test/generate.go | 240 +
api/container/types.go | 446 +
api/lock/grpc/types_frostfs.pb.go | 171 +
api/lock/grpc/types_frostfs_fuzz.go | 26 +
api/lock/grpc/types_frostfs_test.go | 21 +
api/netmap/convert.go | 916 ++
api/netmap/grpc/service_frostfs.pb.go | 2180 ++++
api/netmap/grpc/service_frostfs_fuzz.go | 121 +
api/netmap/grpc/service_frostfs_test.go | 71 +
api/netmap/grpc/service_grpc.pb.go | 227 +
api/netmap/grpc/types_frostfs.pb.go | 2749 +++++
api/netmap/grpc/types_frostfs_fuzz.go | 159 +
api/netmap/grpc/types_frostfs_test.go | 91 +
api/netmap/json.go | 62 +
api/netmap/marshal.go | 576 +
api/netmap/message_test.go | 32 +
api/netmap/string.go | 68 +
api/netmap/test/generate.go | 335 +
api/netmap/types.go | 783 ++
api/object/attributes.go | 187 +
api/object/attributes_test.go | 89 +
api/object/bench_test.go | 45 +
api/object/convert.go | 2555 +++++
api/object/filters.go | 58 +
api/object/grpc/service_frostfs.pb.go | 9389 +++++++++++++++++
api/object/grpc/service_frostfs_fuzz.go | 387 +
api/object/grpc/service_frostfs_test.go | 211 +
api/object/grpc/service_grpc.pb.go | 1159 ++
api/object/grpc/types_frostfs.pb.go | 2992 ++++++
api/object/grpc/types_frostfs_fuzz.go | 102 +
api/object/grpc/types_frostfs_test.go | 61 +
api/object/json.go | 94 +
api/object/lock.go | 160 +
api/object/lock_test.go | 26 +
api/object/marshal.go | 1428 +++
api/object/message_test.go | 65 +
api/object/status.go | 91 +
api/object/status_test.go | 35 +
api/object/string.go | 55 +
api/object/test/generate.go | 766 ++
api/object/types.go | 1650 +++
api/refs/bench_test.go | 53 +
api/refs/convert.go | 264 +
api/refs/grpc/types_frostfs.pb.go | 1527 +++
api/refs/grpc/types_frostfs_fuzz.go | 159 +
api/refs/grpc/types_frostfs_test.go | 91 +
api/refs/json.go | 62 +
api/refs/marshal.go | 264 +
api/refs/message_test.go | 21 +
api/refs/string.go | 47 +
api/refs/test/generate.go | 127 +
api/refs/types.go | 194 +
api/rpc/accounting.go | 29 +
api/rpc/apemanager.go | 60 +
api/rpc/client/call_options.go | 40 +
api/rpc/client/client.go | 30 +
api/rpc/client/conn.go | 24 +
api/rpc/client/connect.go | 72 +
api/rpc/client/flows.go | 124 +
api/rpc/client/init.go | 69 +
api/rpc/client/options.go | 129 +
api/rpc/client/options_test.go | 197 +
api/rpc/client/stream_wrapper.go | 58 +
api/rpc/client/util.go | 13 +
api/rpc/common.go | 10 +
api/rpc/common/call.go | 75 +
api/rpc/common/call_test.go | 49 +
api/rpc/container.go | 82 +
api/rpc/grpc/init.go | 4 +
api/rpc/message/encoding.go | 40 +
api/rpc/message/message.go | 43 +
api/rpc/message/test/message.go | 126 +
api/rpc/netmap.go | 62 +
api/rpc/object.go | 243 +
api/rpc/session.go | 28 +
api/session/convert.go | 898 ++
api/session/grpc/service_frostfs.pb.go | 866 ++
api/session/grpc/service_frostfs_fuzz.go | 45 +
api/session/grpc/service_frostfs_test.go | 31 +
api/session/grpc/service_grpc.pb.go | 119 +
api/session/grpc/types_frostfs.pb.go | 3049 ++++++
api/session/grpc/types_frostfs_fuzz.go | 159 +
api/session/grpc/types_frostfs_test.go | 91 +
api/session/json.go | 86 +
api/session/marshal.go | 536 +
api/session/message_test.go | 27 +
api/session/status.go | 32 +
api/session/status_test.go | 15 +
api/session/string.go | 47 +
api/session/test/generate.go | 251 +
api/session/types.go | 836 ++
api/session/util.go | 167 +
api/session/xheaders.go | 34 +
api/signature/body.go | 116 +
api/signature/marshaller.go | 26 +
api/signature/sign.go | 122 +
api/signature/sign_test.go | 125 +
api/signature/verify.go | 127 +
api/status/convert.go | 95 +
api/status/details.go | 8 +
api/status/grpc/types_frostfs.pb.go | 694 ++
api/status/grpc/types_frostfs_fuzz.go | 26 +
api/status/grpc/types_frostfs_test.go | 21 +
api/status/marshal.go | 92 +
api/status/message_test.go | 16 +
api/status/status.go | 103 +
api/status/test/codes.go | 28 +
api/status/test/generate.go | 44 +
api/status/types.go | 124 +
api/tombstone/convert.go | 41 +
api/tombstone/grpc/types_frostfs.pb.go | 264 +
api/tombstone/grpc/types_frostfs_fuzz.go | 26 +
api/tombstone/grpc/types_frostfs_test.go | 21 +
api/tombstone/json.go | 14 +
api/tombstone/marshal.go | 56 +
api/tombstone/message_test.go | 15 +
api/tombstone/test/generate.go | 23 +
api/tombstone/types.go | 57 +
api/util/pool/buffer.go | 54 +
api/util/pool/marshal.go | 7 +
api/util/proto/encoding/compat.go | 22 +
api/util/proto/encoding/json.go | 48 +
api/util/proto/encoding/proto.go | 57 +
api/util/proto/marshal.go | 413 +
api/util/proto/marshal_test.go | 247 +
api/util/proto/test/custom/test_frostfs.pb.go | 1687 +++
api/util/proto/test/test.pb.go | 625 ++
api/util/protogen/internalgengo/file.go | 245 +
api/util/protogen/internalgengo/fuzz.go | 69 +
api/util/protogen/internalgengo/getter.go | 14 +
api/util/protogen/internalgengo/json.go | 284 +
api/util/protogen/internalgengo/options.go | 7 +
api/util/protogen/internalgengo/proto.go | 202 +
.../internalgengo/proto_field_type.go | 59 +
.../internalgengo/proto_stable_compat.go | 124 +
api/util/protogen/internalgengo/writer.go | 30 +
api/util/protogen/main.go | 27 +
api/util/signature/data.go | 93 +
api/util/signature/options.go | 77 +
api/util/signature/sign_test.go | 44 +
api/util/signature/walletconnect/sign.go | 142 +
api/util/signature/walletconnect/sign_test.go | 112 +
bearer/bearer.go | 8 +-
bearer/bearer_test.go | 4 +-
checksum/checksum.go | 4 +-
checksum/checksum_test.go | 2 +-
checksum/example_test.go | 2 +-
client/accounting.go | 12 +-
client/apemanager_add_chain.go | 10 +-
client/apemanager_list_chains.go | 10 +-
client/apemanager_remove_chain.go | 10 +-
client/api.go | 6 +-
client/client.go | 8 +-
client/common.go | 12 +-
client/container_delete.go | 12 +-
client/container_get.go | 12 +-
client/container_list.go | 12 +-
client/container_put.go | 12 +-
client/doc.go | 4 +-
client/netmap.go | 10 +-
client/netmap_test.go | 6 +-
client/object_delete.go | 14 +-
client/object_get.go | 14 +-
client/object_hash.go | 14 +-
client/object_patch.go | 12 +-
client/object_patch_test.go | 2 +-
client/object_put.go | 2 +-
client/object_put_raw.go | 12 +-
client/object_put_single.go | 12 +-
client/object_put_transformer.go | 2 +-
client/object_search.go | 14 +-
client/object_search_test.go | 6 +-
client/response.go | 2 +-
client/session.go | 10 +-
client/status/apemanager.go | 4 +-
client/status/common.go | 6 +-
client/status/common_test.go | 2 +-
client/status/container.go | 4 +-
client/status/object.go | 4 +-
client/status/session.go | 4 +-
client/status/success.go | 2 +-
client/status/unrecognized.go | 2 +-
client/status/v2.go | 12 +-
container/container.go | 8 +-
container/container_test.go | 6 +-
container/doc.go | 2 +-
container/id/id.go | 4 +-
container/id/id_test.go | 2 +-
crypto/crypto_test.go | 2 +-
crypto/doc.go | 2 +-
crypto/ecdsa/wallet_connect.go | 2 +-
crypto/signature.go | 4 +-
crypto/signer.go | 2 +-
eacl/enums.go | 2 +-
eacl/enums_test.go | 2 +-
eacl/filter.go | 2 +-
eacl/filter_test.go | 2 +-
eacl/record.go | 2 +-
eacl/record_test.go | 2 +-
eacl/table.go | 4 +-
eacl/table_test.go | 2 +-
eacl/target.go | 2 +-
eacl/target_test.go | 2 +-
go.mod | 11 +-
go.sum | 4 +-
netmap/context.go | 2 +-
netmap/doc.go | 2 +-
netmap/filter.go | 2 +-
netmap/filter_test.go | 2 +-
netmap/helper_test.go | 2 +-
netmap/netmap.go | 4 +-
netmap/netmap_test.go | 2 +-
netmap/network_info.go | 4 +-
netmap/network_info_test.go | 2 +-
netmap/node_info.go | 4 +-
netmap/node_info_test.go | 2 +-
netmap/policy.go | 4 +-
netmap/selector.go | 2 +-
netmap/selector_test.go | 2 +-
netmap/yml_unmarshal.go | 2 +-
object/attribute.go | 2 +-
object/attribute_test.go | 2 +-
object/ecinfo.go | 4 +-
object/erasure_code.go | 4 +-
object/error_test.go | 4 +-
object/fmt.go | 2 +-
object/id/address.go | 4 +-
object/id/address_test.go | 2 +-
object/id/id.go | 4 +-
object/id/id_test.go | 2 +-
object/lock.go | 4 +-
object/object.go | 8 +-
object/object_test.go | 2 +-
object/patch.go | 4 +-
object/patch_test.go | 4 +-
object/range.go | 2 +-
object/range_test.go | 2 +-
object/raw.go | 2 +-
object/raw_test.go | 2 +-
object/search.go | 2 +-
object/search_test.go | 2 +-
object/splitinfo.go | 4 +-
object/splitinfo_test.go | 2 +-
object/tombstone.go | 4 +-
object/tombstone_test.go | 2 +-
object/transformer/transformer.go | 2 +-
object/type.go | 2 +-
object/type_test.go | 2 +-
pool/mock_test.go | 2 +-
pool/tree/client.go | 2 +-
pool/tree/service/service_frostfs.pb.go | 2 +-
pool/tree/service/types_frostfs.pb.go | 2 +-
prepare.sh | 39 +
session/common.go | 4 +-
session/container.go | 6 +-
session/container_test.go | 4 +-
session/doc.go | 2 +-
session/object.go | 6 +-
session/object_test.go | 4 +-
user/doc.go | 2 +-
user/id.go | 4 +-
user/id_test.go | 2 +-
version/version.go | 4 +-
version/version_test.go | 2 +-
337 files changed, 66666 insertions(+), 283 deletions(-)
create mode 100644 ape/grpc/types_frostfs.pb.go
create mode 100644 ape/grpc/types_frostfs_fuzz.go
create mode 100644 ape/grpc/types_frostfs_test.go
create mode 100644 api/accounting/accounting.go
create mode 100644 api/accounting/convert.go
create mode 100644 api/accounting/grpc/service_frostfs.pb.go
create mode 100644 api/accounting/grpc/service_frostfs_fuzz.go
create mode 100644 api/accounting/grpc/service_frostfs_test.go
create mode 100644 api/accounting/grpc/service_grpc.pb.go
create mode 100644 api/accounting/grpc/types_frostfs.pb.go
create mode 100644 api/accounting/grpc/types_frostfs_fuzz.go
create mode 100644 api/accounting/grpc/types_frostfs_test.go
create mode 100644 api/accounting/json.go
create mode 100644 api/accounting/marshal.go
create mode 100644 api/accounting/message_test.go
create mode 100644 api/accounting/test/generate.go
create mode 100644 api/acl/bench_test.go
create mode 100644 api/acl/convert.go
create mode 100644 api/acl/filters.go
create mode 100644 api/acl/grpc/types_frostfs.pb.go
create mode 100644 api/acl/grpc/types_frostfs_fuzz.go
create mode 100644 api/acl/grpc/types_frostfs_test.go
create mode 100644 api/acl/json.go
create mode 100644 api/acl/marshal.go
create mode 100644 api/acl/message_test.go
create mode 100644 api/acl/string.go
create mode 100644 api/acl/test/generate.go
create mode 100644 api/acl/types.go
create mode 100644 api/ape/convert.go
create mode 100644 api/ape/grpc/types_frostfs.pb.go
create mode 100644 api/ape/grpc/types_frostfs_fuzz.go
create mode 100644 api/ape/grpc/types_frostfs_test.go
create mode 100644 api/ape/json.go
create mode 100644 api/ape/marshal.go
create mode 100644 api/ape/message_test.go
create mode 100644 api/ape/string.go
create mode 100644 api/ape/test/generate.go
create mode 100644 api/ape/types.go
create mode 100644 api/apemanager/convert.go
create mode 100644 api/apemanager/grpc/service_frostfs.pb.go
create mode 100644 api/apemanager/grpc/service_frostfs_fuzz.go
create mode 100644 api/apemanager/grpc/service_frostfs_test.go
create mode 100644 api/apemanager/grpc/service_grpc.pb.go
create mode 100644 api/apemanager/marshal.go
create mode 100644 api/apemanager/message_test.go
create mode 100644 api/apemanager/status.go
create mode 100644 api/apemanager/status_test.go
create mode 100644 api/apemanager/test/generate.go
create mode 100644 api/apemanager/types.go
create mode 100644 api/container/attributes.go
create mode 100644 api/container/attributes_test.go
create mode 100644 api/container/convert.go
create mode 100644 api/container/grpc/service_frostfs.pb.go
create mode 100644 api/container/grpc/service_frostfs_fuzz.go
create mode 100644 api/container/grpc/service_frostfs_test.go
create mode 100644 api/container/grpc/service_grpc.pb.go
create mode 100644 api/container/grpc/types_frostfs.pb.go
create mode 100644 api/container/grpc/types_frostfs_fuzz.go
create mode 100644 api/container/grpc/types_frostfs_test.go
create mode 100644 api/container/json.go
create mode 100644 api/container/marshal.go
create mode 100644 api/container/message_test.go
create mode 100644 api/container/status.go
create mode 100644 api/container/status_test.go
create mode 100644 api/container/test/generate.go
create mode 100644 api/container/types.go
create mode 100644 api/lock/grpc/types_frostfs.pb.go
create mode 100644 api/lock/grpc/types_frostfs_fuzz.go
create mode 100644 api/lock/grpc/types_frostfs_test.go
create mode 100644 api/netmap/convert.go
create mode 100644 api/netmap/grpc/service_frostfs.pb.go
create mode 100644 api/netmap/grpc/service_frostfs_fuzz.go
create mode 100644 api/netmap/grpc/service_frostfs_test.go
create mode 100644 api/netmap/grpc/service_grpc.pb.go
create mode 100644 api/netmap/grpc/types_frostfs.pb.go
create mode 100644 api/netmap/grpc/types_frostfs_fuzz.go
create mode 100644 api/netmap/grpc/types_frostfs_test.go
create mode 100644 api/netmap/json.go
create mode 100644 api/netmap/marshal.go
create mode 100644 api/netmap/message_test.go
create mode 100644 api/netmap/string.go
create mode 100644 api/netmap/test/generate.go
create mode 100644 api/netmap/types.go
create mode 100644 api/object/attributes.go
create mode 100644 api/object/attributes_test.go
create mode 100644 api/object/bench_test.go
create mode 100644 api/object/convert.go
create mode 100644 api/object/filters.go
create mode 100644 api/object/grpc/service_frostfs.pb.go
create mode 100644 api/object/grpc/service_frostfs_fuzz.go
create mode 100644 api/object/grpc/service_frostfs_test.go
create mode 100644 api/object/grpc/service_grpc.pb.go
create mode 100644 api/object/grpc/types_frostfs.pb.go
create mode 100644 api/object/grpc/types_frostfs_fuzz.go
create mode 100644 api/object/grpc/types_frostfs_test.go
create mode 100644 api/object/json.go
create mode 100644 api/object/lock.go
create mode 100644 api/object/lock_test.go
create mode 100644 api/object/marshal.go
create mode 100644 api/object/message_test.go
create mode 100644 api/object/status.go
create mode 100644 api/object/status_test.go
create mode 100644 api/object/string.go
create mode 100644 api/object/test/generate.go
create mode 100644 api/object/types.go
create mode 100644 api/refs/bench_test.go
create mode 100644 api/refs/convert.go
create mode 100644 api/refs/grpc/types_frostfs.pb.go
create mode 100644 api/refs/grpc/types_frostfs_fuzz.go
create mode 100644 api/refs/grpc/types_frostfs_test.go
create mode 100644 api/refs/json.go
create mode 100644 api/refs/marshal.go
create mode 100644 api/refs/message_test.go
create mode 100644 api/refs/string.go
create mode 100644 api/refs/test/generate.go
create mode 100644 api/refs/types.go
create mode 100644 api/rpc/accounting.go
create mode 100644 api/rpc/apemanager.go
create mode 100644 api/rpc/client/call_options.go
create mode 100644 api/rpc/client/client.go
create mode 100644 api/rpc/client/conn.go
create mode 100644 api/rpc/client/connect.go
create mode 100644 api/rpc/client/flows.go
create mode 100644 api/rpc/client/init.go
create mode 100644 api/rpc/client/options.go
create mode 100644 api/rpc/client/options_test.go
create mode 100644 api/rpc/client/stream_wrapper.go
create mode 100644 api/rpc/client/util.go
create mode 100644 api/rpc/common.go
create mode 100644 api/rpc/common/call.go
create mode 100644 api/rpc/common/call_test.go
create mode 100644 api/rpc/container.go
create mode 100644 api/rpc/grpc/init.go
create mode 100644 api/rpc/message/encoding.go
create mode 100644 api/rpc/message/message.go
create mode 100644 api/rpc/message/test/message.go
create mode 100644 api/rpc/netmap.go
create mode 100644 api/rpc/object.go
create mode 100644 api/rpc/session.go
create mode 100644 api/session/convert.go
create mode 100644 api/session/grpc/service_frostfs.pb.go
create mode 100644 api/session/grpc/service_frostfs_fuzz.go
create mode 100644 api/session/grpc/service_frostfs_test.go
create mode 100644 api/session/grpc/service_grpc.pb.go
create mode 100644 api/session/grpc/types_frostfs.pb.go
create mode 100644 api/session/grpc/types_frostfs_fuzz.go
create mode 100644 api/session/grpc/types_frostfs_test.go
create mode 100644 api/session/json.go
create mode 100644 api/session/marshal.go
create mode 100644 api/session/message_test.go
create mode 100644 api/session/status.go
create mode 100644 api/session/status_test.go
create mode 100644 api/session/string.go
create mode 100644 api/session/test/generate.go
create mode 100644 api/session/types.go
create mode 100644 api/session/util.go
create mode 100644 api/session/xheaders.go
create mode 100644 api/signature/body.go
create mode 100644 api/signature/marshaller.go
create mode 100644 api/signature/sign.go
create mode 100644 api/signature/sign_test.go
create mode 100644 api/signature/verify.go
create mode 100644 api/status/convert.go
create mode 100644 api/status/details.go
create mode 100644 api/status/grpc/types_frostfs.pb.go
create mode 100644 api/status/grpc/types_frostfs_fuzz.go
create mode 100644 api/status/grpc/types_frostfs_test.go
create mode 100644 api/status/marshal.go
create mode 100644 api/status/message_test.go
create mode 100644 api/status/status.go
create mode 100644 api/status/test/codes.go
create mode 100644 api/status/test/generate.go
create mode 100644 api/status/types.go
create mode 100644 api/tombstone/convert.go
create mode 100644 api/tombstone/grpc/types_frostfs.pb.go
create mode 100644 api/tombstone/grpc/types_frostfs_fuzz.go
create mode 100644 api/tombstone/grpc/types_frostfs_test.go
create mode 100644 api/tombstone/json.go
create mode 100644 api/tombstone/marshal.go
create mode 100644 api/tombstone/message_test.go
create mode 100644 api/tombstone/test/generate.go
create mode 100644 api/tombstone/types.go
create mode 100644 api/util/pool/buffer.go
create mode 100644 api/util/pool/marshal.go
create mode 100644 api/util/proto/encoding/compat.go
create mode 100644 api/util/proto/encoding/json.go
create mode 100644 api/util/proto/encoding/proto.go
create mode 100644 api/util/proto/marshal.go
create mode 100644 api/util/proto/marshal_test.go
create mode 100644 api/util/proto/test/custom/test_frostfs.pb.go
create mode 100644 api/util/proto/test/test.pb.go
create mode 100644 api/util/protogen/internalgengo/file.go
create mode 100644 api/util/protogen/internalgengo/fuzz.go
create mode 100644 api/util/protogen/internalgengo/getter.go
create mode 100644 api/util/protogen/internalgengo/json.go
create mode 100644 api/util/protogen/internalgengo/options.go
create mode 100644 api/util/protogen/internalgengo/proto.go
create mode 100644 api/util/protogen/internalgengo/proto_field_type.go
create mode 100644 api/util/protogen/internalgengo/proto_stable_compat.go
create mode 100644 api/util/protogen/internalgengo/writer.go
create mode 100644 api/util/protogen/main.go
create mode 100644 api/util/signature/data.go
create mode 100644 api/util/signature/options.go
create mode 100644 api/util/signature/sign_test.go
create mode 100644 api/util/signature/walletconnect/sign.go
create mode 100644 api/util/signature/walletconnect/sign_test.go
create mode 100755 prepare.sh
diff --git a/.gitattributes b/.gitattributes
index b371347..f7ff250 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -2,3 +2,6 @@
/pkg/policy/parser/generate.go diff
**/*.interp -diff
**/*.tokens -diff
+/**/*.pb.go -diff -merge
+/**/*.pb.go linguist-generated=true
+/go.sum -diff
diff --git a/Makefile b/Makefile
index 32b588e..6f62f6d 100755
--- a/Makefile
+++ b/Makefile
@@ -7,11 +7,76 @@ TRUECLOUDLAB_LINT_VERSION ?= 0.0.6
OUTPUT_LINT_DIR ?= $(shell pwd)/bin
LINT_DIR = $(OUTPUT_LINT_DIR)/golangci-lint-$(LINT_VERSION)-v$(TRUECLOUDLAB_LINT_VERSION)
+PROTOC_VERSION ?= 27.2
+PROTOC_GEN_GO_VERSION ?= $(shell go list -f '{{.Version}}' -m google.golang.org/protobuf)
+PROTOC_OS_VERSION=osx-x86_64
+ifeq ($(shell uname), Linux)
+ PROTOC_OS_VERSION=linux-x86_64
+endif
+
+BIN = bin
+PROTOBUF_DIR ?= $(abspath $(BIN))/protobuf
+PROTOC_DIR ?= $(PROTOBUF_DIR)/protoc-v$(PROTOC_VERSION)
+PROTOC_GEN_GO_DIR ?= $(PROTOBUF_DIR)/protoc-gen-go-$(PROTOC_GEN_GO_VERSION)
+
+
+.PHONY: dep imports protoc test lint help $(BIN)/protogen protoc-test
+
# Run tests
test: GOFLAGS ?= "-cover -count=1"
test:
@GOFLAGS=$(GOFLAGS) go test ./...
+# Reformat imports
+imports:
+ @echo "⇒ Processing goimports check"
+ @for f in `find . -type f -name '*.go' -not -name '*.pb.go' -prune`; do \
+ goimports -w $$f; \
+ done
+
+# Install protoc
+protoc-install:
+ @rm -rf $(PROTOBUF_DIR)
+ @mkdir -p $(PROTOBUF_DIR)
+ @echo "⇒ Installing protoc... "
+ @wget -q -O $(PROTOBUF_DIR)/protoc-$(PROTOC_VERSION).zip 'https://github.com/protocolbuffers/protobuf/releases/download/v$(PROTOC_VERSION)/protoc-$(PROTOC_VERSION)-$(PROTOC_OS_VERSION).zip'
+ @unzip -q -o $(PROTOBUF_DIR)/protoc-$(PROTOC_VERSION).zip -d $(PROTOC_DIR)
+ @rm $(PROTOBUF_DIR)/protoc-$(PROTOC_VERSION).zip
+ @echo "⇒ Installing protoc-gen-go..."
+ @GOBIN=$(PROTOC_GEN_GO_DIR) go install -v google.golang.org/protobuf/...@$(PROTOC_GEN_GO_VERSION)
+
+
+# Regenerate code for proto files
+protoc:
+ @if [ ! -d "$(PROTOC_DIR)" ] || [ ! -d "$(PROTOC_GEN_GO_DIR)" ]; then \
+ make protoc-install; \
+ fi
+ # Protoc generate
+ @for f in `find . -type f -name '*.proto' -not -path './bin/*' -not -path './api/util/proto/test/*'`; do \
+ echo "⇒ Processing $$f "; \
+ $(PROTOC_DIR)/bin/protoc \
+ --proto_path=.:$(PROTOC_DIR)/include:/usr/local/include \
+ --plugin=protoc-gen-go-frostfs=$(abspath ./bin/protogen) \
+ --go-frostfs_out=fuzz=true:. \
+ --go-frostfs_opt=paths=source_relative \
+ --go-grpc_opt=require_unimplemented_servers=false \
+ --go-grpc_out=. --go-grpc_opt=paths=source_relative $$f; \
+ done
+
+$(BIN)/protogen:
+ @go build -v -trimpath \
+ -o $(BIN)/protogen \
+ ./api/util/protogen
+
+protoc-test: protoc $(BIN)/protogen
+ @$(PROTOC_DIR)/bin/protoc \
+ --go_out=. --go_opt=paths=source_relative \
+ --plugin=protoc-gen-go-frostfs=$(abspath $(BIN)/protogen) \
+ --go-frostfs_opt=Mapi/util/proto/test/test.proto=git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/test/custom \
+ --go-frostfs_opt=module=git.frostfs.info/TrueCloudLab/frostfs-sdk-go \
+ --go-frostfs_out=. --go-frostfs_opt=paths=import \
+ ./api/util/proto/test/test.proto
+
# Pull go dependencies
dep:
@printf "⇒ Download requirements: "
diff --git a/accounting/decimal.go b/accounting/decimal.go
index bb01f28..b6d7386 100644
--- a/accounting/decimal.go
+++ b/accounting/decimal.go
@@ -1,10 +1,10 @@
package accounting
-import "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting"
+import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/accounting"
// Decimal represents decimal number for accounting operations.
//
-// Decimal is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting.Decimal
+// Decimal is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/accounting.Decimal
// message. See ReadFromV2 / WriteToV2 methods.
//
// Instances can be created using built-in var declaration.
diff --git a/accounting/decimal_test.go b/accounting/decimal_test.go
index af46dd4..cdc6b69 100644
--- a/accounting/decimal_test.go
+++ b/accounting/decimal_test.go
@@ -3,8 +3,8 @@ package accounting_test
import (
"testing"
- v2accounting "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/accounting"
+ v2accounting "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/accounting"
"github.com/stretchr/testify/require"
)
diff --git a/accounting/doc.go b/accounting/doc.go
index defcb0d..d5a9bfb 100644
--- a/accounting/doc.go
+++ b/accounting/doc.go
@@ -13,7 +13,7 @@ Instances can be also used to process FrostFS API V2 protocol messages
On client side:
- import "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting"
+ import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/accounting"
var msg accounting.Decimal
dec.WriteToV2(&msg)
diff --git a/ape/chain.go b/ape/chain.go
index eae441d..5a5548d 100644
--- a/ape/chain.go
+++ b/ape/chain.go
@@ -4,7 +4,7 @@ import (
"errors"
"fmt"
- apeV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape"
+ apeV2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape"
)
var (
diff --git a/ape/chain_target.go b/ape/chain_target.go
index 13b7e87..cb63db7 100644
--- a/ape/chain_target.go
+++ b/ape/chain_target.go
@@ -1,7 +1,7 @@
package ape
import (
- apeV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape"
+ apeV2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape"
)
// TargetType is an SDK representation for v2's TargetType.
diff --git a/ape/chain_target_test.go b/ape/chain_target_test.go
index 21a11b7..e7416d1 100644
--- a/ape/chain_target_test.go
+++ b/ape/chain_target_test.go
@@ -6,7 +6,7 @@ import (
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/ape"
"github.com/stretchr/testify/require"
- apeV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape"
+ apeV2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape"
)
var (
diff --git a/ape/chain_test.go b/ape/chain_test.go
index 83991f6..4e47fc6 100644
--- a/ape/chain_test.go
+++ b/ape/chain_test.go
@@ -6,7 +6,7 @@ import (
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/ape"
"github.com/stretchr/testify/require"
- apeV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape"
+ apeV2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape"
)
const (
diff --git a/ape/grpc/types_frostfs.pb.go b/ape/grpc/types_frostfs.pb.go
new file mode 100644
index 0000000..c16e867
--- /dev/null
+++ b/ape/grpc/types_frostfs.pb.go
@@ -0,0 +1,424 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package ape
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+ strconv "strconv"
+)
+
+type TargetType int32
+
+const (
+ TargetType_UNDEFINED TargetType = 0
+ TargetType_NAMESPACE TargetType = 1
+ TargetType_CONTAINER TargetType = 2
+ TargetType_USER TargetType = 3
+ TargetType_GROUP TargetType = 4
+)
+
+var (
+ TargetType_name = map[int32]string{
+ 0: "UNDEFINED",
+ 1: "NAMESPACE",
+ 2: "CONTAINER",
+ 3: "USER",
+ 4: "GROUP",
+ }
+ TargetType_value = map[string]int32{
+ "UNDEFINED": 0,
+ "NAMESPACE": 1,
+ "CONTAINER": 2,
+ "USER": 3,
+ "GROUP": 4,
+ }
+)
+
+func (x TargetType) String() string {
+ if v, ok := TargetType_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *TargetType) FromString(s string) bool {
+ if v, ok := TargetType_value[s]; ok {
+ *x = TargetType(v)
+ return true
+ }
+ return false
+}
+
+type ChainTarget struct {
+ Type TargetType `json:"type"`
+ Name string `json:"name"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ChainTarget)(nil)
+ _ encoding.ProtoUnmarshaler = (*ChainTarget)(nil)
+ _ json.Marshaler = (*ChainTarget)(nil)
+ _ json.Unmarshaler = (*ChainTarget)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ChainTarget) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.EnumSize(1, int32(x.Type))
+ size += proto.StringSize(2, x.Name)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ChainTarget) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ChainTarget) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if int32(x.Type) != 0 {
+ mm.AppendInt32(1, int32(x.Type))
+ }
+ if len(x.Name) != 0 {
+ mm.AppendString(2, x.Name)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ChainTarget) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ChainTarget")
+ }
+ switch fc.FieldNum {
+ case 1: // Type
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Type")
+ }
+ x.Type = TargetType(data)
+ case 2: // Name
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Name")
+ }
+ x.Name = data
+ }
+ }
+ return nil
+}
+func (x *ChainTarget) GetType() TargetType {
+ if x != nil {
+ return x.Type
+ }
+ return 0
+}
+func (x *ChainTarget) SetType(v TargetType) {
+ x.Type = v
+}
+func (x *ChainTarget) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+func (x *ChainTarget) SetName(v string) {
+ x.Name = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ChainTarget) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ChainTarget) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"name\":"
+ out.RawString(prefix)
+ out.String(x.Name)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ChainTarget) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ChainTarget) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "type":
+ {
+ var f TargetType
+ var parsedValue TargetType
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := TargetType_value[v]; ok {
+ parsedValue = TargetType(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = TargetType(vv)
+ case float64:
+ parsedValue = TargetType(v)
+ }
+ f = parsedValue
+ x.Type = f
+ }
+ case "name":
+ {
+ var f string
+ f = in.String()
+ x.Name = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Chain struct {
+ Kind isChain_Kind
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Chain)(nil)
+ _ encoding.ProtoUnmarshaler = (*Chain)(nil)
+ _ json.Marshaler = (*Chain)(nil)
+ _ json.Unmarshaler = (*Chain)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Chain) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ if inner, ok := x.Kind.(*Chain_Raw); ok {
+ size += proto.BytesSize(1, inner.Raw)
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Chain) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Chain) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if inner, ok := x.Kind.(*Chain_Raw); ok {
+ if len(inner.Raw) != 0 {
+ mm.AppendBytes(1, inner.Raw)
+ }
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Chain) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Chain")
+ }
+ switch fc.FieldNum {
+ case 1: // Raw
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Raw")
+ }
+ x.Kind = &Chain_Raw{Raw: data}
+ }
+ }
+ return nil
+}
+func (x *Chain) GetKind() isChain_Kind {
+ if x != nil {
+ return x.Kind
+ }
+ return nil
+}
+func (x *Chain) SetKind(v isChain_Kind) {
+ x.Kind = v
+}
+func (x *Chain) GetRaw() []byte {
+ if xx, ok := x.GetKind().(*Chain_Raw); ok {
+ return xx.Raw
+ }
+ return nil
+}
+func (x *Chain) SetRaw(v *Chain_Raw) {
+ x.Kind = v
+}
+func (x *Chain_Raw) GetRaw() []byte {
+ if x != nil {
+ return x.Raw
+ }
+ return nil
+}
+func (x *Chain_Raw) SetRaw(v []byte) {
+ x.Raw = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Chain) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Chain) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ switch xx := x.Kind.(type) {
+ case *Chain_Raw:
+ {
+ 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("")
+ }
+ }
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Chain) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Chain) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "raw":
+ xx := new(Chain_Raw)
+ x.Kind = xx
+ {
+ var f []byte
+ f = in.Bytes()
+ xx.Raw = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type isChain_Kind interface {
+ isChain_Kind()
+}
+
+type Chain_Raw struct {
+ Raw []byte
+}
+
+func (*Chain_Raw) isChain_Kind() {}
diff --git a/ape/grpc/types_frostfs_fuzz.go b/ape/grpc/types_frostfs_fuzz.go
new file mode 100644
index 0000000..b7bf367
--- /dev/null
+++ b/ape/grpc/types_frostfs_fuzz.go
@@ -0,0 +1,45 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package ape
+
+func DoFuzzProtoChainTarget(data []byte) int {
+ msg := new(ChainTarget)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONChainTarget(data []byte) int {
+ msg := new(ChainTarget)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoChain(data []byte) int {
+ msg := new(Chain)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONChain(data []byte) int {
+ msg := new(Chain)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/ape/grpc/types_frostfs_test.go b/ape/grpc/types_frostfs_test.go
new file mode 100644
index 0000000..93d7eea
--- /dev/null
+++ b/ape/grpc/types_frostfs_test.go
@@ -0,0 +1,31 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package ape
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoChainTarget(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoChainTarget(data)
+ })
+}
+func FuzzJSONChainTarget(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONChainTarget(data)
+ })
+}
+func FuzzProtoChain(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoChain(data)
+ })
+}
+func FuzzJSONChain(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONChain(data)
+ })
+}
diff --git a/api/accounting/accounting.go b/api/accounting/accounting.go
new file mode 100644
index 0000000..04603cd
--- /dev/null
+++ b/api/accounting/accounting.go
@@ -0,0 +1,104 @@
+package accounting
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+)
+
+type BalanceRequestBody struct {
+ ownerID *refs.OwnerID
+}
+
+type BalanceResponseBody struct {
+ bal *Decimal
+}
+
+type Decimal struct {
+ val int64
+
+ prec uint32
+}
+
+type BalanceRequest struct {
+ body *BalanceRequestBody
+
+ session.RequestHeaders
+}
+
+type BalanceResponse struct {
+ body *BalanceResponseBody
+
+ session.ResponseHeaders
+}
+
+func (b *BalanceRequestBody) GetOwnerID() *refs.OwnerID {
+ if b != nil {
+ return b.ownerID
+ }
+
+ return nil
+}
+
+func (b *BalanceRequestBody) SetOwnerID(v *refs.OwnerID) {
+ b.ownerID = v
+}
+
+func (b *BalanceRequest) GetBody() *BalanceRequestBody {
+ if b != nil {
+ return b.body
+ }
+
+ return nil
+}
+
+func (b *BalanceRequest) SetBody(v *BalanceRequestBody) {
+ b.body = v
+}
+
+func (d *Decimal) GetValue() int64 {
+ if d != nil {
+ return d.val
+ }
+
+ return 0
+}
+
+func (d *Decimal) SetValue(v int64) {
+ d.val = v
+}
+
+func (d *Decimal) GetPrecision() uint32 {
+ if d != nil {
+ return d.prec
+ }
+
+ return 0
+}
+
+func (d *Decimal) SetPrecision(v uint32) {
+ d.prec = v
+}
+
+func (br *BalanceResponseBody) GetBalance() *Decimal {
+ if br != nil {
+ return br.bal
+ }
+
+ return nil
+}
+
+func (br *BalanceResponseBody) SetBalance(v *Decimal) {
+ br.bal = v
+}
+
+func (br *BalanceResponse) GetBody() *BalanceResponseBody {
+ if br != nil {
+ return br.body
+ }
+
+ return nil
+}
+
+func (br *BalanceResponse) SetBody(v *BalanceResponseBody) {
+ br.body = v
+}
diff --git a/api/accounting/convert.go b/api/accounting/convert.go
new file mode 100644
index 0000000..53b7491
--- /dev/null
+++ b/api/accounting/convert.go
@@ -0,0 +1,178 @@
+package accounting
+
+import (
+ accounting "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/accounting/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+)
+
+func (b *BalanceRequestBody) ToGRPCMessage() grpc.Message {
+ var m *accounting.BalanceRequest_Body
+
+ if b != nil {
+ m = new(accounting.BalanceRequest_Body)
+
+ m.SetOwnerId(b.ownerID.ToGRPCMessage().(*refsGRPC.OwnerID))
+ }
+
+ return m
+}
+
+func (b *BalanceRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*accounting.BalanceRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ ownerID := v.GetOwnerId()
+ if ownerID == nil {
+ b.ownerID = nil
+ } else {
+ if b.ownerID == nil {
+ b.ownerID = new(refs.OwnerID)
+ }
+
+ err = b.ownerID.FromGRPCMessage(ownerID)
+ }
+
+ return err
+}
+
+func (b *BalanceRequest) ToGRPCMessage() grpc.Message {
+ var m *accounting.BalanceRequest
+
+ if b != nil {
+ m = new(accounting.BalanceRequest)
+
+ m.SetBody(b.body.ToGRPCMessage().(*accounting.BalanceRequest_Body))
+ b.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (b *BalanceRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*accounting.BalanceRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ b.body = nil
+ } else {
+ if b.body == nil {
+ b.body = new(BalanceRequestBody)
+ }
+
+ err = b.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return b.RequestHeaders.FromMessage(v)
+}
+
+func (d *Decimal) ToGRPCMessage() grpc.Message {
+ var m *accounting.Decimal
+
+ if d != nil {
+ m = new(accounting.Decimal)
+
+ m.SetValue(d.val)
+ m.SetPrecision(d.prec)
+ }
+
+ return m
+}
+
+func (d *Decimal) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*accounting.Decimal)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ d.val = v.GetValue()
+ d.prec = v.GetPrecision()
+
+ return nil
+}
+
+func (br *BalanceResponseBody) ToGRPCMessage() grpc.Message {
+ var m *accounting.BalanceResponse_Body
+
+ if br != nil {
+ m = new(accounting.BalanceResponse_Body)
+
+ m.SetBalance(br.bal.ToGRPCMessage().(*accounting.Decimal))
+ }
+
+ return m
+}
+
+func (br *BalanceResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*accounting.BalanceResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ bal := v.GetBalance()
+ if bal == nil {
+ br.bal = nil
+ } else {
+ if br.bal == nil {
+ br.bal = new(Decimal)
+ }
+
+ err = br.bal.FromGRPCMessage(bal)
+ }
+
+ return err
+}
+
+func (br *BalanceResponse) ToGRPCMessage() grpc.Message {
+ var m *accounting.BalanceResponse
+
+ if br != nil {
+ m = new(accounting.BalanceResponse)
+
+ m.SetBody(br.body.ToGRPCMessage().(*accounting.BalanceResponse_Body))
+ br.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (br *BalanceResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*accounting.BalanceResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ br.body = nil
+ } else {
+ if br.body == nil {
+ br.body = new(BalanceResponseBody)
+ }
+
+ err = br.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return br.ResponseHeaders.FromMessage(v)
+}
diff --git a/api/accounting/grpc/service_frostfs.pb.go b/api/accounting/grpc/service_frostfs.pb.go
new file mode 100644
index 0000000..86502ef
--- /dev/null
+++ b/api/accounting/grpc/service_frostfs.pb.go
@@ -0,0 +1,768 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package accounting
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ grpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ grpc1 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/grpc"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+)
+
+type BalanceRequest_Body struct {
+ OwnerId *grpc.OwnerID `json:"ownerId"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*BalanceRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*BalanceRequest_Body)(nil)
+ _ json.Marshaler = (*BalanceRequest_Body)(nil)
+ _ json.Unmarshaler = (*BalanceRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *BalanceRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.OwnerId)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *BalanceRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *BalanceRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.OwnerId != nil {
+ x.OwnerId.EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *BalanceRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "BalanceRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // OwnerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "OwnerId")
+ }
+ x.OwnerId = new(grpc.OwnerID)
+ if err := x.OwnerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *BalanceRequest_Body) GetOwnerId() *grpc.OwnerID {
+ if x != nil {
+ return x.OwnerId
+ }
+ return nil
+}
+func (x *BalanceRequest_Body) SetOwnerId(v *grpc.OwnerID) {
+ x.OwnerId = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *BalanceRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *BalanceRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"ownerId\":"
+ out.RawString(prefix)
+ x.OwnerId.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *BalanceRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *BalanceRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "ownerId":
+ {
+ var f *grpc.OwnerID
+ f = new(grpc.OwnerID)
+ f.UnmarshalEasyJSON(in)
+ x.OwnerId = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type BalanceRequest struct {
+ Body *BalanceRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*BalanceRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*BalanceRequest)(nil)
+ _ json.Marshaler = (*BalanceRequest)(nil)
+ _ json.Unmarshaler = (*BalanceRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *BalanceRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *BalanceRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *BalanceRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *BalanceRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *BalanceRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *BalanceRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "BalanceRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(BalanceRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *BalanceRequest) GetBody() *BalanceRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *BalanceRequest) SetBody(v *BalanceRequest_Body) {
+ x.Body = v
+}
+func (x *BalanceRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *BalanceRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *BalanceRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *BalanceRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *BalanceRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *BalanceRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *BalanceRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *BalanceRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *BalanceRequest_Body
+ f = new(BalanceRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type BalanceResponse_Body struct {
+ Balance *Decimal `json:"balance"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*BalanceResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*BalanceResponse_Body)(nil)
+ _ json.Marshaler = (*BalanceResponse_Body)(nil)
+ _ json.Unmarshaler = (*BalanceResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *BalanceResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Balance)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *BalanceResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *BalanceResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Balance != nil {
+ x.Balance.EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *BalanceResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "BalanceResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Balance
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Balance")
+ }
+ x.Balance = new(Decimal)
+ if err := x.Balance.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *BalanceResponse_Body) GetBalance() *Decimal {
+ if x != nil {
+ return x.Balance
+ }
+ return nil
+}
+func (x *BalanceResponse_Body) SetBalance(v *Decimal) {
+ x.Balance = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *BalanceResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *BalanceResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"balance\":"
+ out.RawString(prefix)
+ x.Balance.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *BalanceResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *BalanceResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "balance":
+ {
+ var f *Decimal
+ f = new(Decimal)
+ f.UnmarshalEasyJSON(in)
+ x.Balance = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type BalanceResponse struct {
+ Body *BalanceResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*BalanceResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*BalanceResponse)(nil)
+ _ json.Marshaler = (*BalanceResponse)(nil)
+ _ json.Unmarshaler = (*BalanceResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *BalanceResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *BalanceResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *BalanceResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *BalanceResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *BalanceResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *BalanceResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "BalanceResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(BalanceResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *BalanceResponse) GetBody() *BalanceResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *BalanceResponse) SetBody(v *BalanceResponse_Body) {
+ x.Body = v
+}
+func (x *BalanceResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *BalanceResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *BalanceResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *BalanceResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *BalanceResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *BalanceResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *BalanceResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *BalanceResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *BalanceResponse_Body
+ f = new(BalanceResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/accounting/grpc/service_frostfs_fuzz.go b/api/accounting/grpc/service_frostfs_fuzz.go
new file mode 100644
index 0000000..69e7174
--- /dev/null
+++ b/api/accounting/grpc/service_frostfs_fuzz.go
@@ -0,0 +1,45 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package accounting
+
+func DoFuzzProtoBalanceRequest(data []byte) int {
+ msg := new(BalanceRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONBalanceRequest(data []byte) int {
+ msg := new(BalanceRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoBalanceResponse(data []byte) int {
+ msg := new(BalanceResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONBalanceResponse(data []byte) int {
+ msg := new(BalanceResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/accounting/grpc/service_frostfs_test.go b/api/accounting/grpc/service_frostfs_test.go
new file mode 100644
index 0000000..b97a13e
--- /dev/null
+++ b/api/accounting/grpc/service_frostfs_test.go
@@ -0,0 +1,31 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package accounting
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoBalanceRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoBalanceRequest(data)
+ })
+}
+func FuzzJSONBalanceRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONBalanceRequest(data)
+ })
+}
+func FuzzProtoBalanceResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoBalanceResponse(data)
+ })
+}
+func FuzzJSONBalanceResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONBalanceResponse(data)
+ })
+}
diff --git a/api/accounting/grpc/service_grpc.pb.go b/api/accounting/grpc/service_grpc.pb.go
new file mode 100644
index 0000000..c3a2c61
--- /dev/null
+++ b/api/accounting/grpc/service_grpc.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.3.0
+// - protoc v5.27.2
+// source: api/accounting/grpc/service.proto
+
+package accounting
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+const (
+ AccountingService_Balance_FullMethodName = "/neo.fs.v2.accounting.AccountingService/Balance"
+)
+
+// AccountingServiceClient is the client API for AccountingService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type AccountingServiceClient interface {
+ // Returns the amount of funds in GAS token for the requested FrostFS account.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS):
+ // balance has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON).
+ Balance(ctx context.Context, in *BalanceRequest, opts ...grpc.CallOption) (*BalanceResponse, error)
+}
+
+type accountingServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewAccountingServiceClient(cc grpc.ClientConnInterface) AccountingServiceClient {
+ return &accountingServiceClient{cc}
+}
+
+func (c *accountingServiceClient) Balance(ctx context.Context, in *BalanceRequest, opts ...grpc.CallOption) (*BalanceResponse, error) {
+ out := new(BalanceResponse)
+ err := c.cc.Invoke(ctx, AccountingService_Balance_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// AccountingServiceServer is the server API for AccountingService service.
+// All implementations should embed UnimplementedAccountingServiceServer
+// for forward compatibility
+type AccountingServiceServer interface {
+ // Returns the amount of funds in GAS token for the requested FrostFS account.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS):
+ // balance has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON).
+ Balance(context.Context, *BalanceRequest) (*BalanceResponse, error)
+}
+
+// UnimplementedAccountingServiceServer should be embedded to have forward compatible implementations.
+type UnimplementedAccountingServiceServer struct {
+}
+
+func (UnimplementedAccountingServiceServer) Balance(context.Context, *BalanceRequest) (*BalanceResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Balance not implemented")
+}
+
+// UnsafeAccountingServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to AccountingServiceServer will
+// result in compilation errors.
+type UnsafeAccountingServiceServer interface {
+ mustEmbedUnimplementedAccountingServiceServer()
+}
+
+func RegisterAccountingServiceServer(s grpc.ServiceRegistrar, srv AccountingServiceServer) {
+ s.RegisterService(&AccountingService_ServiceDesc, srv)
+}
+
+func _AccountingService_Balance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(BalanceRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(AccountingServiceServer).Balance(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: AccountingService_Balance_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(AccountingServiceServer).Balance(ctx, req.(*BalanceRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// AccountingService_ServiceDesc is the grpc.ServiceDesc for AccountingService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var AccountingService_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "neo.fs.v2.accounting.AccountingService",
+ HandlerType: (*AccountingServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Balance",
+ Handler: _AccountingService_Balance_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "api/accounting/grpc/service.proto",
+}
diff --git a/api/accounting/grpc/types_frostfs.pb.go b/api/accounting/grpc/types_frostfs.pb.go
new file mode 100644
index 0000000..9d0e9ea
--- /dev/null
+++ b/api/accounting/grpc/types_frostfs.pb.go
@@ -0,0 +1,204 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package accounting
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+ strconv "strconv"
+)
+
+type Decimal struct {
+ Value int64 `json:"value"`
+ Precision uint32 `json:"precision"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Decimal)(nil)
+ _ encoding.ProtoUnmarshaler = (*Decimal)(nil)
+ _ json.Marshaler = (*Decimal)(nil)
+ _ json.Unmarshaler = (*Decimal)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Decimal) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.Int64Size(1, x.Value)
+ size += proto.UInt32Size(2, x.Precision)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Decimal) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Decimal) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Value != 0 {
+ mm.AppendInt64(1, x.Value)
+ }
+ if x.Precision != 0 {
+ mm.AppendUint32(2, x.Precision)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Decimal) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Decimal")
+ }
+ switch fc.FieldNum {
+ case 1: // Value
+ data, ok := fc.Int64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Value")
+ }
+ x.Value = data
+ case 2: // Precision
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Precision")
+ }
+ x.Precision = data
+ }
+ }
+ return nil
+}
+func (x *Decimal) GetValue() int64 {
+ if x != nil {
+ return x.Value
+ }
+ return 0
+}
+func (x *Decimal) SetValue(v int64) {
+ x.Value = v
+}
+func (x *Decimal) GetPrecision() uint32 {
+ if x != nil {
+ return x.Precision
+ }
+ return 0
+}
+func (x *Decimal) SetPrecision(v uint32) {
+ x.Precision = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Decimal) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Decimal) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"precision\":"
+ out.RawString(prefix)
+ out.Uint32(x.Precision)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Decimal) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Decimal) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "value":
+ {
+ var f int64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseInt(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := int64(v)
+ f = pv
+ x.Value = f
+ }
+ case "precision":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.Precision = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/accounting/grpc/types_frostfs_fuzz.go b/api/accounting/grpc/types_frostfs_fuzz.go
new file mode 100644
index 0000000..5eb5e97
--- /dev/null
+++ b/api/accounting/grpc/types_frostfs_fuzz.go
@@ -0,0 +1,26 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package accounting
+
+func DoFuzzProtoDecimal(data []byte) int {
+ msg := new(Decimal)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONDecimal(data []byte) int {
+ msg := new(Decimal)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/accounting/grpc/types_frostfs_test.go b/api/accounting/grpc/types_frostfs_test.go
new file mode 100644
index 0000000..404b75e
--- /dev/null
+++ b/api/accounting/grpc/types_frostfs_test.go
@@ -0,0 +1,21 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package accounting
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoDecimal(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoDecimal(data)
+ })
+}
+func FuzzJSONDecimal(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONDecimal(data)
+ })
+}
diff --git a/api/accounting/json.go b/api/accounting/json.go
new file mode 100644
index 0000000..c5ff977
--- /dev/null
+++ b/api/accounting/json.go
@@ -0,0 +1,14 @@
+package accounting
+
+import (
+ accounting "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/accounting/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+)
+
+func (d *Decimal) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(d)
+}
+
+func (d *Decimal) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(d, data, new(accounting.Decimal))
+}
diff --git a/api/accounting/marshal.go b/api/accounting/marshal.go
new file mode 100644
index 0000000..84771cc
--- /dev/null
+++ b/api/accounting/marshal.go
@@ -0,0 +1,104 @@
+package accounting
+
+import (
+ accounting "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/accounting/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ protoutil "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+)
+
+const (
+ decimalValueField = 1
+ decimalPrecisionField = 2
+
+ balanceReqBodyOwnerField = 1
+
+ balanceRespBodyDecimalField = 1
+)
+
+func (d *Decimal) StableMarshal(buf []byte) []byte {
+ if d == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, d.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.Int64Marshal(decimalValueField, buf[offset:], d.val)
+ protoutil.UInt32Marshal(decimalPrecisionField, buf[offset:], d.prec)
+
+ return buf
+}
+
+func (d *Decimal) StableSize() (size int) {
+ if d == nil {
+ return 0
+ }
+
+ size += protoutil.Int64Size(decimalValueField, d.val)
+ size += protoutil.UInt32Size(decimalPrecisionField, d.prec)
+
+ return size
+}
+
+func (d *Decimal) Unmarshal(data []byte) error {
+ return message.Unmarshal(d, data, new(accounting.Decimal))
+}
+
+func (b *BalanceRequestBody) StableMarshal(buf []byte) []byte {
+ if b == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, b.StableSize())
+ }
+
+ protoutil.NestedStructureMarshal(balanceReqBodyOwnerField, buf, b.ownerID)
+
+ return buf
+}
+
+func (b *BalanceRequestBody) StableSize() (size int) {
+ if b == nil {
+ return 0
+ }
+
+ size = protoutil.NestedStructureSize(balanceReqBodyOwnerField, b.ownerID)
+
+ return size
+}
+
+func (b *BalanceRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(b, data, new(accounting.BalanceRequest_Body))
+}
+
+func (br *BalanceResponseBody) StableMarshal(buf []byte) []byte {
+ if br == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, br.StableSize())
+ }
+
+ protoutil.NestedStructureMarshal(balanceRespBodyDecimalField, buf, br.bal)
+
+ return buf
+}
+
+func (br *BalanceResponseBody) StableSize() (size int) {
+ if br == nil {
+ return 0
+ }
+
+ size = protoutil.NestedStructureSize(balanceRespBodyDecimalField, br.bal)
+
+ return size
+}
+
+func (br *BalanceResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(br, data, new(accounting.BalanceResponse_Body))
+}
diff --git a/api/accounting/message_test.go b/api/accounting/message_test.go
new file mode 100644
index 0000000..214c171
--- /dev/null
+++ b/api/accounting/message_test.go
@@ -0,0 +1,19 @@
+package accounting_test
+
+import (
+ "testing"
+
+ accountingtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/accounting/test"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ messagetest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message/test"
+)
+
+func TestMessage(t *testing.T) {
+ messagetest.TestRPCMessage(t,
+ func(empty bool) message.Message { return accountingtest.GenerateDecimal(empty) },
+ func(empty bool) message.Message { return accountingtest.GenerateBalanceRequestBody(empty) },
+ func(empty bool) message.Message { return accountingtest.GenerateBalanceRequest(empty) },
+ func(empty bool) message.Message { return accountingtest.GenerateBalanceResponseBody(empty) },
+ func(empty bool) message.Message { return accountingtest.GenerateBalanceResponse(empty) },
+ )
+}
diff --git a/api/accounting/test/generate.go b/api/accounting/test/generate.go
new file mode 100644
index 0000000..e9f45df
--- /dev/null
+++ b/api/accounting/test/generate.go
@@ -0,0 +1,64 @@
+package accountingtest
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/accounting"
+ accountingtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/test"
+ sessiontest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/test"
+)
+
+func GenerateBalanceRequest(empty bool) *accounting.BalanceRequest {
+ m := new(accounting.BalanceRequest)
+
+ if !empty {
+ m.SetBody(GenerateBalanceRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateBalanceRequestBody(empty bool) *accounting.BalanceRequestBody {
+ m := new(accounting.BalanceRequestBody)
+
+ if !empty {
+ m.SetOwnerID(accountingtest.GenerateOwnerID(false))
+ }
+
+ return m
+}
+
+func GenerateBalanceResponse(empty bool) *accounting.BalanceResponse {
+ m := new(accounting.BalanceResponse)
+
+ if !empty {
+ m.SetBody(GenerateBalanceResponseBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateBalanceResponseBody(empty bool) *accounting.BalanceResponseBody {
+ m := new(accounting.BalanceResponseBody)
+
+ if !empty {
+ m.SetBalance(GenerateDecimal(false))
+ }
+
+ return m
+}
+
+func GenerateDecimal(empty bool) *accounting.Decimal {
+ m := new(accounting.Decimal)
+
+ if !empty {
+ m.SetValue(1)
+ m.SetPrecision(2)
+ }
+
+ return m
+}
diff --git a/api/acl/bench_test.go b/api/acl/bench_test.go
new file mode 100644
index 0000000..200270c
--- /dev/null
+++ b/api/acl/bench_test.go
@@ -0,0 +1,51 @@
+package acl_test
+
+import (
+ "testing"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
+ aclGrpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl/grpc"
+ acltest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl/test"
+)
+
+func BenchmarkTable_ToGRPCMessage(b *testing.B) {
+ const size = 4
+
+ tb := new(acl.Table)
+ rs := make([]acl.Record, size)
+ for i := range rs {
+ fs := make([]acl.HeaderFilter, size)
+ for j := range fs {
+ fs[j] = *acltest.GenerateFilter(false)
+ }
+ ts := make([]acl.Target, size)
+ for j := range ts {
+ ts[j] = *acltest.GenerateTarget(false)
+ }
+
+ rs[i].SetFilters(fs)
+ rs[i].SetTargets(ts)
+ }
+ tb.SetRecords(rs)
+
+ raw := tb.ToGRPCMessage()
+
+ b.Run("to grpc message", func(b *testing.B) {
+ b.ReportAllocs()
+ for range b.N {
+ raw := tb.ToGRPCMessage()
+ if len(tb.GetRecords()) != len(raw.(*aclGrpc.EACLTable).Records) {
+ b.FailNow()
+ }
+ }
+ })
+ b.Run("from grpc message", func(b *testing.B) {
+ b.ReportAllocs()
+ for range b.N {
+ tb := new(acl.Table)
+ if tb.FromGRPCMessage(raw) != nil {
+ b.FailNow()
+ }
+ }
+ })
+}
diff --git a/api/acl/convert.go b/api/acl/convert.go
new file mode 100644
index 0000000..3f389e3
--- /dev/null
+++ b/api/acl/convert.go
@@ -0,0 +1,592 @@
+package acl
+
+import (
+ acl "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape"
+ apeGRPC "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+)
+
+// RoleToGRPCField converts unified role enum into grpc enum.
+func RoleToGRPCField(t Role) acl.Role {
+ switch t {
+ case RoleUser:
+ return acl.Role_USER
+ case RoleSystem:
+ return acl.Role_SYSTEM
+ case RoleOthers:
+ return acl.Role_OTHERS
+ default:
+ return acl.Role_ROLE_UNSPECIFIED
+ }
+}
+
+// RoleFromGRPCField converts grpc enum into unified role enum.
+func RoleFromGRPCField(t acl.Role) Role {
+ switch t {
+ case acl.Role_USER:
+ return RoleUser
+ case acl.Role_SYSTEM:
+ return RoleSystem
+ case acl.Role_OTHERS:
+ return RoleOthers
+ default:
+ return RoleUnknown
+ }
+}
+
+// OperationToGRPCField converts unified operation enum into grpc enum.
+func OperationToGRPCField(t Operation) acl.Operation {
+ switch t {
+ case OperationPut:
+ return acl.Operation_PUT
+ case OperationDelete:
+ return acl.Operation_DELETE
+ case OperationGet:
+ return acl.Operation_GET
+ case OperationHead:
+ return acl.Operation_HEAD
+ case OperationSearch:
+ return acl.Operation_SEARCH
+ case OperationRange:
+ return acl.Operation_GETRANGE
+ case OperationRangeHash:
+ return acl.Operation_GETRANGEHASH
+ default:
+ return acl.Operation_OPERATION_UNSPECIFIED
+ }
+}
+
+// OperationFromGRPCField converts grpc enum into unified operation enum.
+func OperationFromGRPCField(t acl.Operation) Operation {
+ switch t {
+ case acl.Operation_PUT:
+ return OperationPut
+ case acl.Operation_DELETE:
+ return OperationDelete
+ case acl.Operation_GET:
+ return OperationGet
+ case acl.Operation_HEAD:
+ return OperationHead
+ case acl.Operation_SEARCH:
+ return OperationSearch
+ case acl.Operation_GETRANGE:
+ return OperationRange
+ case acl.Operation_GETRANGEHASH:
+ return OperationRangeHash
+ default:
+ return OperationUnknown
+ }
+}
+
+// ActionToGRPCField converts unified action enum into grpc enum.
+func ActionToGRPCField(t Action) acl.Action {
+ switch t {
+ case ActionDeny:
+ return acl.Action_DENY
+ case ActionAllow:
+ return acl.Action_ALLOW
+ default:
+ return acl.Action_ACTION_UNSPECIFIED
+ }
+}
+
+// ActionFromGRPCField converts grpc enum into unified action enum.
+func ActionFromGRPCField(t acl.Action) Action {
+ switch t {
+ case acl.Action_DENY:
+ return ActionDeny
+ case acl.Action_ALLOW:
+ return ActionAllow
+ default:
+ return ActionUnknown
+ }
+}
+
+// HeaderTypeToGRPCField converts unified header type enum into grpc enum.
+func HeaderTypeToGRPCField(t HeaderType) acl.HeaderType {
+ switch t {
+ case HeaderTypeRequest:
+ return acl.HeaderType_REQUEST
+ case HeaderTypeObject:
+ return acl.HeaderType_OBJECT
+ case HeaderTypeService:
+ return acl.HeaderType_SERVICE
+ default:
+ return acl.HeaderType_HEADER_UNSPECIFIED
+ }
+}
+
+// HeaderTypeFromGRPCField converts grpc enum into unified header type enum.
+func HeaderTypeFromGRPCField(t acl.HeaderType) HeaderType {
+ switch t {
+ case acl.HeaderType_REQUEST:
+ return HeaderTypeRequest
+ case acl.HeaderType_OBJECT:
+ return HeaderTypeObject
+ case acl.HeaderType_SERVICE:
+ return HeaderTypeService
+ default:
+ return HeaderTypeUnknown
+ }
+}
+
+// MatchTypeToGRPCField converts unified match type enum into grpc enum.
+func MatchTypeToGRPCField(t MatchType) acl.MatchType {
+ switch t {
+ case MatchTypeStringEqual:
+ return acl.MatchType_STRING_EQUAL
+ case MatchTypeStringNotEqual:
+ return acl.MatchType_STRING_NOT_EQUAL
+ default:
+ return acl.MatchType_MATCH_TYPE_UNSPECIFIED
+ }
+}
+
+// MatchTypeFromGRPCField converts grpc enum into unified match type enum.
+func MatchTypeFromGRPCField(t acl.MatchType) MatchType {
+ switch t {
+ case acl.MatchType_STRING_EQUAL:
+ return MatchTypeStringEqual
+ case acl.MatchType_STRING_NOT_EQUAL:
+ return MatchTypeStringNotEqual
+ default:
+ return MatchTypeUnknown
+ }
+}
+
+func (f *HeaderFilter) ToGRPCMessage() grpc.Message {
+ var m *acl.EACLRecord_Filter
+
+ if f != nil {
+ m = new(acl.EACLRecord_Filter)
+
+ m.SetKey(f.key)
+ m.SetValue(f.value)
+ m.SetHeaderType(HeaderTypeToGRPCField(f.hdrType))
+ m.SetMatchType(MatchTypeToGRPCField(f.matchType))
+ }
+
+ return m
+}
+
+func (f *HeaderFilter) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*acl.EACLRecord_Filter)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ f.key = v.GetKey()
+ f.value = v.GetValue()
+ f.hdrType = HeaderTypeFromGRPCField(v.GetHeaderType())
+ f.matchType = MatchTypeFromGRPCField(v.GetMatchType())
+
+ return nil
+}
+
+func HeaderFiltersToGRPC(fs []HeaderFilter) (res []acl.EACLRecord_Filter) {
+ if fs != nil {
+ res = make([]acl.EACLRecord_Filter, 0, len(fs))
+
+ for i := range fs {
+ res = append(res, *fs[i].ToGRPCMessage().(*acl.EACLRecord_Filter))
+ }
+ }
+
+ return
+}
+
+func HeaderFiltersFromGRPC(fs []acl.EACLRecord_Filter) (res []HeaderFilter, err error) {
+ if fs != nil {
+ res = make([]HeaderFilter, len(fs))
+
+ for i := range fs {
+ err = res[i].FromGRPCMessage(&fs[i])
+ if err != nil {
+ return
+ }
+ }
+ }
+
+ return
+}
+
+func (t *Target) ToGRPCMessage() grpc.Message {
+ var m *acl.EACLRecord_Target
+
+ if t != nil {
+ m = new(acl.EACLRecord_Target)
+
+ m.SetRole(RoleToGRPCField(t.role))
+ m.SetKeys(t.keys)
+ }
+
+ return m
+}
+
+func (t *Target) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*acl.EACLRecord_Target)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ t.role = RoleFromGRPCField(v.GetRole())
+ t.keys = v.GetKeys()
+
+ return nil
+}
+
+func TargetsToGRPC(ts []Target) (res []acl.EACLRecord_Target) {
+ if ts != nil {
+ res = make([]acl.EACLRecord_Target, 0, len(ts))
+
+ for i := range ts {
+ res = append(res, *ts[i].ToGRPCMessage().(*acl.EACLRecord_Target))
+ }
+ }
+
+ return
+}
+
+func TargetsFromGRPC(fs []acl.EACLRecord_Target) (res []Target, err error) {
+ if fs != nil {
+ res = make([]Target, len(fs))
+
+ for i := range fs {
+ err = res[i].FromGRPCMessage(&fs[i])
+ if err != nil {
+ return
+ }
+ }
+ }
+
+ return
+}
+
+func (r *Record) ToGRPCMessage() grpc.Message {
+ var m *acl.EACLRecord
+
+ if r != nil {
+ m = new(acl.EACLRecord)
+
+ m.SetOperation(OperationToGRPCField(r.op))
+ m.SetAction(ActionToGRPCField(r.action))
+ m.SetFilters(HeaderFiltersToGRPC(r.filters))
+ m.SetTargets(TargetsToGRPC(r.targets))
+ }
+
+ return m
+}
+
+func (r *Record) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*acl.EACLRecord)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ r.filters, err = HeaderFiltersFromGRPC(v.GetFilters())
+ if err != nil {
+ return err
+ }
+
+ r.targets, err = TargetsFromGRPC(v.GetTargets())
+ if err != nil {
+ return err
+ }
+
+ r.op = OperationFromGRPCField(v.GetOperation())
+ r.action = ActionFromGRPCField(v.GetAction())
+
+ return nil
+}
+
+func RecordsToGRPC(ts []Record) (res []acl.EACLRecord) {
+ if ts != nil {
+ res = make([]acl.EACLRecord, 0, len(ts))
+
+ for i := range ts {
+ res = append(res, *ts[i].ToGRPCMessage().(*acl.EACLRecord))
+ }
+ }
+
+ return
+}
+
+func RecordsFromGRPC(fs []acl.EACLRecord) (res []Record, err error) {
+ if fs != nil {
+ res = make([]Record, len(fs))
+
+ for i := range fs {
+ err = res[i].FromGRPCMessage(&fs[i])
+ if err != nil {
+ return
+ }
+ }
+ }
+
+ return
+}
+
+func (t *Table) ToGRPCMessage() grpc.Message {
+ var m *acl.EACLTable
+
+ if t != nil {
+ m = new(acl.EACLTable)
+
+ m.SetVersion(t.version.ToGRPCMessage().(*refsGRPC.Version))
+ m.SetContainerId(t.cid.ToGRPCMessage().(*refsGRPC.ContainerID))
+ m.SetRecords(RecordsToGRPC(t.records))
+ }
+
+ return m
+}
+
+func (t *Table) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*acl.EACLTable)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ cid := v.GetContainerId()
+ if cid == nil {
+ t.cid = nil
+ } else {
+ if t.cid == nil {
+ t.cid = new(refs.ContainerID)
+ }
+
+ err = t.cid.FromGRPCMessage(cid)
+ if err != nil {
+ return err
+ }
+ }
+
+ version := v.GetVersion()
+ if version == nil {
+ t.version = nil
+ } else {
+ if t.version == nil {
+ t.version = new(refs.Version)
+ }
+
+ err = t.version.FromGRPCMessage(version)
+ if err != nil {
+ return err
+ }
+ }
+
+ t.records, err = RecordsFromGRPC(v.GetRecords())
+
+ return err
+}
+
+func (l *TokenLifetime) ToGRPCMessage() grpc.Message {
+ var m *acl.BearerToken_Body_TokenLifetime
+
+ if l != nil {
+ m = new(acl.BearerToken_Body_TokenLifetime)
+
+ m.SetExp(l.exp)
+ m.SetIat(l.iat)
+ m.SetNbf(l.nbf)
+ }
+
+ return m
+}
+
+func (l *TokenLifetime) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*acl.BearerToken_Body_TokenLifetime)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ l.exp = v.GetExp()
+ l.iat = v.GetIat()
+ l.nbf = v.GetNbf()
+
+ return nil
+}
+
+func (c *APEOverride) ToGRPCMessage() grpc.Message {
+ var m *acl.BearerToken_Body_APEOverride
+
+ if c != nil {
+ m = new(acl.BearerToken_Body_APEOverride)
+
+ m.SetTarget(c.target.ToGRPCMessage().(*apeGRPC.ChainTarget))
+
+ if len(c.chains) > 0 {
+ apeChains := make([]apeGRPC.Chain, len(c.chains))
+ for i := range c.chains {
+ apeChains[i] = *c.chains[i].ToGRPCMessage().(*apeGRPC.Chain)
+ }
+ m.SetChains(apeChains)
+ }
+ }
+
+ return m
+}
+
+func (c *APEOverride) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*acl.BearerToken_Body_APEOverride)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ if targetGRPC := v.GetTarget(); targetGRPC != nil {
+ if c.target == nil {
+ c.target = new(ape.ChainTarget)
+ }
+ if err := c.target.FromGRPCMessage(v.GetTarget()); err != nil {
+ return err
+ }
+ }
+
+ if apeChains := v.GetChains(); len(apeChains) > 0 {
+ c.chains = make([]*ape.Chain, len(apeChains))
+ for i := range apeChains {
+ c.chains[i] = new(ape.Chain)
+ if err := c.chains[i].FromGRPCMessage(&apeChains[i]); err != nil {
+ return err
+ }
+ }
+ }
+
+ return nil
+}
+
+func (bt *BearerTokenBody) ToGRPCMessage() grpc.Message {
+ var m *acl.BearerToken_Body
+
+ if bt != nil {
+ m = new(acl.BearerToken_Body)
+
+ m.SetOwnerId(bt.ownerID.ToGRPCMessage().(*refsGRPC.OwnerID))
+ m.SetLifetime(bt.lifetime.ToGRPCMessage().(*acl.BearerToken_Body_TokenLifetime))
+ m.SetEaclTable(bt.eacl.ToGRPCMessage().(*acl.EACLTable))
+ m.SetAllowImpersonate(bt.impersonate)
+ m.SetApeOverride(bt.apeOverride.ToGRPCMessage().(*acl.BearerToken_Body_APEOverride))
+ }
+
+ return m
+}
+
+func (bt *BearerTokenBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*acl.BearerToken_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ ownerID := v.GetOwnerId()
+ if ownerID == nil {
+ bt.ownerID = nil
+ } else {
+ if bt.ownerID == nil {
+ bt.ownerID = new(refs.OwnerID)
+ }
+
+ err = bt.ownerID.FromGRPCMessage(ownerID)
+ if err != nil {
+ return err
+ }
+ }
+
+ lifetime := v.GetLifetime()
+ if lifetime == nil {
+ bt.lifetime = nil
+ } else {
+ if bt.lifetime == nil {
+ bt.lifetime = new(TokenLifetime)
+ }
+
+ err = bt.lifetime.FromGRPCMessage(lifetime)
+ if err != nil {
+ return err
+ }
+ }
+
+ eacl := v.GetEaclTable()
+ if eacl == nil {
+ bt.eacl = nil
+ } else {
+ if bt.eacl == nil {
+ bt.eacl = new(Table)
+ }
+
+ if err = bt.eacl.FromGRPCMessage(eacl); err != nil {
+ return err
+ }
+ }
+
+ if apeOverrideGRPC := v.GetApeOverride(); apeOverrideGRPC != nil {
+ if bt.apeOverride == nil {
+ bt.apeOverride = new(APEOverride)
+ }
+ err = bt.apeOverride.FromGRPCMessage(apeOverrideGRPC)
+ if err != nil {
+ return err
+ }
+ }
+
+ bt.impersonate = v.GetAllowImpersonate()
+
+ return err
+}
+
+func (bt *BearerToken) ToGRPCMessage() grpc.Message {
+ var m *acl.BearerToken
+
+ if bt != nil {
+ m = new(acl.BearerToken)
+
+ m.SetBody(bt.body.ToGRPCMessage().(*acl.BearerToken_Body))
+ m.SetSignature(bt.sig.ToGRPCMessage().(*refsGRPC.Signature))
+ }
+
+ return m
+}
+
+func (bt *BearerToken) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*acl.BearerToken)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ bt.body = nil
+ } else {
+ if bt.body == nil {
+ bt.body = new(BearerTokenBody)
+ }
+
+ err = bt.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ sig := v.GetSignature()
+ if sig == nil {
+ bt.sig = nil
+ } else {
+ if bt.sig == nil {
+ bt.sig = new(refs.Signature)
+ }
+
+ err = bt.sig.FromGRPCMessage(sig)
+ }
+
+ return err
+}
diff --git a/api/acl/filters.go b/api/acl/filters.go
new file mode 100644
index 0000000..c1d8afe
--- /dev/null
+++ b/api/acl/filters.go
@@ -0,0 +1,33 @@
+package acl
+
+// ObjectFilterPrefix is a prefix of key to object header value or property.
+const ObjectFilterPrefix = "$Object:"
+
+const (
+ // FilterObjectVersion is a filter key to "version" field of the object header.
+ FilterObjectVersion = ObjectFilterPrefix + "version"
+
+ // FilterObjectID is a filter key to "object_id" field of the object.
+ FilterObjectID = ObjectFilterPrefix + "objectID"
+
+ // FilterObjectContainerID is a filter key to "container_id" field of the object header.
+ FilterObjectContainerID = ObjectFilterPrefix + "containerID"
+
+ // FilterObjectOwnerID is a filter key to "owner_id" field of the object header.
+ FilterObjectOwnerID = ObjectFilterPrefix + "ownerID"
+
+ // FilterObjectCreationEpoch is a filter key to "creation_epoch" field of the object header.
+ FilterObjectCreationEpoch = ObjectFilterPrefix + "creationEpoch"
+
+ // FilterObjectPayloadLength is a filter key to "payload_length" field of the object header.
+ FilterObjectPayloadLength = ObjectFilterPrefix + "payloadLength"
+
+ // FilterObjectPayloadHash is a filter key to "payload_hash" field of the object header.
+ FilterObjectPayloadHash = ObjectFilterPrefix + "payloadHash"
+
+ // FilterObjectType is a filter key to "object_type" field of the object header.
+ FilterObjectType = ObjectFilterPrefix + "objectType"
+
+ // FilterObjectHomomorphicHash is a filter key to "homomorphic_hash" field of the object header.
+ FilterObjectHomomorphicHash = ObjectFilterPrefix + "homomorphicHash"
+)
diff --git a/api/acl/grpc/types_frostfs.pb.go b/api/acl/grpc/types_frostfs.pb.go
new file mode 100644
index 0000000..eed28d6
--- /dev/null
+++ b/api/acl/grpc/types_frostfs.pb.go
@@ -0,0 +1,2184 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package acl
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ grpc1 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape/grpc"
+ grpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+ strconv "strconv"
+)
+
+type Role int32
+
+const (
+ Role_ROLE_UNSPECIFIED Role = 0
+ Role_USER Role = 1
+ Role_SYSTEM Role = 2
+ Role_OTHERS Role = 3
+)
+
+var (
+ Role_name = map[int32]string{
+ 0: "ROLE_UNSPECIFIED",
+ 1: "USER",
+ 2: "SYSTEM",
+ 3: "OTHERS",
+ }
+ Role_value = map[string]int32{
+ "ROLE_UNSPECIFIED": 0,
+ "USER": 1,
+ "SYSTEM": 2,
+ "OTHERS": 3,
+ }
+)
+
+func (x Role) String() string {
+ if v, ok := Role_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *Role) FromString(s string) bool {
+ if v, ok := Role_value[s]; ok {
+ *x = Role(v)
+ return true
+ }
+ return false
+}
+
+type MatchType int32
+
+const (
+ MatchType_MATCH_TYPE_UNSPECIFIED MatchType = 0
+ MatchType_STRING_EQUAL MatchType = 1
+ MatchType_STRING_NOT_EQUAL MatchType = 2
+)
+
+var (
+ MatchType_name = map[int32]string{
+ 0: "MATCH_TYPE_UNSPECIFIED",
+ 1: "STRING_EQUAL",
+ 2: "STRING_NOT_EQUAL",
+ }
+ MatchType_value = map[string]int32{
+ "MATCH_TYPE_UNSPECIFIED": 0,
+ "STRING_EQUAL": 1,
+ "STRING_NOT_EQUAL": 2,
+ }
+)
+
+func (x MatchType) String() string {
+ if v, ok := MatchType_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *MatchType) FromString(s string) bool {
+ if v, ok := MatchType_value[s]; ok {
+ *x = MatchType(v)
+ return true
+ }
+ return false
+}
+
+type Operation int32
+
+const (
+ Operation_OPERATION_UNSPECIFIED Operation = 0
+ Operation_GET Operation = 1
+ Operation_HEAD Operation = 2
+ Operation_PUT Operation = 3
+ Operation_DELETE Operation = 4
+ Operation_SEARCH Operation = 5
+ Operation_GETRANGE Operation = 6
+ Operation_GETRANGEHASH Operation = 7
+)
+
+var (
+ Operation_name = map[int32]string{
+ 0: "OPERATION_UNSPECIFIED",
+ 1: "GET",
+ 2: "HEAD",
+ 3: "PUT",
+ 4: "DELETE",
+ 5: "SEARCH",
+ 6: "GETRANGE",
+ 7: "GETRANGEHASH",
+ }
+ Operation_value = map[string]int32{
+ "OPERATION_UNSPECIFIED": 0,
+ "GET": 1,
+ "HEAD": 2,
+ "PUT": 3,
+ "DELETE": 4,
+ "SEARCH": 5,
+ "GETRANGE": 6,
+ "GETRANGEHASH": 7,
+ }
+)
+
+func (x Operation) String() string {
+ if v, ok := Operation_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *Operation) FromString(s string) bool {
+ if v, ok := Operation_value[s]; ok {
+ *x = Operation(v)
+ return true
+ }
+ return false
+}
+
+type Action int32
+
+const (
+ Action_ACTION_UNSPECIFIED Action = 0
+ Action_ALLOW Action = 1
+ Action_DENY Action = 2
+)
+
+var (
+ Action_name = map[int32]string{
+ 0: "ACTION_UNSPECIFIED",
+ 1: "ALLOW",
+ 2: "DENY",
+ }
+ Action_value = map[string]int32{
+ "ACTION_UNSPECIFIED": 0,
+ "ALLOW": 1,
+ "DENY": 2,
+ }
+)
+
+func (x Action) String() string {
+ if v, ok := Action_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *Action) FromString(s string) bool {
+ if v, ok := Action_value[s]; ok {
+ *x = Action(v)
+ return true
+ }
+ return false
+}
+
+type HeaderType int32
+
+const (
+ HeaderType_HEADER_UNSPECIFIED HeaderType = 0
+ HeaderType_REQUEST HeaderType = 1
+ HeaderType_OBJECT HeaderType = 2
+ HeaderType_SERVICE HeaderType = 3
+)
+
+var (
+ HeaderType_name = map[int32]string{
+ 0: "HEADER_UNSPECIFIED",
+ 1: "REQUEST",
+ 2: "OBJECT",
+ 3: "SERVICE",
+ }
+ HeaderType_value = map[string]int32{
+ "HEADER_UNSPECIFIED": 0,
+ "REQUEST": 1,
+ "OBJECT": 2,
+ "SERVICE": 3,
+ }
+)
+
+func (x HeaderType) String() string {
+ if v, ok := HeaderType_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *HeaderType) FromString(s string) bool {
+ if v, ok := HeaderType_value[s]; ok {
+ *x = HeaderType(v)
+ return true
+ }
+ return false
+}
+
+type EACLRecord_Filter struct {
+ HeaderType HeaderType `json:"headerType"`
+ MatchType MatchType `json:"matchType"`
+ Key string `json:"key"`
+ Value string `json:"value"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*EACLRecord_Filter)(nil)
+ _ encoding.ProtoUnmarshaler = (*EACLRecord_Filter)(nil)
+ _ json.Marshaler = (*EACLRecord_Filter)(nil)
+ _ json.Unmarshaler = (*EACLRecord_Filter)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *EACLRecord_Filter) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.EnumSize(1, int32(x.HeaderType))
+ size += proto.EnumSize(2, int32(x.MatchType))
+ size += proto.StringSize(3, x.Key)
+ size += proto.StringSize(4, x.Value)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *EACLRecord_Filter) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *EACLRecord_Filter) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if int32(x.HeaderType) != 0 {
+ mm.AppendInt32(1, int32(x.HeaderType))
+ }
+ if int32(x.MatchType) != 0 {
+ mm.AppendInt32(2, int32(x.MatchType))
+ }
+ if len(x.Key) != 0 {
+ mm.AppendString(3, x.Key)
+ }
+ if len(x.Value) != 0 {
+ mm.AppendString(4, x.Value)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *EACLRecord_Filter) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "EACLRecord_Filter")
+ }
+ switch fc.FieldNum {
+ case 1: // HeaderType
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "HeaderType")
+ }
+ x.HeaderType = HeaderType(data)
+ case 2: // MatchType
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MatchType")
+ }
+ x.MatchType = MatchType(data)
+ case 3: // Key
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Key")
+ }
+ x.Key = data
+ case 4: // Value
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Value")
+ }
+ x.Value = data
+ }
+ }
+ return nil
+}
+func (x *EACLRecord_Filter) GetHeaderType() HeaderType {
+ if x != nil {
+ return x.HeaderType
+ }
+ return 0
+}
+func (x *EACLRecord_Filter) SetHeaderType(v HeaderType) {
+ x.HeaderType = v
+}
+func (x *EACLRecord_Filter) GetMatchType() MatchType {
+ if x != nil {
+ return x.MatchType
+ }
+ return 0
+}
+func (x *EACLRecord_Filter) SetMatchType(v MatchType) {
+ x.MatchType = v
+}
+func (x *EACLRecord_Filter) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+func (x *EACLRecord_Filter) SetKey(v string) {
+ x.Key = v
+}
+func (x *EACLRecord_Filter) GetValue() string {
+ if x != nil {
+ return x.Value
+ }
+ return ""
+}
+func (x *EACLRecord_Filter) SetValue(v string) {
+ x.Value = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *EACLRecord_Filter) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *EACLRecord_Filter) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"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 = "\"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)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *EACLRecord_Filter) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *EACLRecord_Filter) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "headerType":
+ {
+ var f HeaderType
+ var parsedValue HeaderType
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := HeaderType_value[v]; ok {
+ parsedValue = HeaderType(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = HeaderType(vv)
+ case float64:
+ parsedValue = HeaderType(v)
+ }
+ f = parsedValue
+ x.HeaderType = f
+ }
+ case "matchType":
+ {
+ var f MatchType
+ var parsedValue MatchType
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := MatchType_value[v]; ok {
+ parsedValue = MatchType(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = MatchType(vv)
+ case float64:
+ parsedValue = MatchType(v)
+ }
+ f = parsedValue
+ x.MatchType = f
+ }
+ case "key":
+ {
+ var f string
+ f = in.String()
+ x.Key = f
+ }
+ case "value":
+ {
+ var f string
+ f = in.String()
+ x.Value = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type EACLRecord_Target struct {
+ Role Role `json:"role"`
+ Keys [][]byte `json:"keys"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*EACLRecord_Target)(nil)
+ _ encoding.ProtoUnmarshaler = (*EACLRecord_Target)(nil)
+ _ json.Marshaler = (*EACLRecord_Target)(nil)
+ _ json.Unmarshaler = (*EACLRecord_Target)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *EACLRecord_Target) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.EnumSize(1, int32(x.Role))
+ size += proto.RepeatedBytesSize(2, x.Keys)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *EACLRecord_Target) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *EACLRecord_Target) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if int32(x.Role) != 0 {
+ mm.AppendInt32(1, int32(x.Role))
+ }
+ for j := range x.Keys {
+ mm.AppendBytes(2, x.Keys[j])
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *EACLRecord_Target) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "EACLRecord_Target")
+ }
+ switch fc.FieldNum {
+ case 1: // Role
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Role")
+ }
+ x.Role = Role(data)
+ case 2: // Keys
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Keys")
+ }
+ x.Keys = append(x.Keys, data)
+ }
+ }
+ return nil
+}
+func (x *EACLRecord_Target) GetRole() Role {
+ if x != nil {
+ return x.Role
+ }
+ return 0
+}
+func (x *EACLRecord_Target) SetRole(v Role) {
+ x.Role = v
+}
+func (x *EACLRecord_Target) GetKeys() [][]byte {
+ if x != nil {
+ return x.Keys
+ }
+ return nil
+}
+func (x *EACLRecord_Target) SetKeys(v [][]byte) {
+ x.Keys = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *EACLRecord_Target) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *EACLRecord_Target) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *EACLRecord_Target) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *EACLRecord_Target) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "role":
+ {
+ var f Role
+ var parsedValue Role
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := Role_value[v]; ok {
+ parsedValue = Role(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = Role(vv)
+ case float64:
+ parsedValue = Role(v)
+ }
+ f = parsedValue
+ x.Role = f
+ }
+ case "keys":
+ {
+ var f []byte
+ var list [][]byte
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Keys = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type EACLRecord struct {
+ Operation Operation `json:"operation"`
+ Action Action `json:"action"`
+ Filters []EACLRecord_Filter `json:"filters"`
+ Targets []EACLRecord_Target `json:"targets"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*EACLRecord)(nil)
+ _ encoding.ProtoUnmarshaler = (*EACLRecord)(nil)
+ _ json.Marshaler = (*EACLRecord)(nil)
+ _ json.Unmarshaler = (*EACLRecord)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *EACLRecord) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.EnumSize(1, int32(x.Operation))
+ size += proto.EnumSize(2, int32(x.Action))
+ for i := range x.Filters {
+ size += proto.NestedStructureSizeUnchecked(3, &x.Filters[i])
+ }
+ for i := range x.Targets {
+ size += proto.NestedStructureSizeUnchecked(4, &x.Targets[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *EACLRecord) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *EACLRecord) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if int32(x.Operation) != 0 {
+ mm.AppendInt32(1, int32(x.Operation))
+ }
+ if int32(x.Action) != 0 {
+ mm.AppendInt32(2, int32(x.Action))
+ }
+ for i := range x.Filters {
+ x.Filters[i].EmitProtobuf(mm.AppendMessage(3))
+ }
+ for i := range x.Targets {
+ x.Targets[i].EmitProtobuf(mm.AppendMessage(4))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *EACLRecord) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "EACLRecord")
+ }
+ switch fc.FieldNum {
+ case 1: // Operation
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Operation")
+ }
+ x.Operation = Operation(data)
+ case 2: // Action
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Action")
+ }
+ x.Action = Action(data)
+ case 3: // Filters
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Filters")
+ }
+ x.Filters = append(x.Filters, EACLRecord_Filter{})
+ ff := &x.Filters[len(x.Filters)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 4: // Targets
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Targets")
+ }
+ x.Targets = append(x.Targets, EACLRecord_Target{})
+ ff := &x.Targets[len(x.Targets)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *EACLRecord) GetOperation() Operation {
+ if x != nil {
+ return x.Operation
+ }
+ return 0
+}
+func (x *EACLRecord) SetOperation(v Operation) {
+ x.Operation = v
+}
+func (x *EACLRecord) GetAction() Action {
+ if x != nil {
+ return x.Action
+ }
+ return 0
+}
+func (x *EACLRecord) SetAction(v Action) {
+ x.Action = v
+}
+func (x *EACLRecord) GetFilters() []EACLRecord_Filter {
+ if x != nil {
+ return x.Filters
+ }
+ return nil
+}
+func (x *EACLRecord) SetFilters(v []EACLRecord_Filter) {
+ x.Filters = v
+}
+func (x *EACLRecord) GetTargets() []EACLRecord_Target {
+ if x != nil {
+ return x.Targets
+ }
+ return nil
+}
+func (x *EACLRecord) SetTargets(v []EACLRecord_Target) {
+ x.Targets = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *EACLRecord) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *EACLRecord) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"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 = "\"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 = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *EACLRecord) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *EACLRecord) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "operation":
+ {
+ var f Operation
+ var parsedValue Operation
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := Operation_value[v]; ok {
+ parsedValue = Operation(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = Operation(vv)
+ case float64:
+ parsedValue = Operation(v)
+ }
+ f = parsedValue
+ x.Operation = f
+ }
+ case "action":
+ {
+ var f Action
+ var parsedValue Action
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := Action_value[v]; ok {
+ parsedValue = Action(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = Action(vv)
+ case float64:
+ parsedValue = Action(v)
+ }
+ f = parsedValue
+ x.Action = f
+ }
+ case "filters":
+ {
+ var f EACLRecord_Filter
+ var list []EACLRecord_Filter
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = EACLRecord_Filter{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Filters = list
+ in.Delim(']')
+ }
+ case "targets":
+ {
+ var f EACLRecord_Target
+ var list []EACLRecord_Target
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = EACLRecord_Target{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Targets = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type EACLTable struct {
+ Version *grpc.Version `json:"version"`
+ ContainerId *grpc.ContainerID `json:"containerID"`
+ Records []EACLRecord `json:"records"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*EACLTable)(nil)
+ _ encoding.ProtoUnmarshaler = (*EACLTable)(nil)
+ _ json.Marshaler = (*EACLTable)(nil)
+ _ json.Unmarshaler = (*EACLTable)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *EACLTable) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Version)
+ size += proto.NestedStructureSize(2, x.ContainerId)
+ for i := range x.Records {
+ size += proto.NestedStructureSizeUnchecked(3, &x.Records[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *EACLTable) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *EACLTable) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Version != nil {
+ x.Version.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.ContainerId != nil {
+ x.ContainerId.EmitProtobuf(mm.AppendMessage(2))
+ }
+ for i := range x.Records {
+ x.Records[i].EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *EACLTable) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "EACLTable")
+ }
+ switch fc.FieldNum {
+ case 1: // Version
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Version")
+ }
+ x.Version = new(grpc.Version)
+ if err := x.Version.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // ContainerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ContainerId")
+ }
+ x.ContainerId = new(grpc.ContainerID)
+ if err := x.ContainerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // Records
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Records")
+ }
+ x.Records = append(x.Records, EACLRecord{})
+ ff := &x.Records[len(x.Records)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *EACLTable) GetVersion() *grpc.Version {
+ if x != nil {
+ return x.Version
+ }
+ return nil
+}
+func (x *EACLTable) SetVersion(v *grpc.Version) {
+ x.Version = v
+}
+func (x *EACLTable) GetContainerId() *grpc.ContainerID {
+ if x != nil {
+ return x.ContainerId
+ }
+ return nil
+}
+func (x *EACLTable) SetContainerId(v *grpc.ContainerID) {
+ x.ContainerId = v
+}
+func (x *EACLTable) GetRecords() []EACLRecord {
+ if x != nil {
+ return x.Records
+ }
+ return nil
+}
+func (x *EACLTable) SetRecords(v []EACLRecord) {
+ x.Records = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *EACLTable) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *EACLTable) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *EACLTable) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *EACLTable) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "version":
+ {
+ var f *grpc.Version
+ f = new(grpc.Version)
+ f.UnmarshalEasyJSON(in)
+ x.Version = f
+ }
+ case "containerID":
+ {
+ var f *grpc.ContainerID
+ f = new(grpc.ContainerID)
+ f.UnmarshalEasyJSON(in)
+ x.ContainerId = f
+ }
+ case "records":
+ {
+ var f EACLRecord
+ var list []EACLRecord
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = EACLRecord{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Records = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type BearerToken_Body_TokenLifetime struct {
+ Exp uint64 `json:"exp"`
+ Nbf uint64 `json:"nbf"`
+ Iat uint64 `json:"iat"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*BearerToken_Body_TokenLifetime)(nil)
+ _ encoding.ProtoUnmarshaler = (*BearerToken_Body_TokenLifetime)(nil)
+ _ json.Marshaler = (*BearerToken_Body_TokenLifetime)(nil)
+ _ json.Unmarshaler = (*BearerToken_Body_TokenLifetime)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *BearerToken_Body_TokenLifetime) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.UInt64Size(1, x.Exp)
+ size += proto.UInt64Size(2, x.Nbf)
+ size += proto.UInt64Size(3, x.Iat)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *BearerToken_Body_TokenLifetime) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *BearerToken_Body_TokenLifetime) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Exp != 0 {
+ mm.AppendUint64(1, x.Exp)
+ }
+ if x.Nbf != 0 {
+ mm.AppendUint64(2, x.Nbf)
+ }
+ if x.Iat != 0 {
+ mm.AppendUint64(3, x.Iat)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *BearerToken_Body_TokenLifetime) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "BearerToken_Body_TokenLifetime")
+ }
+ switch fc.FieldNum {
+ case 1: // Exp
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Exp")
+ }
+ x.Exp = data
+ case 2: // Nbf
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Nbf")
+ }
+ x.Nbf = data
+ case 3: // Iat
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Iat")
+ }
+ x.Iat = data
+ }
+ }
+ return nil
+}
+func (x *BearerToken_Body_TokenLifetime) GetExp() uint64 {
+ if x != nil {
+ return x.Exp
+ }
+ return 0
+}
+func (x *BearerToken_Body_TokenLifetime) SetExp(v uint64) {
+ x.Exp = v
+}
+func (x *BearerToken_Body_TokenLifetime) GetNbf() uint64 {
+ if x != nil {
+ return x.Nbf
+ }
+ return 0
+}
+func (x *BearerToken_Body_TokenLifetime) SetNbf(v uint64) {
+ x.Nbf = v
+}
+func (x *BearerToken_Body_TokenLifetime) GetIat() uint64 {
+ if x != nil {
+ return x.Iat
+ }
+ return 0
+}
+func (x *BearerToken_Body_TokenLifetime) SetIat(v uint64) {
+ x.Iat = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *BearerToken_Body_TokenLifetime) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *BearerToken_Body_TokenLifetime) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"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 = "\"iat\":"
+ out.RawString(prefix)
+ out.RawByte('"')
+ out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Iat, 10)
+ out.RawByte('"')
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *BearerToken_Body_TokenLifetime) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *BearerToken_Body_TokenLifetime) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "exp":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.Exp = f
+ }
+ case "nbf":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.Nbf = f
+ }
+ case "iat":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.Iat = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type BearerToken_Body_APEOverride struct {
+ Target *grpc1.ChainTarget `json:"target"`
+ Chains []grpc1.Chain `json:"chains"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*BearerToken_Body_APEOverride)(nil)
+ _ encoding.ProtoUnmarshaler = (*BearerToken_Body_APEOverride)(nil)
+ _ json.Marshaler = (*BearerToken_Body_APEOverride)(nil)
+ _ json.Unmarshaler = (*BearerToken_Body_APEOverride)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *BearerToken_Body_APEOverride) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Target)
+ for i := range x.Chains {
+ size += proto.NestedStructureSizeUnchecked(2, &x.Chains[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *BearerToken_Body_APEOverride) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *BearerToken_Body_APEOverride) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Target != nil {
+ x.Target.EmitProtobuf(mm.AppendMessage(1))
+ }
+ for i := range x.Chains {
+ x.Chains[i].EmitProtobuf(mm.AppendMessage(2))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *BearerToken_Body_APEOverride) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "BearerToken_Body_APEOverride")
+ }
+ switch fc.FieldNum {
+ case 1: // Target
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Target")
+ }
+ x.Target = new(grpc1.ChainTarget)
+ if err := x.Target.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Chains
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Chains")
+ }
+ x.Chains = append(x.Chains, grpc1.Chain{})
+ ff := &x.Chains[len(x.Chains)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *BearerToken_Body_APEOverride) GetTarget() *grpc1.ChainTarget {
+ if x != nil {
+ return x.Target
+ }
+ return nil
+}
+func (x *BearerToken_Body_APEOverride) SetTarget(v *grpc1.ChainTarget) {
+ x.Target = v
+}
+func (x *BearerToken_Body_APEOverride) GetChains() []grpc1.Chain {
+ if x != nil {
+ return x.Chains
+ }
+ return nil
+}
+func (x *BearerToken_Body_APEOverride) SetChains(v []grpc1.Chain) {
+ x.Chains = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *BearerToken_Body_APEOverride) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *BearerToken_Body_APEOverride) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"target\":"
+ out.RawString(prefix)
+ x.Target.MarshalEasyJSON(out)
+ }
+ {
+ 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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *BearerToken_Body_APEOverride) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *BearerToken_Body_APEOverride) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "target":
+ {
+ var f *grpc1.ChainTarget
+ f = new(grpc1.ChainTarget)
+ f.UnmarshalEasyJSON(in)
+ x.Target = f
+ }
+ case "chains":
+ {
+ var f grpc1.Chain
+ var list []grpc1.Chain
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = grpc1.Chain{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Chains = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type BearerToken_Body struct {
+ EaclTable *EACLTable `json:"eaclTable"`
+ OwnerId *grpc.OwnerID `json:"ownerID"`
+ Lifetime *BearerToken_Body_TokenLifetime `json:"lifetime"`
+ AllowImpersonate bool `json:"allowImpersonate"`
+ ApeOverride *BearerToken_Body_APEOverride `json:"apeOverride"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*BearerToken_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*BearerToken_Body)(nil)
+ _ json.Marshaler = (*BearerToken_Body)(nil)
+ _ json.Unmarshaler = (*BearerToken_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *BearerToken_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.EaclTable)
+ size += proto.NestedStructureSize(2, x.OwnerId)
+ size += proto.NestedStructureSize(3, x.Lifetime)
+ size += proto.BoolSize(4, x.AllowImpersonate)
+ size += proto.NestedStructureSize(5, x.ApeOverride)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *BearerToken_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *BearerToken_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.EaclTable != nil {
+ x.EaclTable.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.OwnerId != nil {
+ x.OwnerId.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.Lifetime != nil {
+ x.Lifetime.EmitProtobuf(mm.AppendMessage(3))
+ }
+ if x.AllowImpersonate {
+ mm.AppendBool(4, x.AllowImpersonate)
+ }
+ if x.ApeOverride != nil {
+ x.ApeOverride.EmitProtobuf(mm.AppendMessage(5))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *BearerToken_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "BearerToken_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // EaclTable
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "EaclTable")
+ }
+ x.EaclTable = new(EACLTable)
+ if err := x.EaclTable.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // OwnerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "OwnerId")
+ }
+ x.OwnerId = new(grpc.OwnerID)
+ if err := x.OwnerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // Lifetime
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Lifetime")
+ }
+ x.Lifetime = new(BearerToken_Body_TokenLifetime)
+ if err := x.Lifetime.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 4: // AllowImpersonate
+ data, ok := fc.Bool()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "AllowImpersonate")
+ }
+ x.AllowImpersonate = data
+ case 5: // ApeOverride
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ApeOverride")
+ }
+ x.ApeOverride = new(BearerToken_Body_APEOverride)
+ if err := x.ApeOverride.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *BearerToken_Body) GetEaclTable() *EACLTable {
+ if x != nil {
+ return x.EaclTable
+ }
+ return nil
+}
+func (x *BearerToken_Body) SetEaclTable(v *EACLTable) {
+ x.EaclTable = v
+}
+func (x *BearerToken_Body) GetOwnerId() *grpc.OwnerID {
+ if x != nil {
+ return x.OwnerId
+ }
+ return nil
+}
+func (x *BearerToken_Body) SetOwnerId(v *grpc.OwnerID) {
+ x.OwnerId = v
+}
+func (x *BearerToken_Body) GetLifetime() *BearerToken_Body_TokenLifetime {
+ if x != nil {
+ return x.Lifetime
+ }
+ return nil
+}
+func (x *BearerToken_Body) SetLifetime(v *BearerToken_Body_TokenLifetime) {
+ x.Lifetime = v
+}
+func (x *BearerToken_Body) GetAllowImpersonate() bool {
+ if x != nil {
+ return x.AllowImpersonate
+ }
+ return false
+}
+func (x *BearerToken_Body) SetAllowImpersonate(v bool) {
+ x.AllowImpersonate = v
+}
+func (x *BearerToken_Body) GetApeOverride() *BearerToken_Body_APEOverride {
+ if x != nil {
+ return x.ApeOverride
+ }
+ return nil
+}
+func (x *BearerToken_Body) SetApeOverride(v *BearerToken_Body_APEOverride) {
+ x.ApeOverride = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *BearerToken_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *BearerToken_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"eaclTable\":"
+ out.RawString(prefix)
+ x.EaclTable.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 = "\"lifetime\":"
+ out.RawString(prefix)
+ x.Lifetime.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"apeOverride\":"
+ out.RawString(prefix)
+ x.ApeOverride.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *BearerToken_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *BearerToken_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "eaclTable":
+ {
+ var f *EACLTable
+ f = new(EACLTable)
+ f.UnmarshalEasyJSON(in)
+ x.EaclTable = f
+ }
+ case "ownerID":
+ {
+ var f *grpc.OwnerID
+ f = new(grpc.OwnerID)
+ f.UnmarshalEasyJSON(in)
+ x.OwnerId = f
+ }
+ case "lifetime":
+ {
+ var f *BearerToken_Body_TokenLifetime
+ f = new(BearerToken_Body_TokenLifetime)
+ f.UnmarshalEasyJSON(in)
+ x.Lifetime = f
+ }
+ case "allowImpersonate":
+ {
+ var f bool
+ f = in.Bool()
+ x.AllowImpersonate = f
+ }
+ case "apeOverride":
+ {
+ var f *BearerToken_Body_APEOverride
+ f = new(BearerToken_Body_APEOverride)
+ f.UnmarshalEasyJSON(in)
+ x.ApeOverride = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type BearerToken struct {
+ Body *BearerToken_Body `json:"body"`
+ Signature *grpc.Signature `json:"signature"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*BearerToken)(nil)
+ _ encoding.ProtoUnmarshaler = (*BearerToken)(nil)
+ _ json.Marshaler = (*BearerToken)(nil)
+ _ json.Unmarshaler = (*BearerToken)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *BearerToken) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.Signature)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *BearerToken) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *BearerToken) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Signature != nil {
+ x.Signature.EmitProtobuf(mm.AppendMessage(2))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *BearerToken) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "BearerToken")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(BearerToken_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Signature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Signature")
+ }
+ x.Signature = new(grpc.Signature)
+ if err := x.Signature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *BearerToken) GetBody() *BearerToken_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *BearerToken) SetBody(v *BearerToken_Body) {
+ x.Body = v
+}
+func (x *BearerToken) GetSignature() *grpc.Signature {
+ if x != nil {
+ return x.Signature
+ }
+ return nil
+}
+func (x *BearerToken) SetSignature(v *grpc.Signature) {
+ x.Signature = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *BearerToken) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *BearerToken) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"signature\":"
+ out.RawString(prefix)
+ x.Signature.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *BearerToken) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *BearerToken) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *BearerToken_Body
+ f = new(BearerToken_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "signature":
+ {
+ var f *grpc.Signature
+ f = new(grpc.Signature)
+ f.UnmarshalEasyJSON(in)
+ x.Signature = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/acl/grpc/types_frostfs_fuzz.go b/api/acl/grpc/types_frostfs_fuzz.go
new file mode 100644
index 0000000..5d5b763
--- /dev/null
+++ b/api/acl/grpc/types_frostfs_fuzz.go
@@ -0,0 +1,64 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package acl
+
+func DoFuzzProtoEACLRecord(data []byte) int {
+ msg := new(EACLRecord)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONEACLRecord(data []byte) int {
+ msg := new(EACLRecord)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoEACLTable(data []byte) int {
+ msg := new(EACLTable)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONEACLTable(data []byte) int {
+ msg := new(EACLTable)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoBearerToken(data []byte) int {
+ msg := new(BearerToken)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONBearerToken(data []byte) int {
+ msg := new(BearerToken)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/acl/grpc/types_frostfs_test.go b/api/acl/grpc/types_frostfs_test.go
new file mode 100644
index 0000000..c6d1c43
--- /dev/null
+++ b/api/acl/grpc/types_frostfs_test.go
@@ -0,0 +1,41 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package acl
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoEACLRecord(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoEACLRecord(data)
+ })
+}
+func FuzzJSONEACLRecord(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONEACLRecord(data)
+ })
+}
+func FuzzProtoEACLTable(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoEACLTable(data)
+ })
+}
+func FuzzJSONEACLTable(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONEACLTable(data)
+ })
+}
+func FuzzProtoBearerToken(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoBearerToken(data)
+ })
+}
+func FuzzJSONBearerToken(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONBearerToken(data)
+ })
+}
diff --git a/api/acl/json.go b/api/acl/json.go
new file mode 100644
index 0000000..9192956
--- /dev/null
+++ b/api/acl/json.go
@@ -0,0 +1,70 @@
+package acl
+
+import (
+ acl "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+)
+
+func (f *HeaderFilter) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(f)
+}
+
+func (f *HeaderFilter) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(f, data, new(acl.EACLRecord_Filter))
+}
+
+func (t *Target) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(t)
+}
+
+func (t *Target) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(t, data, new(acl.EACLRecord_Target))
+}
+
+func (a *APEOverride) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(a)
+}
+
+func (a *APEOverride) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(a, data, new(acl.BearerToken_Body_APEOverride))
+}
+
+func (r *Record) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(r)
+}
+
+func (r *Record) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(r, data, new(acl.EACLRecord))
+}
+
+func (t *Table) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(t)
+}
+
+func (t *Table) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(t, data, new(acl.EACLTable))
+}
+
+func (l *TokenLifetime) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(l)
+}
+
+func (l *TokenLifetime) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(l, data, new(acl.BearerToken_Body_TokenLifetime))
+}
+
+func (bt *BearerTokenBody) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(bt)
+}
+
+func (bt *BearerTokenBody) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(bt, data, new(acl.BearerToken_Body))
+}
+
+func (bt *BearerToken) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(bt)
+}
+
+func (bt *BearerToken) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(bt, data, new(acl.BearerToken))
+}
diff --git a/api/acl/marshal.go b/api/acl/marshal.go
new file mode 100644
index 0000000..29bfa06
--- /dev/null
+++ b/api/acl/marshal.go
@@ -0,0 +1,350 @@
+package acl
+
+import (
+ acl "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ protoutil "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+)
+
+const (
+ filterHeaderTypeField = 1
+ filterMatchTypeField = 2
+ filterNameField = 3
+ filterValueField = 4
+
+ targetTypeField = 1
+ targetKeysField = 2
+
+ recordOperationField = 1
+ recordActionField = 2
+ recordFiltersField = 3
+ recordTargetsField = 4
+
+ tableVersionField = 1
+ tableContainerIDField = 2
+ tableRecordsField = 3
+
+ lifetimeExpirationField = 1
+ lifetimeNotValidBeforeField = 2
+ lifetimeIssuedAtField = 3
+
+ tokenAPEChainsTargetField = 1
+ tokenAPEChainsChainsField = 2
+
+ bearerTokenBodyACLField = 1
+ bearerTokenBodyOwnerField = 2
+ bearerTokenBodyLifetimeField = 3
+ bearerTokenBodyImpersonate = 4
+ bearerTokenTokenAPEChainsField = 5
+
+ bearerTokenBodyField = 1
+ bearerTokenSignatureField = 2
+)
+
+// StableMarshal marshals unified acl table structure in a protobuf
+// compatible way without field order shuffle.
+func (t *Table) StableMarshal(buf []byte) []byte {
+ if t == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, t.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.NestedStructureMarshal(tableVersionField, buf[offset:], t.version)
+ offset += protoutil.NestedStructureMarshal(tableContainerIDField, buf[offset:], t.cid)
+
+ for i := range t.records {
+ offset += protoutil.NestedStructureMarshal(tableRecordsField, buf[offset:], &t.records[i])
+ }
+
+ return buf
+}
+
+// StableSize of acl table structure marshalled by StableMarshal function.
+func (t *Table) StableSize() (size int) {
+ if t == nil {
+ return 0
+ }
+
+ size += protoutil.NestedStructureSize(tableVersionField, t.version)
+ size += protoutil.NestedStructureSize(tableContainerIDField, t.cid)
+
+ for i := range t.records {
+ size += protoutil.NestedStructureSize(tableRecordsField, &t.records[i])
+ }
+
+ return size
+}
+
+func (t *Table) Unmarshal(data []byte) error {
+ return message.Unmarshal(t, data, new(acl.EACLTable))
+}
+
+// StableMarshal marshals unified acl record structure in a protobuf
+// compatible way without field order shuffle.
+func (r *Record) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.EnumMarshal(recordOperationField, buf[offset:], int32(r.op))
+ offset += protoutil.EnumMarshal(recordActionField, buf[offset:], int32(r.action))
+
+ for i := range r.filters {
+ offset += protoutil.NestedStructureMarshal(recordFiltersField, buf[offset:], &r.filters[i])
+ }
+
+ for i := range r.targets {
+ offset += protoutil.NestedStructureMarshal(recordTargetsField, buf[offset:], &r.targets[i])
+ }
+
+ return buf
+}
+
+// StableSize of acl record structure marshalled by StableMarshal function.
+func (r *Record) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += protoutil.EnumSize(recordOperationField, int32(r.op))
+ size += protoutil.EnumSize(recordActionField, int32(r.action))
+
+ for i := range r.filters {
+ size += protoutil.NestedStructureSize(recordFiltersField, &r.filters[i])
+ }
+
+ for i := range r.targets {
+ size += protoutil.NestedStructureSize(recordTargetsField, &r.targets[i])
+ }
+
+ return size
+}
+
+func (r *Record) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(acl.EACLRecord))
+}
+
+// StableMarshal marshals unified header filter structure in a protobuf
+// compatible way without field order shuffle.
+func (f *HeaderFilter) StableMarshal(buf []byte) []byte {
+ if f == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, f.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.EnumMarshal(filterHeaderTypeField, buf[offset:], int32(f.hdrType))
+ offset += protoutil.EnumMarshal(filterMatchTypeField, buf[offset:], int32(f.matchType))
+ offset += protoutil.StringMarshal(filterNameField, buf[offset:], f.key)
+ protoutil.StringMarshal(filterValueField, buf[offset:], f.value)
+
+ return buf
+}
+
+// StableSize of header filter structure marshalled by StableMarshal function.
+func (f *HeaderFilter) StableSize() (size int) {
+ if f == nil {
+ return 0
+ }
+
+ size += protoutil.EnumSize(filterHeaderTypeField, int32(f.hdrType))
+ size += protoutil.EnumSize(filterMatchTypeField, int32(f.matchType))
+ size += protoutil.StringSize(filterNameField, f.key)
+ size += protoutil.StringSize(filterValueField, f.value)
+
+ return size
+}
+
+func (f *HeaderFilter) Unmarshal(data []byte) error {
+ return message.Unmarshal(f, data, new(acl.EACLRecord_Filter))
+}
+
+// StableMarshal marshals unified role info structure in a protobuf
+// compatible way without field order shuffle.
+func (t *Target) StableMarshal(buf []byte) []byte {
+ if t == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, t.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.EnumMarshal(targetTypeField, buf[offset:], int32(t.role))
+ protoutil.RepeatedBytesMarshal(targetKeysField, buf[offset:], t.keys)
+
+ return buf
+}
+
+// StableSize of role info structure marshalled by StableMarshal function.
+func (t *Target) StableSize() (size int) {
+ if t == nil {
+ return 0
+ }
+
+ size += protoutil.EnumSize(targetTypeField, int32(t.role))
+ size += protoutil.RepeatedBytesSize(targetKeysField, t.keys)
+
+ return size
+}
+
+func (t *Target) Unmarshal(data []byte) error {
+ return message.Unmarshal(t, data, new(acl.EACLRecord_Target))
+}
+
+func (l *TokenLifetime) StableMarshal(buf []byte) []byte {
+ if l == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, l.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.UInt64Marshal(lifetimeExpirationField, buf[offset:], l.exp)
+ offset += protoutil.UInt64Marshal(lifetimeNotValidBeforeField, buf[offset:], l.nbf)
+ protoutil.UInt64Marshal(lifetimeIssuedAtField, buf[offset:], l.iat)
+
+ return buf
+}
+
+func (l *TokenLifetime) StableSize() (size int) {
+ if l == nil {
+ return 0
+ }
+
+ size += protoutil.UInt64Size(lifetimeExpirationField, l.exp)
+ size += protoutil.UInt64Size(lifetimeNotValidBeforeField, l.nbf)
+ size += protoutil.UInt64Size(lifetimeIssuedAtField, l.iat)
+
+ return size
+}
+
+func (l *TokenLifetime) Unmarshal(data []byte) error {
+ return message.Unmarshal(l, data, new(acl.BearerToken_Body_TokenLifetime))
+}
+
+func (c *APEOverride) StableMarshal(buf []byte) []byte {
+ if c == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, c.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.NestedStructureMarshal(tokenAPEChainsTargetField, buf[offset:], c.target)
+ for i := range c.chains {
+ offset += protoutil.NestedStructureMarshal(tokenAPEChainsChainsField, buf[offset:], c.chains[i])
+ }
+
+ return buf
+}
+
+func (c *APEOverride) StableSize() (size int) {
+ if c == nil {
+ return 0
+ }
+
+ size += protoutil.NestedStructureSize(tokenAPEChainsTargetField, c.target)
+ for i := range c.chains {
+ size += protoutil.NestedStructureSize(tokenAPEChainsChainsField, c.chains[i])
+ }
+
+ return size
+}
+
+func (c *APEOverride) Unmarshal(data []byte) error {
+ return message.Unmarshal(c, data, new(acl.BearerToken_Body_APEOverride))
+}
+
+func (bt *BearerTokenBody) StableMarshal(buf []byte) []byte {
+ if bt == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, bt.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.NestedStructureMarshal(bearerTokenBodyACLField, buf[offset:], bt.eacl)
+ offset += protoutil.NestedStructureMarshal(bearerTokenBodyOwnerField, buf[offset:], bt.ownerID)
+ offset += protoutil.NestedStructureMarshal(bearerTokenBodyLifetimeField, buf[offset:], bt.lifetime)
+ offset += protoutil.BoolMarshal(bearerTokenBodyImpersonate, buf[offset:], bt.impersonate)
+ protoutil.NestedStructureMarshal(bearerTokenTokenAPEChainsField, buf[offset:], bt.apeOverride)
+
+ return buf
+}
+
+func (bt *BearerTokenBody) StableSize() (size int) {
+ if bt == nil {
+ return 0
+ }
+
+ size += protoutil.NestedStructureSize(bearerTokenBodyACLField, bt.eacl)
+ size += protoutil.NestedStructureSize(bearerTokenBodyOwnerField, bt.ownerID)
+ size += protoutil.NestedStructureSize(bearerTokenBodyLifetimeField, bt.lifetime)
+ size += protoutil.BoolSize(bearerTokenBodyImpersonate, bt.impersonate)
+ size += protoutil.NestedStructureSize(bearerTokenTokenAPEChainsField, bt.apeOverride)
+
+ return size
+}
+
+func (bt *BearerTokenBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(bt, data, new(acl.BearerToken_Body))
+}
+
+func (bt *BearerToken) StableMarshal(buf []byte) []byte {
+ if bt == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, bt.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.NestedStructureMarshal(bearerTokenBodyField, buf[offset:], bt.body)
+ protoutil.NestedStructureMarshal(bearerTokenSignatureField, buf[offset:], bt.sig)
+
+ return buf
+}
+
+func (bt *BearerToken) StableSize() (size int) {
+ if bt == nil {
+ return 0
+ }
+
+ size += protoutil.NestedStructureSize(bearerTokenBodyField, bt.body)
+ size += protoutil.NestedStructureSize(bearerTokenSignatureField, bt.sig)
+
+ return size
+}
+
+func (bt *BearerToken) Unmarshal(data []byte) error {
+ return message.Unmarshal(bt, data, new(acl.BearerToken))
+}
diff --git a/api/acl/message_test.go b/api/acl/message_test.go
new file mode 100644
index 0000000..0131137
--- /dev/null
+++ b/api/acl/message_test.go
@@ -0,0 +1,21 @@
+package acl_test
+
+import (
+ "testing"
+
+ acltest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl/test"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ messagetest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message/test"
+)
+
+func TestMessageConvert(t *testing.T) {
+ messagetest.TestRPCMessage(t,
+ func(empty bool) message.Message { return acltest.GenerateFilter(empty) },
+ func(empty bool) message.Message { return acltest.GenerateTarget(empty) },
+ func(empty bool) message.Message { return acltest.GenerateRecord(empty) },
+ func(empty bool) message.Message { return acltest.GenerateTable(empty) },
+ func(empty bool) message.Message { return acltest.GenerateTokenLifetime(empty) },
+ func(empty bool) message.Message { return acltest.GenerateBearerTokenBody(empty) },
+ func(empty bool) message.Message { return acltest.GenerateBearerToken(empty) },
+ )
+}
diff --git a/api/acl/string.go b/api/acl/string.go
new file mode 100644
index 0000000..e5a4462
--- /dev/null
+++ b/api/acl/string.go
@@ -0,0 +1,110 @@
+package acl
+
+import (
+ acl "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl/grpc"
+)
+
+// String returns string representation of Action.
+func (x Action) String() string {
+ return ActionToGRPCField(x).String()
+}
+
+// FromString parses Action from a string representation.
+// It is a reverse action to String().
+//
+// Returns true if s was parsed successfully.
+func (x *Action) FromString(s string) bool {
+ var g acl.Action
+
+ ok := g.FromString(s)
+
+ if ok {
+ *x = ActionFromGRPCField(g)
+ }
+
+ return ok
+}
+
+// String returns string representation of Role.
+func (x Role) String() string {
+ return RoleToGRPCField(x).String()
+}
+
+// FromString parses Role from a string representation.
+// It is a reverse action to String().
+//
+// Returns true if s was parsed successfully.
+func (x *Role) FromString(s string) bool {
+ var g acl.Role
+
+ ok := g.FromString(s)
+
+ if ok {
+ *x = RoleFromGRPCField(g)
+ }
+
+ return ok
+}
+
+// String returns string representation of Operation.
+func (x Operation) String() string {
+ return OperationToGRPCField(x).String()
+}
+
+// FromString parses Operation from a string representation.
+// It is a reverse action to String().
+//
+// Returns true if s was parsed successfully.
+func (x *Operation) FromString(s string) bool {
+ var g acl.Operation
+
+ ok := g.FromString(s)
+
+ if ok {
+ *x = OperationFromGRPCField(g)
+ }
+
+ return ok
+}
+
+// String returns string representation of MatchType.
+func (x MatchType) String() string {
+ return MatchTypeToGRPCField(x).String()
+}
+
+// FromString parses MatchType from a string representation.
+// It is a reverse action to String().
+//
+// Returns true if s was parsed successfully.
+func (x *MatchType) FromString(s string) bool {
+ var g acl.MatchType
+
+ ok := g.FromString(s)
+
+ if ok {
+ *x = MatchTypeFromGRPCField(g)
+ }
+
+ return ok
+}
+
+// String returns string representation of HeaderType.
+func (x HeaderType) String() string {
+ return HeaderTypeToGRPCField(x).String()
+}
+
+// FromString parses HeaderType from a string representation.
+// It is a reverse action to String().
+//
+// Returns true if s was parsed successfully.
+func (x *HeaderType) FromString(s string) bool {
+ var g acl.HeaderType
+
+ ok := g.FromString(s)
+
+ if ok {
+ *x = HeaderTypeFromGRPCField(g)
+ }
+
+ return ok
+}
diff --git a/api/acl/test/generate.go b/api/acl/test/generate.go
new file mode 100644
index 0000000..8b265ad
--- /dev/null
+++ b/api/acl/test/generate.go
@@ -0,0 +1,144 @@
+package acltest
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
+ apetest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape/test"
+ accountingtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/test"
+)
+
+func GenerateBearerToken(empty bool) *acl.BearerToken {
+ m := new(acl.BearerToken)
+
+ if !empty {
+ m.SetBody(GenerateBearerTokenBody(false))
+ }
+
+ m.SetSignature(accountingtest.GenerateSignature(empty))
+
+ return m
+}
+
+func GenerateBearerTokenBody(empty bool) *acl.BearerTokenBody {
+ m := new(acl.BearerTokenBody)
+
+ if !empty {
+ m.SetOwnerID(accountingtest.GenerateOwnerID(false))
+ m.SetLifetime(GenerateTokenLifetime(false))
+ m.SetAPEOverride(GenerateAPEOverride(empty))
+ }
+
+ return m
+}
+
+func GenerateAPEOverride(empty bool) *acl.APEOverride {
+ var m *acl.APEOverride
+
+ if !empty {
+ m = new(acl.APEOverride)
+ m.SetTarget(apetest.GenerateChainTarget(empty))
+ m.SetChains(apetest.GenerateRawChains(false, 3))
+ }
+
+ return m
+}
+
+func GenerateTable(empty bool) *acl.Table {
+ m := new(acl.Table)
+
+ if !empty {
+ m.SetRecords(GenerateRecords(false))
+ m.SetContainerID(accountingtest.GenerateContainerID(false))
+ }
+
+ m.SetVersion(accountingtest.GenerateVersion(empty))
+
+ return m
+}
+
+func GenerateRecords(empty bool) []acl.Record {
+ var rs []acl.Record
+
+ if !empty {
+ rs = append(rs,
+ *GenerateRecord(false),
+ *GenerateRecord(false),
+ )
+ }
+
+ return rs
+}
+
+func GenerateRecord(empty bool) *acl.Record {
+ m := new(acl.Record)
+
+ if !empty {
+ m.SetAction(acl.ActionAllow)
+ m.SetOperation(acl.OperationGet)
+ m.SetFilters(GenerateFilters(false))
+ m.SetTargets(GenerateTargets(false))
+ }
+
+ return m
+}
+
+func GenerateFilters(empty bool) []acl.HeaderFilter {
+ var fs []acl.HeaderFilter
+
+ if !empty {
+ fs = append(fs,
+ *GenerateFilter(false),
+ *GenerateFilter(false),
+ )
+ }
+
+ return fs
+}
+
+func GenerateFilter(empty bool) *acl.HeaderFilter {
+ m := new(acl.HeaderFilter)
+
+ if !empty {
+ m.SetKey("key")
+ m.SetValue("val")
+ m.SetHeaderType(acl.HeaderTypeRequest)
+ m.SetMatchType(acl.MatchTypeStringEqual)
+ }
+
+ return m
+}
+
+func GenerateTargets(empty bool) []acl.Target {
+ var ts []acl.Target
+
+ if !empty {
+ ts = append(ts,
+ *GenerateTarget(false),
+ *GenerateTarget(false),
+ )
+ }
+
+ return ts
+}
+
+func GenerateTarget(empty bool) *acl.Target {
+ m := new(acl.Target)
+
+ if !empty {
+ m.SetRole(acl.RoleSystem)
+ m.SetKeys([][]byte{{1}, {2}})
+ }
+
+ return m
+}
+
+func GenerateTokenLifetime(empty bool) *acl.TokenLifetime {
+ m := new(acl.TokenLifetime)
+
+ if !empty {
+ m.SetExp(1)
+ m.SetIat(2)
+ m.SetExp(3)
+ }
+
+ return m
+}
diff --git a/api/acl/types.go b/api/acl/types.go
new file mode 100644
index 0000000..e0bae3a
--- /dev/null
+++ b/api/acl/types.go
@@ -0,0 +1,426 @@
+package acl
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+)
+
+// HeaderFilter is a unified structure of FilterInfo
+// message from proto definition.
+type HeaderFilter struct {
+ hdrType HeaderType
+
+ matchType MatchType
+
+ key, value string
+}
+
+// Target is a unified structure of Target
+// message from proto definition.
+type Target struct {
+ role Role
+
+ keys [][]byte
+}
+
+// Record is a unified structure of EACLRecord
+// message from proto definition.
+type Record struct {
+ op Operation
+
+ action Action
+
+ filters []HeaderFilter
+
+ targets []Target
+}
+
+// Table is a unified structure of EACLTable
+// message from proto definition.
+type Table struct {
+ version *refs.Version
+
+ cid *refs.ContainerID
+
+ records []Record
+}
+
+type TokenLifetime struct {
+ exp, nbf, iat uint64
+}
+
+type APEOverride struct {
+ target *ape.ChainTarget
+
+ chains []*ape.Chain
+}
+
+type BearerTokenBody struct {
+ eacl *Table
+
+ ownerID *refs.OwnerID
+
+ lifetime *TokenLifetime
+
+ apeOverride *APEOverride
+
+ impersonate bool
+}
+
+type BearerToken struct {
+ body *BearerTokenBody
+
+ sig *refs.Signature
+}
+
+// Target is a unified enum of MatchType enum from proto definition.
+type MatchType uint32
+
+// HeaderType is a unified enum of HeaderType enum from proto definition.
+type HeaderType uint32
+
+// Action is a unified enum of Action enum from proto definition.
+type Action uint32
+
+// Operation is a unified enum of Operation enum from proto definition.
+type Operation uint32
+
+// Role is a unified enum of Role enum from proto definition.
+type Role uint32
+
+const (
+ MatchTypeUnknown MatchType = iota
+ MatchTypeStringEqual
+ MatchTypeStringNotEqual
+)
+
+const (
+ HeaderTypeUnknown HeaderType = iota
+ HeaderTypeRequest
+ HeaderTypeObject
+ HeaderTypeService
+)
+
+const (
+ ActionUnknown Action = iota
+ ActionAllow
+ ActionDeny
+)
+
+const (
+ OperationUnknown Operation = iota
+ OperationGet
+ OperationHead
+ OperationPut
+ OperationDelete
+ OperationSearch
+ OperationRange
+ OperationRangeHash
+)
+
+const (
+ RoleUnknown Role = iota
+ RoleUser
+ RoleSystem
+ RoleOthers
+)
+
+func (f *HeaderFilter) GetHeaderType() HeaderType {
+ if f != nil {
+ return f.hdrType
+ }
+
+ return HeaderTypeUnknown
+}
+
+func (f *HeaderFilter) SetHeaderType(v HeaderType) {
+ f.hdrType = v
+}
+
+func (f *HeaderFilter) GetMatchType() MatchType {
+ if f != nil {
+ return f.matchType
+ }
+
+ return MatchTypeUnknown
+}
+
+func (f *HeaderFilter) SetMatchType(v MatchType) {
+ f.matchType = v
+}
+
+func (f *HeaderFilter) GetKey() string {
+ if f != nil {
+ return f.key
+ }
+
+ return ""
+}
+
+func (f *HeaderFilter) SetKey(v string) {
+ f.key = v
+}
+
+func (f *HeaderFilter) GetValue() string {
+ if f != nil {
+ return f.value
+ }
+
+ return ""
+}
+
+func (f *HeaderFilter) SetValue(v string) {
+ f.value = v
+}
+
+func (t *Target) GetRole() Role {
+ if t != nil {
+ return t.role
+ }
+
+ return RoleUnknown
+}
+
+func (t *Target) SetRole(v Role) {
+ t.role = v
+}
+
+func (t *Target) GetKeys() [][]byte {
+ if t != nil {
+ return t.keys
+ }
+
+ return nil
+}
+
+func (t *Target) SetKeys(v [][]byte) {
+ t.keys = v
+}
+
+func (r *Record) GetOperation() Operation {
+ if r != nil {
+ return r.op
+ }
+
+ return OperationUnknown
+}
+
+func (r *Record) SetOperation(v Operation) {
+ r.op = v
+}
+
+func (r *Record) GetAction() Action {
+ if r != nil {
+ return r.action
+ }
+
+ return ActionUnknown
+}
+
+func (r *Record) SetAction(v Action) {
+ r.action = v
+}
+
+func (r *Record) GetFilters() []HeaderFilter {
+ if r != nil {
+ return r.filters
+ }
+
+ return nil
+}
+
+func (r *Record) SetFilters(v []HeaderFilter) {
+ r.filters = v
+}
+
+func (r *Record) GetTargets() []Target {
+ if r != nil {
+ return r.targets
+ }
+
+ return nil
+}
+
+func (r *Record) SetTargets(v []Target) {
+ r.targets = v
+}
+
+func (t *Table) GetVersion() *refs.Version {
+ if t != nil {
+ return t.version
+ }
+
+ return nil
+}
+
+func (t *Table) SetVersion(v *refs.Version) {
+ t.version = v
+}
+
+func (t *Table) GetContainerID() *refs.ContainerID {
+ if t != nil {
+ return t.cid
+ }
+
+ return nil
+}
+
+func (t *Table) SetContainerID(v *refs.ContainerID) {
+ t.cid = v
+}
+
+func (t *Table) GetRecords() []Record {
+ if t != nil {
+ return t.records
+ }
+
+ return nil
+}
+
+func (t *Table) SetRecords(v []Record) {
+ t.records = v
+}
+
+func (l *TokenLifetime) GetExp() uint64 {
+ if l != nil {
+ return l.exp
+ }
+
+ return 0
+}
+
+func (l *TokenLifetime) SetExp(v uint64) {
+ l.exp = v
+}
+
+func (l *TokenLifetime) GetNbf() uint64 {
+ if l != nil {
+ return l.nbf
+ }
+
+ return 0
+}
+
+func (l *TokenLifetime) SetNbf(v uint64) {
+ l.nbf = v
+}
+
+func (l *TokenLifetime) GetIat() uint64 {
+ if l != nil {
+ return l.iat
+ }
+
+ return 0
+}
+
+func (l *TokenLifetime) SetIat(v uint64) {
+ l.iat = v
+}
+
+func (bt *BearerTokenBody) GetEACL() *Table {
+ if bt != nil {
+ return bt.eacl
+ }
+
+ return nil
+}
+
+func (bt *BearerTokenBody) SetEACL(v *Table) {
+ bt.eacl = v
+}
+
+func (t *APEOverride) GetTarget() *ape.ChainTarget {
+ if t == nil {
+ return nil
+ }
+
+ return t.target
+}
+
+func (t *APEOverride) GetChains() []*ape.Chain {
+ if t == nil {
+ return nil
+ }
+
+ return t.chains
+}
+
+func (t *APEOverride) SetTarget(v *ape.ChainTarget) {
+ t.target = v
+}
+
+func (t *APEOverride) SetChains(v []*ape.Chain) {
+ t.chains = v
+}
+
+func (bt *BearerTokenBody) GetAPEOverride() *APEOverride {
+ if bt != nil {
+ return bt.apeOverride
+ }
+
+ return nil
+}
+
+func (bt *BearerTokenBody) SetAPEOverride(v *APEOverride) {
+ bt.apeOverride = v
+}
+
+func (bt *BearerTokenBody) GetOwnerID() *refs.OwnerID {
+ if bt != nil {
+ return bt.ownerID
+ }
+
+ return nil
+}
+
+func (bt *BearerTokenBody) SetOwnerID(v *refs.OwnerID) {
+ bt.ownerID = v
+}
+
+func (bt *BearerTokenBody) GetLifetime() *TokenLifetime {
+ if bt != nil {
+ return bt.lifetime
+ }
+
+ return nil
+}
+
+func (bt *BearerTokenBody) SetLifetime(v *TokenLifetime) {
+ bt.lifetime = v
+}
+
+func (bt *BearerTokenBody) GetImpersonate() bool {
+ if bt != nil {
+ return bt.impersonate
+ }
+
+ return false
+}
+
+func (bt *BearerTokenBody) SetImpersonate(v bool) {
+ bt.impersonate = v
+}
+
+func (bt *BearerToken) GetBody() *BearerTokenBody {
+ if bt != nil {
+ return bt.body
+ }
+
+ return nil
+}
+
+func (bt *BearerToken) SetBody(v *BearerTokenBody) {
+ bt.body = v
+}
+
+func (bt *BearerToken) GetSignature() *refs.Signature {
+ if bt != nil {
+ return bt.sig
+ }
+
+ return nil
+}
+
+func (bt *BearerToken) SetSignature(v *refs.Signature) {
+ bt.sig = v
+}
diff --git a/api/ape/convert.go b/api/ape/convert.go
new file mode 100644
index 0000000..7bb0bde
--- /dev/null
+++ b/api/ape/convert.go
@@ -0,0 +1,132 @@
+package ape
+
+import (
+ "fmt"
+
+ ape "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+)
+
+func TargetTypeToGRPCField(typ TargetType) ape.TargetType {
+ switch typ {
+ case TargetTypeNamespace:
+ return ape.TargetType_NAMESPACE
+ case TargetTypeContainer:
+ return ape.TargetType_CONTAINER
+ case TargetTypeUser:
+ return ape.TargetType_USER
+ case TargetTypeGroup:
+ return ape.TargetType_GROUP
+ default:
+ return ape.TargetType_UNDEFINED
+ }
+}
+
+func TargetTypeFromGRPCField(typ ape.TargetType) TargetType {
+ switch typ {
+ case ape.TargetType_NAMESPACE:
+ return TargetTypeNamespace
+ case ape.TargetType_CONTAINER:
+ return TargetTypeContainer
+ case ape.TargetType_USER:
+ return TargetTypeUser
+ case ape.TargetType_GROUP:
+ return TargetTypeGroup
+ default:
+ return TargetTypeUndefined
+ }
+}
+
+func TargetTypeToGRPC(typ TargetType) ape.TargetType {
+ return ape.TargetType(typ)
+}
+
+func TargetTypeFromGRPC(typ ape.TargetType) TargetType {
+ return TargetType(typ)
+}
+
+func (v2 *ChainTarget) ToGRPCMessage() grpc.Message {
+ var mgrpc *ape.ChainTarget
+
+ if v2 != nil {
+ mgrpc = new(ape.ChainTarget)
+
+ mgrpc.SetType(TargetTypeToGRPC(v2.GetTargetType()))
+ mgrpc.SetName(v2.GetName())
+ }
+
+ return mgrpc
+}
+
+func (v2 *ChainTarget) FromGRPCMessage(m grpc.Message) error {
+ mgrpc, ok := m.(*ape.ChainTarget)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, mgrpc)
+ }
+
+ v2.SetTargetType(TargetTypeFromGRPC(mgrpc.GetType()))
+ v2.SetName(mgrpc.GetName())
+
+ return nil
+}
+
+func (v2 *ChainRaw) ToGRPCMessage() grpc.Message {
+ var mgrpc *ape.Chain_Raw
+
+ if v2 != nil {
+ mgrpc = new(ape.Chain_Raw)
+
+ mgrpc.SetRaw(v2.GetRaw())
+ }
+
+ return mgrpc
+}
+
+func (v2 *ChainRaw) FromGRPCMessage(m grpc.Message) error {
+ mgrpc, ok := m.(*ape.Chain_Raw)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, mgrpc)
+ }
+
+ v2.SetRaw(mgrpc.GetRaw())
+
+ return nil
+}
+
+func (v2 *Chain) ToGRPCMessage() grpc.Message {
+ var mgrpc *ape.Chain
+
+ if v2 != nil {
+ mgrpc = new(ape.Chain)
+
+ switch chainKind := v2.GetKind().(type) {
+ default:
+ panic(fmt.Sprintf("unsupported chain kind: %T", chainKind))
+ case *ChainRaw:
+ mgrpc.SetKind(chainKind.ToGRPCMessage().(*ape.Chain_Raw))
+ }
+ }
+
+ return mgrpc
+}
+
+func (v2 *Chain) FromGRPCMessage(m grpc.Message) error {
+ mgrpc, ok := m.(*ape.Chain)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, mgrpc)
+ }
+
+ switch chainKind := mgrpc.GetKind().(type) {
+ default:
+ return fmt.Errorf("unsupported chain kind: %T", chainKind)
+ case *ape.Chain_Raw:
+ chainRaw := new(ChainRaw)
+ if err := chainRaw.FromGRPCMessage(chainKind); err != nil {
+ return err
+ }
+ v2.SetKind(chainRaw)
+ }
+
+ return nil
+}
diff --git a/api/ape/grpc/types_frostfs.pb.go b/api/ape/grpc/types_frostfs.pb.go
new file mode 100644
index 0000000..0e204bd
--- /dev/null
+++ b/api/ape/grpc/types_frostfs.pb.go
@@ -0,0 +1,430 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package ape
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+ strconv "strconv"
+)
+
+type TargetType int32
+
+const (
+ TargetType_UNDEFINED TargetType = 0
+ TargetType_NAMESPACE TargetType = 1
+ TargetType_CONTAINER TargetType = 2
+ TargetType_USER TargetType = 3
+ TargetType_GROUP TargetType = 4
+)
+
+var (
+ TargetType_name = map[int32]string{
+ 0: "UNDEFINED",
+ 1: "NAMESPACE",
+ 2: "CONTAINER",
+ 3: "USER",
+ 4: "GROUP",
+ }
+ TargetType_value = map[string]int32{
+ "UNDEFINED": 0,
+ "NAMESPACE": 1,
+ "CONTAINER": 2,
+ "USER": 3,
+ "GROUP": 4,
+ }
+)
+
+func (x TargetType) String() string {
+ if v, ok := TargetType_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *TargetType) FromString(s string) bool {
+ if v, ok := TargetType_value[s]; ok {
+ *x = TargetType(v)
+ return true
+ }
+ return false
+}
+
+type ChainTarget struct {
+ Type TargetType `json:"type"`
+ Name string `json:"name"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ChainTarget)(nil)
+ _ encoding.ProtoUnmarshaler = (*ChainTarget)(nil)
+ _ json.Marshaler = (*ChainTarget)(nil)
+ _ json.Unmarshaler = (*ChainTarget)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ChainTarget) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.EnumSize(1, int32(x.Type))
+ size += proto.StringSize(2, x.Name)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ChainTarget) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ChainTarget) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if int32(x.Type) != 0 {
+ mm.AppendInt32(1, int32(x.Type))
+ }
+ if len(x.Name) != 0 {
+ mm.AppendString(2, x.Name)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ChainTarget) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ChainTarget")
+ }
+ switch fc.FieldNum {
+ case 1: // Type
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Type")
+ }
+ x.Type = TargetType(data)
+ case 2: // Name
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Name")
+ }
+ x.Name = data
+ }
+ }
+ return nil
+}
+func (x *ChainTarget) GetType() TargetType {
+ if x != nil {
+ return x.Type
+ }
+ return 0
+}
+func (x *ChainTarget) SetType(v TargetType) {
+ x.Type = v
+}
+func (x *ChainTarget) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+func (x *ChainTarget) SetName(v string) {
+ x.Name = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ChainTarget) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ChainTarget) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"name\":"
+ out.RawString(prefix)
+ out.String(x.Name)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ChainTarget) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ChainTarget) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "type":
+ {
+ var f TargetType
+ var parsedValue TargetType
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := TargetType_value[v]; ok {
+ parsedValue = TargetType(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = TargetType(vv)
+ case float64:
+ parsedValue = TargetType(v)
+ }
+ f = parsedValue
+ x.Type = f
+ }
+ case "name":
+ {
+ var f string
+ f = in.String()
+ x.Name = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Chain struct {
+ Kind isChain_Kind
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Chain)(nil)
+ _ encoding.ProtoUnmarshaler = (*Chain)(nil)
+ _ json.Marshaler = (*Chain)(nil)
+ _ json.Unmarshaler = (*Chain)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Chain) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ if inner, ok := x.Kind.(*Chain_Raw); ok {
+ size += proto.BytesSize(1, inner.Raw)
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Chain) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Chain) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if inner, ok := x.Kind.(*Chain_Raw); ok {
+ if len(inner.Raw) != 0 {
+ mm.AppendBytes(1, inner.Raw)
+ }
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Chain) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Chain")
+ }
+ switch fc.FieldNum {
+ case 1: // Raw
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Raw")
+ }
+ x.Kind = &Chain_Raw{Raw: data}
+ }
+ }
+ return nil
+}
+func (x *Chain) GetKind() isChain_Kind {
+ if x != nil {
+ return x.Kind
+ }
+ return nil
+}
+func (x *Chain) SetKind(v isChain_Kind) {
+ x.Kind = v
+}
+func (x *Chain) GetRaw() []byte {
+ if xx, ok := x.GetKind().(*Chain_Raw); ok {
+ return xx.Raw
+ }
+ return nil
+}
+func (x *Chain) SetRaw(v *Chain_Raw) {
+ x.Kind = v
+}
+func (x *Chain_Raw) GetRaw() []byte {
+ if x != nil {
+ return x.Raw
+ }
+ return nil
+}
+func (x *Chain_Raw) SetRaw(v []byte) {
+ x.Raw = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Chain) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Chain) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ switch xx := x.Kind.(type) {
+ case *Chain_Raw:
+ {
+ 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("")
+ }
+ }
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Chain) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Chain) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "raw":
+ xx := new(Chain_Raw)
+ x.Kind = xx
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ xx.Raw = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type isChain_Kind interface {
+ isChain_Kind()
+}
+
+type Chain_Raw struct {
+ Raw []byte
+}
+
+func (*Chain_Raw) isChain_Kind() {}
diff --git a/api/ape/grpc/types_frostfs_fuzz.go b/api/ape/grpc/types_frostfs_fuzz.go
new file mode 100644
index 0000000..b7bf367
--- /dev/null
+++ b/api/ape/grpc/types_frostfs_fuzz.go
@@ -0,0 +1,45 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package ape
+
+func DoFuzzProtoChainTarget(data []byte) int {
+ msg := new(ChainTarget)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONChainTarget(data []byte) int {
+ msg := new(ChainTarget)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoChain(data []byte) int {
+ msg := new(Chain)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONChain(data []byte) int {
+ msg := new(Chain)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/ape/grpc/types_frostfs_test.go b/api/ape/grpc/types_frostfs_test.go
new file mode 100644
index 0000000..93d7eea
--- /dev/null
+++ b/api/ape/grpc/types_frostfs_test.go
@@ -0,0 +1,31 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package ape
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoChainTarget(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoChainTarget(data)
+ })
+}
+func FuzzJSONChainTarget(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONChainTarget(data)
+ })
+}
+func FuzzProtoChain(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoChain(data)
+ })
+}
+func FuzzJSONChain(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONChain(data)
+ })
+}
diff --git a/api/ape/json.go b/api/ape/json.go
new file mode 100644
index 0000000..ffa3a8b
--- /dev/null
+++ b/api/ape/json.go
@@ -0,0 +1,14 @@
+package ape
+
+import (
+ ape "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+)
+
+func (t *ChainTarget) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(t)
+}
+
+func (t *ChainTarget) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(t, data, new(ape.ChainTarget))
+}
diff --git a/api/ape/marshal.go b/api/ape/marshal.go
new file mode 100644
index 0000000..e8f377b
--- /dev/null
+++ b/api/ape/marshal.go
@@ -0,0 +1,92 @@
+package ape
+
+import (
+ "fmt"
+
+ ape "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+)
+
+const (
+ chainTargetTargetTypeField = 1
+ chainTargetNameField = 2
+
+ chainRawField = 1
+)
+
+func (t *ChainTarget) StableSize() (size int) {
+ if t == nil {
+ return 0
+ }
+
+ size += proto.EnumSize(chainTargetTargetTypeField, int32(t.targeType))
+ size += proto.StringSize(chainTargetNameField, t.name)
+
+ return size
+}
+
+func (t *ChainTarget) StableMarshal(buf []byte) []byte {
+ if t == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, t.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.EnumMarshal(chainTargetTargetTypeField, buf[offset:], int32(t.targeType))
+ proto.StringMarshal(chainTargetNameField, buf[offset:], t.name)
+
+ return buf
+}
+
+func (t *ChainTarget) Unmarshal(data []byte) error {
+ return message.Unmarshal(t, data, new(ape.ChainTarget))
+}
+
+func (c *Chain) StableSize() (size int) {
+ if c == nil {
+ return 0
+ }
+
+ switch v := c.GetKind().(type) {
+ case *ChainRaw:
+ if v != nil {
+ size += proto.BytesSize(chainRawField, v.GetRaw())
+ }
+ default:
+ panic(fmt.Sprintf("unsupported chain kind: %T", v))
+ }
+
+ return size
+}
+
+func (c *Chain) StableMarshal(buf []byte) []byte {
+ if c == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, c.StableSize())
+ }
+
+ var offset int
+
+ switch v := c.GetKind().(type) {
+ case *ChainRaw:
+ if v != nil {
+ proto.BytesMarshal(chainRawField, buf[offset:], v.GetRaw())
+ }
+ default:
+ panic(fmt.Sprintf("unsupported chain kind: %T", v))
+ }
+
+ return buf
+}
+
+func (c *Chain) Unmarshal(data []byte) error {
+ return message.Unmarshal(c, data, new(ape.Chain))
+}
diff --git a/api/ape/message_test.go b/api/ape/message_test.go
new file mode 100644
index 0000000..23b929b
--- /dev/null
+++ b/api/ape/message_test.go
@@ -0,0 +1,15 @@
+package ape_test
+
+import (
+ "testing"
+
+ apetest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape/test"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ messagetest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message/test"
+)
+
+func TestMessageConvert(t *testing.T) {
+ messagetest.TestRPCMessage(t,
+ func(empty bool) message.Message { return apetest.GenerateChainTarget(empty) },
+ )
+}
diff --git a/api/ape/string.go b/api/ape/string.go
new file mode 100644
index 0000000..1d26c28
--- /dev/null
+++ b/api/ape/string.go
@@ -0,0 +1,18 @@
+package ape
+
+import (
+ apegrpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape/grpc"
+)
+
+func (tt TargetType) String() string {
+ return TargetTypeToGRPCField(tt).String()
+}
+
+func (tt *TargetType) FromString(s string) bool {
+ i, ok := apegrpc.TargetType_value[s]
+ if ok {
+ *tt = TargetType(i)
+ }
+
+ return ok
+}
diff --git a/api/ape/test/generate.go b/api/ape/test/generate.go
new file mode 100644
index 0000000..4fd3dc2
--- /dev/null
+++ b/api/ape/test/generate.go
@@ -0,0 +1,71 @@
+package test
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape"
+)
+
+func GenerateRawChains(empty bool, n int) []*ape.Chain {
+ if empty {
+ return []*ape.Chain{}
+ }
+
+ res := make([]*ape.Chain, n)
+ for i := range res {
+ res[i] = GenerateRawChain(empty)
+ }
+ return res
+}
+
+func GenerateRawChain(empty bool) *ape.Chain {
+ chRaw := new(ape.ChainRaw)
+
+ if empty {
+ chRaw.SetRaw([]byte("{}"))
+ } else {
+ chRaw.SetRaw([]byte(`{
+ "ID": "",
+ "Rules": [
+ {
+ "Status": "Allow",
+ "Actions": {
+ "Inverted": false,
+ "Names": [
+ "GetObject"
+ ]
+ },
+ "Resources": {
+ "Inverted": false,
+ "Names": [
+ "native:object/*"
+ ]
+ },
+ "Any": false,
+ "Condition": [
+ {
+ "Op": "StringEquals",
+ "Object": "Resource",
+ "Key": "Department",
+ "Value": "HR"
+ }
+ ]
+ }
+ ],
+ "MatchType": "DenyPriority"
+ }`))
+ }
+
+ ch := new(ape.Chain)
+ ch.SetKind(chRaw)
+ return ch
+}
+
+func GenerateChainTarget(empty bool) *ape.ChainTarget {
+ m := new(ape.ChainTarget)
+
+ if !empty {
+ m.SetTargetType(ape.TargetTypeContainer)
+ m.SetName("BzQw5HH3feoxFDD5tCT87Y1726qzgLfxEE7wgtoRzB3R")
+ }
+
+ return m
+}
diff --git a/api/ape/types.go b/api/ape/types.go
new file mode 100644
index 0000000..467a441
--- /dev/null
+++ b/api/ape/types.go
@@ -0,0 +1,79 @@
+package ape
+
+type TargetType uint32
+
+const (
+ TargetTypeUndefined TargetType = iota
+ TargetTypeNamespace
+ TargetTypeContainer
+ TargetTypeUser
+ TargetTypeGroup
+)
+
+type ChainTarget struct {
+ targeType TargetType
+
+ name string
+}
+
+func (ct *ChainTarget) SetTargetType(targeType TargetType) {
+ ct.targeType = targeType
+}
+
+func (ct *ChainTarget) SetName(name string) {
+ ct.name = name
+}
+
+func (ct *ChainTarget) GetTargetType() TargetType {
+ if ct != nil {
+ return ct.targeType
+ }
+
+ return 0
+}
+
+func (ct *ChainTarget) GetName() string {
+ if ct != nil {
+ return ct.name
+ }
+
+ return ""
+}
+
+type chainKind interface {
+ isChainKind()
+}
+
+type Chain struct {
+ kind chainKind
+}
+
+func (c *Chain) SetKind(kind chainKind) {
+ c.kind = kind
+}
+
+func (c *Chain) GetKind() chainKind {
+ if c == nil {
+ return nil
+ }
+
+ return c.kind
+}
+
+type ChainRaw struct {
+ Raw []byte
+}
+
+func (*ChainRaw) isChainKind() {}
+
+func (c *ChainRaw) SetRaw(raw []byte) {
+ c.Raw = raw
+}
+
+func (c *ChainRaw) GetRaw() []byte {
+ if c == nil {
+ return nil
+ }
+
+ return c.Raw
+}
diff --git a/api/apemanager/convert.go b/api/apemanager/convert.go
new file mode 100644
index 0000000..5591791
--- /dev/null
+++ b/api/apemanager/convert.go
@@ -0,0 +1,358 @@
+package apemanager
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape"
+ apeGRPC "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape/grpc"
+ apemanager "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/apemanager/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+)
+
+func (reqBody *AddChainRequestBody) ToGRPCMessage() grpc.Message {
+ var reqBodygrpc *apemanager.AddChainRequest_Body
+
+ if reqBody != nil {
+ reqBodygrpc = new(apemanager.AddChainRequest_Body)
+
+ reqBodygrpc.SetTarget(reqBody.GetTarget().ToGRPCMessage().(*apeGRPC.ChainTarget))
+ reqBodygrpc.SetChain(reqBody.GetChain().ToGRPCMessage().(*apeGRPC.Chain))
+ }
+
+ return reqBodygrpc
+}
+
+func (reqBody *AddChainRequestBody) FromGRPCMessage(m grpc.Message) error {
+ reqBodygrpc, ok := m.(*apemanager.AddChainRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, reqBodygrpc)
+ }
+
+ if targetgrpc := reqBodygrpc.GetTarget(); targetgrpc != nil {
+ reqBody.target = new(ape.ChainTarget)
+ if err := reqBody.target.FromGRPCMessage(targetgrpc); err != nil {
+ return err
+ }
+ }
+
+ if chaingrpc := reqBodygrpc.GetChain(); chaingrpc != nil {
+ reqBody.chain = new(ape.Chain)
+ if err := reqBody.GetChain().FromGRPCMessage(chaingrpc); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func (req *AddChainRequest) ToGRPCMessage() grpc.Message {
+ var reqgrpc *apemanager.AddChainRequest
+
+ if req != nil {
+ reqgrpc = new(apemanager.AddChainRequest)
+
+ reqgrpc.SetBody(req.GetBody().ToGRPCMessage().(*apemanager.AddChainRequest_Body))
+ req.RequestHeaders.ToMessage(reqgrpc)
+ }
+
+ return reqgrpc
+}
+
+func (req *AddChainRequest) FromGRPCMessage(m grpc.Message) error {
+ reqgrpc, ok := m.(*apemanager.AddChainRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, reqgrpc)
+ }
+
+ if reqBodygrpc := reqgrpc.GetBody(); reqBodygrpc != nil {
+ req.body = new(AddChainRequestBody)
+ if err := req.body.FromGRPCMessage(reqBodygrpc); err != nil {
+ return err
+ }
+ }
+
+ return req.RequestHeaders.FromMessage(reqgrpc)
+}
+
+func (respBody *AddChainResponseBody) ToGRPCMessage() grpc.Message {
+ var respBodygrpc *apemanager.AddChainResponse_Body
+
+ if respBody != nil {
+ respBodygrpc = new(apemanager.AddChainResponse_Body)
+
+ respBodygrpc.SetChainId(respBody.GetChainID())
+ }
+
+ return respBodygrpc
+}
+
+func (respBody *AddChainResponseBody) FromGRPCMessage(m grpc.Message) error {
+ respBodygrpc, ok := m.(*apemanager.AddChainResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, respBodygrpc)
+ }
+
+ respBody.SetChainID(respBodygrpc.GetChainId())
+
+ return nil
+}
+
+func (resp *AddChainResponse) ToGRPCMessage() grpc.Message {
+ var respgrpc *apemanager.AddChainResponse
+
+ if resp != nil {
+ respgrpc = new(apemanager.AddChainResponse)
+
+ respgrpc.SetBody(resp.body.ToGRPCMessage().(*apemanager.AddChainResponse_Body))
+ resp.ResponseHeaders.ToMessage(respgrpc)
+ }
+
+ return respgrpc
+}
+
+func (resp *AddChainResponse) FromGRPCMessage(m grpc.Message) error {
+ respgrpc, ok := m.(*apemanager.AddChainResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, respgrpc)
+ }
+
+ if respBodygrpc := respgrpc.GetBody(); respBodygrpc != nil {
+ resp.body = new(AddChainResponseBody)
+ if err := resp.body.FromGRPCMessage(respBodygrpc); err != nil {
+ return err
+ }
+ }
+
+ return resp.ResponseHeaders.FromMessage(respgrpc)
+}
+
+func (reqBody *RemoveChainRequestBody) ToGRPCMessage() grpc.Message {
+ var reqBodygrpc *apemanager.RemoveChainRequest_Body
+
+ if reqBody != nil {
+ reqBodygrpc = new(apemanager.RemoveChainRequest_Body)
+
+ reqBodygrpc.SetTarget(reqBody.target.ToGRPCMessage().(*apeGRPC.ChainTarget))
+ reqBodygrpc.SetChainId(reqBody.GetChainID())
+ }
+
+ return reqBodygrpc
+}
+
+func (reqBody *RemoveChainRequestBody) FromGRPCMessage(m grpc.Message) error {
+ reqBodygrpc, ok := m.(*apemanager.RemoveChainRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, reqBodygrpc)
+ }
+
+ if targetgrpc := reqBodygrpc.GetTarget(); targetgrpc != nil {
+ reqBody.target = new(ape.ChainTarget)
+ if err := reqBody.target.FromGRPCMessage(targetgrpc); err != nil {
+ return err
+ }
+ }
+
+ reqBody.SetChainID(reqBodygrpc.GetChainId())
+
+ return nil
+}
+
+func (req *RemoveChainRequest) ToGRPCMessage() grpc.Message {
+ var reqgrpc *apemanager.RemoveChainRequest
+
+ if req != nil {
+ reqgrpc = new(apemanager.RemoveChainRequest)
+
+ reqgrpc.SetBody(req.body.ToGRPCMessage().(*apemanager.RemoveChainRequest_Body))
+ req.RequestHeaders.ToMessage(reqgrpc)
+ }
+
+ return reqgrpc
+}
+
+func (req *RemoveChainRequest) FromGRPCMessage(m grpc.Message) error {
+ reqgrpc, ok := m.(*apemanager.RemoveChainRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, reqgrpc)
+ }
+
+ if reqBodygrpc := reqgrpc.GetBody(); reqBodygrpc != nil {
+ req.body = new(RemoveChainRequestBody)
+ if err := req.body.FromGRPCMessage(reqBodygrpc); err != nil {
+ return err
+ }
+ }
+
+ return req.RequestHeaders.FromMessage(reqgrpc)
+}
+
+func (respBody *RemoveChainResponseBody) ToGRPCMessage() grpc.Message {
+ var respBodygrpc *apemanager.RemoveChainResponse_Body
+
+ if respBody != nil {
+ respBodygrpc = new(apemanager.RemoveChainResponse_Body)
+ }
+
+ return respBodygrpc
+}
+
+func (respBody *RemoveChainResponseBody) FromGRPCMessage(m grpc.Message) error {
+ respBodygrpc, ok := m.(*apemanager.RemoveChainResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, respBodygrpc)
+ }
+
+ return nil
+}
+
+func (resp *RemoveChainResponse) ToGRPCMessage() grpc.Message {
+ var respgrpc *apemanager.RemoveChainResponse
+
+ if resp != nil {
+ respgrpc = new(apemanager.RemoveChainResponse)
+
+ respgrpc.SetBody(resp.body.ToGRPCMessage().(*apemanager.RemoveChainResponse_Body))
+ resp.ResponseHeaders.ToMessage(respgrpc)
+ }
+
+ return respgrpc
+}
+
+func (resp *RemoveChainResponse) FromGRPCMessage(m grpc.Message) error {
+ respgrpc, ok := m.(*apemanager.RemoveChainResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, respgrpc)
+ }
+
+ if respBodygrpc := respgrpc.GetBody(); respBodygrpc != nil {
+ resp.body = new(RemoveChainResponseBody)
+ if err := resp.body.FromGRPCMessage(respBodygrpc); err != nil {
+ return err
+ }
+ }
+
+ return resp.ResponseHeaders.FromMessage(respgrpc)
+}
+
+func (reqBody *ListChainsRequestBody) ToGRPCMessage() grpc.Message {
+ var reqBodygrpc *apemanager.ListChainsRequest_Body
+
+ if reqBody != nil {
+ reqBodygrpc = new(apemanager.ListChainsRequest_Body)
+
+ reqBodygrpc.SetTarget(reqBody.target.ToGRPCMessage().(*apeGRPC.ChainTarget))
+ }
+
+ return reqBodygrpc
+}
+
+func (reqBody *ListChainsRequestBody) FromGRPCMessage(m grpc.Message) error {
+ reqBodygrpc, ok := m.(*apemanager.ListChainsRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, reqBodygrpc)
+ }
+
+ if targetgrpc := reqBodygrpc.GetTarget(); targetgrpc != nil {
+ reqBody.target = new(ape.ChainTarget)
+ if err := reqBody.target.FromGRPCMessage(targetgrpc); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func (req *ListChainsRequest) ToGRPCMessage() grpc.Message {
+ var reqgrpc *apemanager.ListChainsRequest
+
+ if req != nil {
+ reqgrpc = new(apemanager.ListChainsRequest)
+
+ reqgrpc.SetBody(req.body.ToGRPCMessage().(*apemanager.ListChainsRequest_Body))
+ req.RequestHeaders.ToMessage(reqgrpc)
+ }
+
+ return reqgrpc
+}
+
+func (req *ListChainsRequest) FromGRPCMessage(m grpc.Message) error {
+ reqgrpc, ok := m.(*apemanager.ListChainsRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, reqgrpc)
+ }
+
+ if reqBodygrpc := reqgrpc.GetBody(); reqBodygrpc != nil {
+ req.body = new(ListChainsRequestBody)
+ if err := req.body.FromGRPCMessage(reqBodygrpc); err != nil {
+ return err
+ }
+ }
+
+ return req.RequestHeaders.FromMessage(reqgrpc)
+}
+
+func (respBody *ListChainsResponseBody) ToGRPCMessage() grpc.Message {
+ var respBodygrpc *apemanager.ListChainsResponse_Body
+
+ if respBody != nil {
+ respBodygrpc = new(apemanager.ListChainsResponse_Body)
+
+ chainsgrpc := make([]apeGRPC.Chain, 0, len(respBody.GetChains()))
+ for _, chain := range respBody.GetChains() {
+ chainsgrpc = append(chainsgrpc, *chain.ToGRPCMessage().(*apeGRPC.Chain))
+ }
+
+ respBodygrpc.SetChains(chainsgrpc)
+ }
+
+ return respBodygrpc
+}
+
+func (respBody *ListChainsResponseBody) FromGRPCMessage(m grpc.Message) error {
+ respBodygrpc, ok := m.(*apemanager.ListChainsResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, respBodygrpc)
+ }
+
+ chains := make([]*ape.Chain, 0, len(respBodygrpc.GetChains()))
+
+ for _, chaingrpc := range respBodygrpc.GetChains() {
+ chain := new(ape.Chain)
+ if err := chain.FromGRPCMessage(&chaingrpc); err != nil {
+ return err
+ }
+ chains = append(chains, chain)
+ }
+
+ respBody.SetChains(chains)
+
+ return nil
+}
+
+func (resp *ListChainsResponse) ToGRPCMessage() grpc.Message {
+ var respgrpc *apemanager.ListChainsResponse
+
+ if resp != nil {
+ respgrpc = new(apemanager.ListChainsResponse)
+
+ respgrpc.SetBody(resp.body.ToGRPCMessage().(*apemanager.ListChainsResponse_Body))
+ resp.ResponseHeaders.ToMessage(respgrpc)
+ }
+
+ return respgrpc
+}
+
+func (resp *ListChainsResponse) FromGRPCMessage(m grpc.Message) error {
+ respgrpc, ok := m.(*apemanager.ListChainsResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, respgrpc)
+ }
+
+ if respBodygrpc := respgrpc.GetBody(); respBodygrpc != nil {
+ resp.body = new(ListChainsResponseBody)
+ if err := resp.body.FromGRPCMessage(respBodygrpc); err != nil {
+ return err
+ }
+ }
+
+ return resp.ResponseHeaders.FromMessage(respgrpc)
+}
diff --git a/api/apemanager/grpc/service_frostfs.pb.go b/api/apemanager/grpc/service_frostfs.pb.go
new file mode 100644
index 0000000..402c908
--- /dev/null
+++ b/api/apemanager/grpc/service_frostfs.pb.go
@@ -0,0 +1,2337 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package apemanager
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ grpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape/grpc"
+ grpc1 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/grpc"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+)
+
+type AddChainRequest_Body struct {
+ Target *grpc.ChainTarget `json:"target"`
+ Chain *grpc.Chain `json:"chain"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*AddChainRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*AddChainRequest_Body)(nil)
+ _ json.Marshaler = (*AddChainRequest_Body)(nil)
+ _ json.Unmarshaler = (*AddChainRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *AddChainRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Target)
+ size += proto.NestedStructureSize(2, x.Chain)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *AddChainRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *AddChainRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Target != nil {
+ x.Target.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Chain != nil {
+ x.Chain.EmitProtobuf(mm.AppendMessage(2))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *AddChainRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "AddChainRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Target
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Target")
+ }
+ x.Target = new(grpc.ChainTarget)
+ if err := x.Target.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Chain
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Chain")
+ }
+ x.Chain = new(grpc.Chain)
+ if err := x.Chain.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *AddChainRequest_Body) GetTarget() *grpc.ChainTarget {
+ if x != nil {
+ return x.Target
+ }
+ return nil
+}
+func (x *AddChainRequest_Body) SetTarget(v *grpc.ChainTarget) {
+ x.Target = v
+}
+func (x *AddChainRequest_Body) GetChain() *grpc.Chain {
+ if x != nil {
+ return x.Chain
+ }
+ return nil
+}
+func (x *AddChainRequest_Body) SetChain(v *grpc.Chain) {
+ x.Chain = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *AddChainRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *AddChainRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"target\":"
+ out.RawString(prefix)
+ x.Target.MarshalEasyJSON(out)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"chain\":"
+ out.RawString(prefix)
+ x.Chain.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *AddChainRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *AddChainRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "target":
+ {
+ var f *grpc.ChainTarget
+ f = new(grpc.ChainTarget)
+ f.UnmarshalEasyJSON(in)
+ x.Target = f
+ }
+ case "chain":
+ {
+ var f *grpc.Chain
+ f = new(grpc.Chain)
+ f.UnmarshalEasyJSON(in)
+ x.Chain = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type AddChainRequest struct {
+ Body *AddChainRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*AddChainRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*AddChainRequest)(nil)
+ _ json.Marshaler = (*AddChainRequest)(nil)
+ _ json.Unmarshaler = (*AddChainRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *AddChainRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *AddChainRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *AddChainRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *AddChainRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *AddChainRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *AddChainRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "AddChainRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(AddChainRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *AddChainRequest) GetBody() *AddChainRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *AddChainRequest) SetBody(v *AddChainRequest_Body) {
+ x.Body = v
+}
+func (x *AddChainRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *AddChainRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *AddChainRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *AddChainRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *AddChainRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *AddChainRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *AddChainRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *AddChainRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *AddChainRequest_Body
+ f = new(AddChainRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type AddChainResponse_Body struct {
+ ChainId []byte `json:"chainId"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*AddChainResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*AddChainResponse_Body)(nil)
+ _ json.Marshaler = (*AddChainResponse_Body)(nil)
+ _ json.Unmarshaler = (*AddChainResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *AddChainResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.BytesSize(1, x.ChainId)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *AddChainResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *AddChainResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.ChainId) != 0 {
+ mm.AppendBytes(1, x.ChainId)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *AddChainResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "AddChainResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // ChainId
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ChainId")
+ }
+ x.ChainId = data
+ }
+ }
+ return nil
+}
+func (x *AddChainResponse_Body) GetChainId() []byte {
+ if x != nil {
+ return x.ChainId
+ }
+ return nil
+}
+func (x *AddChainResponse_Body) SetChainId(v []byte) {
+ x.ChainId = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *AddChainResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *AddChainResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"chainId\":"
+ out.RawString(prefix)
+ if x.ChainId != nil {
+ out.Base64Bytes(x.ChainId)
+ } else {
+ out.String("")
+ }
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *AddChainResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *AddChainResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "chainId":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.ChainId = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type AddChainResponse struct {
+ Body *AddChainResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*AddChainResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*AddChainResponse)(nil)
+ _ json.Marshaler = (*AddChainResponse)(nil)
+ _ json.Unmarshaler = (*AddChainResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *AddChainResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *AddChainResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *AddChainResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *AddChainResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *AddChainResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *AddChainResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "AddChainResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(AddChainResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *AddChainResponse) GetBody() *AddChainResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *AddChainResponse) SetBody(v *AddChainResponse_Body) {
+ x.Body = v
+}
+func (x *AddChainResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *AddChainResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *AddChainResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *AddChainResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *AddChainResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *AddChainResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *AddChainResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *AddChainResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *AddChainResponse_Body
+ f = new(AddChainResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type RemoveChainRequest_Body struct {
+ Target *grpc.ChainTarget `json:"target"`
+ ChainId []byte `json:"chainId"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*RemoveChainRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*RemoveChainRequest_Body)(nil)
+ _ json.Marshaler = (*RemoveChainRequest_Body)(nil)
+ _ json.Unmarshaler = (*RemoveChainRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *RemoveChainRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Target)
+ size += proto.BytesSize(2, x.ChainId)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *RemoveChainRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *RemoveChainRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Target != nil {
+ x.Target.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if len(x.ChainId) != 0 {
+ mm.AppendBytes(2, x.ChainId)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *RemoveChainRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "RemoveChainRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Target
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Target")
+ }
+ x.Target = new(grpc.ChainTarget)
+ if err := x.Target.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // ChainId
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ChainId")
+ }
+ x.ChainId = data
+ }
+ }
+ return nil
+}
+func (x *RemoveChainRequest_Body) GetTarget() *grpc.ChainTarget {
+ if x != nil {
+ return x.Target
+ }
+ return nil
+}
+func (x *RemoveChainRequest_Body) SetTarget(v *grpc.ChainTarget) {
+ x.Target = v
+}
+func (x *RemoveChainRequest_Body) GetChainId() []byte {
+ if x != nil {
+ return x.ChainId
+ }
+ return nil
+}
+func (x *RemoveChainRequest_Body) SetChainId(v []byte) {
+ x.ChainId = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *RemoveChainRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *RemoveChainRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"target\":"
+ out.RawString(prefix)
+ x.Target.MarshalEasyJSON(out)
+ }
+ {
+ 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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *RemoveChainRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *RemoveChainRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "target":
+ {
+ var f *grpc.ChainTarget
+ f = new(grpc.ChainTarget)
+ f.UnmarshalEasyJSON(in)
+ x.Target = f
+ }
+ case "chainId":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.ChainId = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type RemoveChainRequest struct {
+ Body *RemoveChainRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*RemoveChainRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*RemoveChainRequest)(nil)
+ _ json.Marshaler = (*RemoveChainRequest)(nil)
+ _ json.Unmarshaler = (*RemoveChainRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *RemoveChainRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *RemoveChainRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *RemoveChainRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *RemoveChainRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *RemoveChainRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *RemoveChainRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "RemoveChainRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(RemoveChainRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *RemoveChainRequest) GetBody() *RemoveChainRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *RemoveChainRequest) SetBody(v *RemoveChainRequest_Body) {
+ x.Body = v
+}
+func (x *RemoveChainRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *RemoveChainRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *RemoveChainRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *RemoveChainRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *RemoveChainRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *RemoveChainRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *RemoveChainRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *RemoveChainRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *RemoveChainRequest_Body
+ f = new(RemoveChainRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type RemoveChainResponse_Body struct {
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*RemoveChainResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*RemoveChainResponse_Body)(nil)
+ _ json.Marshaler = (*RemoveChainResponse_Body)(nil)
+ _ json.Unmarshaler = (*RemoveChainResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *RemoveChainResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *RemoveChainResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *RemoveChainResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *RemoveChainResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "RemoveChainResponse_Body")
+ }
+ switch fc.FieldNum {
+ }
+ }
+ return nil
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *RemoveChainResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *RemoveChainResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ out.RawByte('{')
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *RemoveChainResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *RemoveChainResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type RemoveChainResponse struct {
+ Body *RemoveChainResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*RemoveChainResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*RemoveChainResponse)(nil)
+ _ json.Marshaler = (*RemoveChainResponse)(nil)
+ _ json.Unmarshaler = (*RemoveChainResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *RemoveChainResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *RemoveChainResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *RemoveChainResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *RemoveChainResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *RemoveChainResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *RemoveChainResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "RemoveChainResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(RemoveChainResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *RemoveChainResponse) GetBody() *RemoveChainResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *RemoveChainResponse) SetBody(v *RemoveChainResponse_Body) {
+ x.Body = v
+}
+func (x *RemoveChainResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *RemoveChainResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *RemoveChainResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *RemoveChainResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *RemoveChainResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *RemoveChainResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *RemoveChainResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *RemoveChainResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *RemoveChainResponse_Body
+ f = new(RemoveChainResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ListChainsRequest_Body struct {
+ Target *grpc.ChainTarget `json:"target"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ListChainsRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*ListChainsRequest_Body)(nil)
+ _ json.Marshaler = (*ListChainsRequest_Body)(nil)
+ _ json.Unmarshaler = (*ListChainsRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ListChainsRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Target)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ListChainsRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ListChainsRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Target != nil {
+ x.Target.EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ListChainsRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ListChainsRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Target
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Target")
+ }
+ x.Target = new(grpc.ChainTarget)
+ if err := x.Target.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *ListChainsRequest_Body) GetTarget() *grpc.ChainTarget {
+ if x != nil {
+ return x.Target
+ }
+ return nil
+}
+func (x *ListChainsRequest_Body) SetTarget(v *grpc.ChainTarget) {
+ x.Target = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ListChainsRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ListChainsRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"target\":"
+ out.RawString(prefix)
+ x.Target.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ListChainsRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ListChainsRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "target":
+ {
+ var f *grpc.ChainTarget
+ f = new(grpc.ChainTarget)
+ f.UnmarshalEasyJSON(in)
+ x.Target = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ListChainsRequest struct {
+ Body *ListChainsRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ListChainsRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*ListChainsRequest)(nil)
+ _ json.Marshaler = (*ListChainsRequest)(nil)
+ _ json.Unmarshaler = (*ListChainsRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ListChainsRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *ListChainsRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *ListChainsRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ListChainsRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ListChainsRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ListChainsRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ListChainsRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(ListChainsRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *ListChainsRequest) GetBody() *ListChainsRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *ListChainsRequest) SetBody(v *ListChainsRequest_Body) {
+ x.Body = v
+}
+func (x *ListChainsRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *ListChainsRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *ListChainsRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *ListChainsRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ListChainsRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ListChainsRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ListChainsRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ListChainsRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *ListChainsRequest_Body
+ f = new(ListChainsRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ListChainsResponse_Body struct {
+ Chains []grpc.Chain `json:"chains"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ListChainsResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*ListChainsResponse_Body)(nil)
+ _ json.Marshaler = (*ListChainsResponse_Body)(nil)
+ _ json.Unmarshaler = (*ListChainsResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ListChainsResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ for i := range x.Chains {
+ size += proto.NestedStructureSizeUnchecked(1, &x.Chains[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ListChainsResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ListChainsResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ for i := range x.Chains {
+ x.Chains[i].EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ListChainsResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ListChainsResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Chains
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Chains")
+ }
+ x.Chains = append(x.Chains, grpc.Chain{})
+ ff := &x.Chains[len(x.Chains)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *ListChainsResponse_Body) GetChains() []grpc.Chain {
+ if x != nil {
+ return x.Chains
+ }
+ return nil
+}
+func (x *ListChainsResponse_Body) SetChains(v []grpc.Chain) {
+ x.Chains = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ListChainsResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ListChainsResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ListChainsResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ListChainsResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "chains":
+ {
+ var f grpc.Chain
+ var list []grpc.Chain
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = grpc.Chain{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Chains = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ListChainsResponse struct {
+ Body *ListChainsResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ListChainsResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*ListChainsResponse)(nil)
+ _ json.Marshaler = (*ListChainsResponse)(nil)
+ _ json.Unmarshaler = (*ListChainsResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ListChainsResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *ListChainsResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *ListChainsResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ListChainsResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ListChainsResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ListChainsResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ListChainsResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(ListChainsResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *ListChainsResponse) GetBody() *ListChainsResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *ListChainsResponse) SetBody(v *ListChainsResponse_Body) {
+ x.Body = v
+}
+func (x *ListChainsResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *ListChainsResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *ListChainsResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *ListChainsResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ListChainsResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ListChainsResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ListChainsResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ListChainsResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *ListChainsResponse_Body
+ f = new(ListChainsResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/apemanager/grpc/service_frostfs_fuzz.go b/api/apemanager/grpc/service_frostfs_fuzz.go
new file mode 100644
index 0000000..08af63e
--- /dev/null
+++ b/api/apemanager/grpc/service_frostfs_fuzz.go
@@ -0,0 +1,121 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package apemanager
+
+func DoFuzzProtoAddChainRequest(data []byte) int {
+ msg := new(AddChainRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONAddChainRequest(data []byte) int {
+ msg := new(AddChainRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoAddChainResponse(data []byte) int {
+ msg := new(AddChainResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONAddChainResponse(data []byte) int {
+ msg := new(AddChainResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoRemoveChainRequest(data []byte) int {
+ msg := new(RemoveChainRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONRemoveChainRequest(data []byte) int {
+ msg := new(RemoveChainRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoRemoveChainResponse(data []byte) int {
+ msg := new(RemoveChainResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONRemoveChainResponse(data []byte) int {
+ msg := new(RemoveChainResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoListChainsRequest(data []byte) int {
+ msg := new(ListChainsRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONListChainsRequest(data []byte) int {
+ msg := new(ListChainsRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoListChainsResponse(data []byte) int {
+ msg := new(ListChainsResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONListChainsResponse(data []byte) int {
+ msg := new(ListChainsResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/apemanager/grpc/service_frostfs_test.go b/api/apemanager/grpc/service_frostfs_test.go
new file mode 100644
index 0000000..5c4653c
--- /dev/null
+++ b/api/apemanager/grpc/service_frostfs_test.go
@@ -0,0 +1,71 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package apemanager
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoAddChainRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoAddChainRequest(data)
+ })
+}
+func FuzzJSONAddChainRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONAddChainRequest(data)
+ })
+}
+func FuzzProtoAddChainResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoAddChainResponse(data)
+ })
+}
+func FuzzJSONAddChainResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONAddChainResponse(data)
+ })
+}
+func FuzzProtoRemoveChainRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoRemoveChainRequest(data)
+ })
+}
+func FuzzJSONRemoveChainRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONRemoveChainRequest(data)
+ })
+}
+func FuzzProtoRemoveChainResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoRemoveChainResponse(data)
+ })
+}
+func FuzzJSONRemoveChainResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONRemoveChainResponse(data)
+ })
+}
+func FuzzProtoListChainsRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoListChainsRequest(data)
+ })
+}
+func FuzzJSONListChainsRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONListChainsRequest(data)
+ })
+}
+func FuzzProtoListChainsResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoListChainsResponse(data)
+ })
+}
+func FuzzJSONListChainsResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONListChainsResponse(data)
+ })
+}
diff --git a/api/apemanager/grpc/service_grpc.pb.go b/api/apemanager/grpc/service_grpc.pb.go
new file mode 100644
index 0000000..eb11f3f
--- /dev/null
+++ b/api/apemanager/grpc/service_grpc.pb.go
@@ -0,0 +1,245 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.3.0
+// - protoc v5.27.2
+// source: api/apemanager/grpc/service.proto
+
+package apemanager
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+const (
+ APEManagerService_AddChain_FullMethodName = "/frostfs.v2.apemanager.APEManagerService/AddChain"
+ APEManagerService_RemoveChain_FullMethodName = "/frostfs.v2.apemanager.APEManagerService/RemoveChain"
+ APEManagerService_ListChains_FullMethodName = "/frostfs.v2.apemanager.APEManagerService/ListChains"
+)
+
+// APEManagerServiceClient is the client API for APEManagerService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type APEManagerServiceClient interface {
+ // Add a rule chain for a specific target to `Policy` smart contract.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // the chain has been successfully added;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // container (as target) not found;
+ // - **APE_MANAGER_ACCESS_DENIED** (5120, SECTION_APE_MANAGER): \
+ // the operation is denied by the service.
+ AddChain(ctx context.Context, in *AddChainRequest, opts ...grpc.CallOption) (*AddChainResponse, error)
+ // Remove a rule chain for a specific target from `Policy` smart contract.
+ // RemoveChain is an idempotent operation: removal of non-existing rule chain
+ // also means success.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // the chain has been successfully removed;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // container (as target) not found;
+ // - **APE_MANAGER_ACCESS_DENIED** (5120, SECTION_APE_MANAGER): \
+ // the operation is denied by the service.
+ RemoveChain(ctx context.Context, in *RemoveChainRequest, opts ...grpc.CallOption) (*RemoveChainResponse, error)
+ // List chains defined for a specific target from `Policy` smart contract.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // chains have been successfully listed;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // container (as target) not found;
+ // - **APE_MANAGER_ACCESS_DENIED** (5120, SECTION_APE_MANAGER): \
+ // the operation is denied by the service.
+ ListChains(ctx context.Context, in *ListChainsRequest, opts ...grpc.CallOption) (*ListChainsResponse, error)
+}
+
+type aPEManagerServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewAPEManagerServiceClient(cc grpc.ClientConnInterface) APEManagerServiceClient {
+ return &aPEManagerServiceClient{cc}
+}
+
+func (c *aPEManagerServiceClient) AddChain(ctx context.Context, in *AddChainRequest, opts ...grpc.CallOption) (*AddChainResponse, error) {
+ out := new(AddChainResponse)
+ err := c.cc.Invoke(ctx, APEManagerService_AddChain_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *aPEManagerServiceClient) RemoveChain(ctx context.Context, in *RemoveChainRequest, opts ...grpc.CallOption) (*RemoveChainResponse, error) {
+ out := new(RemoveChainResponse)
+ err := c.cc.Invoke(ctx, APEManagerService_RemoveChain_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *aPEManagerServiceClient) ListChains(ctx context.Context, in *ListChainsRequest, opts ...grpc.CallOption) (*ListChainsResponse, error) {
+ out := new(ListChainsResponse)
+ err := c.cc.Invoke(ctx, APEManagerService_ListChains_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// APEManagerServiceServer is the server API for APEManagerService service.
+// All implementations should embed UnimplementedAPEManagerServiceServer
+// for forward compatibility
+type APEManagerServiceServer interface {
+ // Add a rule chain for a specific target to `Policy` smart contract.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // the chain has been successfully added;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // container (as target) not found;
+ // - **APE_MANAGER_ACCESS_DENIED** (5120, SECTION_APE_MANAGER): \
+ // the operation is denied by the service.
+ AddChain(context.Context, *AddChainRequest) (*AddChainResponse, error)
+ // Remove a rule chain for a specific target from `Policy` smart contract.
+ // RemoveChain is an idempotent operation: removal of non-existing rule chain
+ // also means success.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // the chain has been successfully removed;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // container (as target) not found;
+ // - **APE_MANAGER_ACCESS_DENIED** (5120, SECTION_APE_MANAGER): \
+ // the operation is denied by the service.
+ RemoveChain(context.Context, *RemoveChainRequest) (*RemoveChainResponse, error)
+ // List chains defined for a specific target from `Policy` smart contract.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // chains have been successfully listed;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // container (as target) not found;
+ // - **APE_MANAGER_ACCESS_DENIED** (5120, SECTION_APE_MANAGER): \
+ // the operation is denied by the service.
+ ListChains(context.Context, *ListChainsRequest) (*ListChainsResponse, error)
+}
+
+// UnimplementedAPEManagerServiceServer should be embedded to have forward compatible implementations.
+type UnimplementedAPEManagerServiceServer struct {
+}
+
+func (UnimplementedAPEManagerServiceServer) AddChain(context.Context, *AddChainRequest) (*AddChainResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method AddChain not implemented")
+}
+func (UnimplementedAPEManagerServiceServer) RemoveChain(context.Context, *RemoveChainRequest) (*RemoveChainResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method RemoveChain not implemented")
+}
+func (UnimplementedAPEManagerServiceServer) ListChains(context.Context, *ListChainsRequest) (*ListChainsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ListChains not implemented")
+}
+
+// UnsafeAPEManagerServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to APEManagerServiceServer will
+// result in compilation errors.
+type UnsafeAPEManagerServiceServer interface {
+ mustEmbedUnimplementedAPEManagerServiceServer()
+}
+
+func RegisterAPEManagerServiceServer(s grpc.ServiceRegistrar, srv APEManagerServiceServer) {
+ s.RegisterService(&APEManagerService_ServiceDesc, srv)
+}
+
+func _APEManagerService_AddChain_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(AddChainRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(APEManagerServiceServer).AddChain(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: APEManagerService_AddChain_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(APEManagerServiceServer).AddChain(ctx, req.(*AddChainRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _APEManagerService_RemoveChain_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(RemoveChainRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(APEManagerServiceServer).RemoveChain(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: APEManagerService_RemoveChain_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(APEManagerServiceServer).RemoveChain(ctx, req.(*RemoveChainRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _APEManagerService_ListChains_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(ListChainsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(APEManagerServiceServer).ListChains(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: APEManagerService_ListChains_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(APEManagerServiceServer).ListChains(ctx, req.(*ListChainsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// APEManagerService_ServiceDesc is the grpc.ServiceDesc for APEManagerService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var APEManagerService_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "frostfs.v2.apemanager.APEManagerService",
+ HandlerType: (*APEManagerServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "AddChain",
+ Handler: _APEManagerService_AddChain_Handler,
+ },
+ {
+ MethodName: "RemoveChain",
+ Handler: _APEManagerService_RemoveChain_Handler,
+ },
+ {
+ MethodName: "ListChains",
+ Handler: _APEManagerService_ListChains_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "api/apemanager/grpc/service.proto",
+}
diff --git a/api/apemanager/marshal.go b/api/apemanager/marshal.go
new file mode 100644
index 0000000..ac6fdde
--- /dev/null
+++ b/api/apemanager/marshal.go
@@ -0,0 +1,205 @@
+package apemanager
+
+import (
+ apemanager "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/apemanager/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+)
+
+const (
+ addChainReqBodyTargetField = 1
+ addChainReqBodyChainField = 2
+
+ addChainRespBodyChainIDField = 1
+
+ removeChainReqBodyTargetField = 1
+ removeChainReqBodyChainField = 2
+
+ /*
+ Fields for RemoveResponseBody are missed since RemoveResponseBody is empty.
+ */
+
+ listChainsReqBodyTargetField = 1
+
+ listChainsRespBodyChainsField = 1
+)
+
+func (rb *AddChainRequestBody) StableSize() (size int) {
+ if rb == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(addChainReqBodyTargetField, rb.target)
+ size += proto.NestedStructureSize(addChainReqBodyChainField, rb.chain)
+
+ return size
+}
+
+func (rb *AddChainRequestBody) StableMarshal(buf []byte) []byte {
+ if rb == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, rb.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(addChainReqBodyTargetField, buf[offset:], rb.target)
+ proto.NestedStructureMarshal(addChainReqBodyChainField, buf[offset:], rb.chain)
+
+ return buf
+}
+
+func (rb *AddChainRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(rb, data, new(apemanager.AddChainRequest_Body))
+}
+
+func (rb *AddChainResponseBody) StableSize() (size int) {
+ if rb == nil {
+ return 0
+ }
+
+ size += proto.BytesSize(addChainRespBodyChainIDField, rb.chainID)
+
+ return size
+}
+
+func (rb *AddChainResponseBody) StableMarshal(buf []byte) []byte {
+ if rb == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, rb.StableSize())
+ }
+
+ var offset int
+
+ proto.BytesMarshal(addChainRespBodyChainIDField, buf[offset:], rb.chainID)
+
+ return buf
+}
+
+func (rb *AddChainResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(rb, data, new(apemanager.AddChainResponse_Body))
+}
+
+func (rb *RemoveChainRequestBody) StableSize() (size int) {
+ if rb == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(addChainReqBodyTargetField, rb.target)
+ size += proto.BytesSize(addChainReqBodyChainField, rb.chainID)
+
+ return size
+}
+
+func (rb *RemoveChainRequestBody) StableMarshal(buf []byte) []byte {
+ if rb == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, rb.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(removeChainReqBodyTargetField, buf[offset:], rb.target)
+ proto.BytesMarshal(removeChainReqBodyChainField, buf[offset:], rb.chainID)
+
+ return buf
+}
+
+func (rb *RemoveChainRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(rb, data, new(apemanager.RemoveChainRequest_Body))
+}
+
+func (rb *RemoveChainResponseBody) StableSize() (size int) {
+ if rb == nil {
+ return 0
+ }
+
+ return size
+}
+
+func (rb *RemoveChainResponseBody) StableMarshal(buf []byte) []byte {
+ if rb == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, rb.StableSize())
+ }
+
+ return buf
+}
+
+func (rb *RemoveChainResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(rb, data, new(apemanager.RemoveChainResponse_Body))
+}
+
+func (rb *ListChainsRequestBody) StableSize() (size int) {
+ if rb == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(listChainsReqBodyTargetField, rb.target)
+
+ return size
+}
+
+func (rb *ListChainsRequestBody) StableMarshal(buf []byte) []byte {
+ if rb == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, rb.StableSize())
+ }
+
+ var offset int
+ proto.NestedStructureMarshal(addChainReqBodyTargetField, buf[offset:], rb.target)
+
+ return buf
+}
+
+func (rb *ListChainsRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(rb, data, new(apemanager.ListChainsRequest_Body))
+}
+
+func (rb *ListChainsResponseBody) StableSize() (size int) {
+ if rb == nil {
+ return 0
+ }
+
+ for _, chain := range rb.GetChains() {
+ size += proto.NestedStructureSize(listChainsRespBodyChainsField, chain)
+ }
+
+ return size
+}
+
+func (rb *ListChainsResponseBody) StableMarshal(buf []byte) []byte {
+ if rb == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, rb.StableSize())
+ }
+
+ var offset int
+ for _, chain := range rb.GetChains() {
+ offset += proto.NestedStructureMarshal(listChainsRespBodyChainsField, buf[offset:], chain)
+ }
+
+ return buf
+}
+
+func (rb *ListChainsResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(rb, data, new(apemanager.ListChainsResponse_Body))
+}
diff --git a/api/apemanager/message_test.go b/api/apemanager/message_test.go
new file mode 100644
index 0000000..d64688c
--- /dev/null
+++ b/api/apemanager/message_test.go
@@ -0,0 +1,26 @@
+package apemanager_test
+
+import (
+ "testing"
+
+ apemanagertest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/apemanager/test"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ messagetest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message/test"
+)
+
+func TestMessageConvert(t *testing.T) {
+ messagetest.TestRPCMessage(t,
+ func(empty bool) message.Message { return apemanagertest.GenerateAddChainRequestBody(empty) },
+ func(empty bool) message.Message { return apemanagertest.GenerateAddChainRequest(empty) },
+ func(empty bool) message.Message { return apemanagertest.GenerateAddChainResponseBody(empty) },
+ func(empty bool) message.Message { return apemanagertest.GenerateAddChainResponse(empty) },
+ func(empty bool) message.Message { return apemanagertest.GenerateRemoveChainRequestBody(empty) },
+ func(empty bool) message.Message { return apemanagertest.GenerateRemoveChainRequest(empty) },
+ func(empty bool) message.Message { return apemanagertest.GenerateRemoveChainResponseBody(empty) },
+ func(empty bool) message.Message { return apemanagertest.GenerateRemoveChainResponse(empty) },
+ func(empty bool) message.Message { return apemanagertest.GenerateListChainsRequestBody(empty) },
+ func(empty bool) message.Message { return apemanagertest.GenerateListChainsRequest(empty) },
+ func(empty bool) message.Message { return apemanagertest.GenerateListChainsResponseBody(empty) },
+ func(empty bool) message.Message { return apemanagertest.GenerateListChainsResponse(empty) },
+ )
+}
diff --git a/api/apemanager/status.go b/api/apemanager/status.go
new file mode 100644
index 0000000..3b7f435
--- /dev/null
+++ b/api/apemanager/status.go
@@ -0,0 +1,76 @@
+package apemanager
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
+ statusgrpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status/grpc"
+)
+
+// LocalizeFailStatus checks if passed global status.Code is related to ape manager failure and:
+//
+// then localizes the code and returns true,
+// else leaves the code unchanged and returns false.
+//
+// Arg must be non-nil.
+func LocalizeFailStatus(c *status.Code) bool {
+ return status.LocalizeIfInSection(c, uint32(statusgrpc.Section_SECTION_APE_MANAGER))
+}
+
+// GlobalizeFail globalizes local code of ape manager failure.
+//
+// Arg must be non-nil.
+func GlobalizeFail(c *status.Code) {
+ c.GlobalizeSection(uint32(statusgrpc.Section_SECTION_APE_MANAGER))
+}
+
+const (
+ // StatusAPEManagerAccessDenied is a local status.Code value for
+ // ACCESS_DENIED ape manager failure.
+ StatusAPEManagerAccessDenied status.Code = iota
+)
+
+const (
+ // detailAccessDeniedDesc is a StatusAccessDenied detail ID for
+ // human-readable description.
+ detailAccessDeniedDesc = iota
+)
+
+// WriteAccessDeniedDesc writes human-readable description of StatusAccessDenied
+// into status.Status as a detail. The status must not be nil.
+//
+// Existing details are expected to be ID-unique, otherwise undefined behavior.
+func WriteAccessDeniedDesc(st *status.Status, desc string) {
+ var found bool
+
+ st.IterateDetails(func(d *status.Detail) bool {
+ if d.ID() == detailAccessDeniedDesc {
+ found = true
+ d.SetValue([]byte(desc))
+ }
+
+ return found
+ })
+
+ if !found {
+ var d status.Detail
+
+ d.SetID(detailAccessDeniedDesc)
+ d.SetValue([]byte(desc))
+
+ st.AppendDetails(d)
+ }
+}
+
+// ReadAccessDeniedDesc looks up for status detail with human-readable description
+// of StatusAccessDenied. Returns empty string if detail is missing.
+func ReadAccessDeniedDesc(st status.Status) (desc string) {
+ st.IterateDetails(func(d *status.Detail) bool {
+ if d.ID() == detailAccessDeniedDesc {
+ desc = string(d.Value())
+ return true
+ }
+
+ return false
+ })
+
+ return
+}
diff --git a/api/apemanager/status_test.go b/api/apemanager/status_test.go
new file mode 100644
index 0000000..af6cd66
--- /dev/null
+++ b/api/apemanager/status_test.go
@@ -0,0 +1,30 @@
+package apemanager_test
+
+import (
+ "testing"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/apemanager"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
+ statustest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status/test"
+ "github.com/stretchr/testify/require"
+)
+
+func TestStatusCodes(t *testing.T) {
+ statustest.TestCodes(t, apemanager.LocalizeFailStatus, apemanager.GlobalizeFail,
+ apemanager.StatusAPEManagerAccessDenied, 5120,
+ )
+}
+
+func TestAccessDeniedDesc(t *testing.T) {
+ var st status.Status
+
+ require.Empty(t, apemanager.ReadAccessDeniedDesc(st))
+
+ const desc = "some description"
+
+ apemanager.WriteAccessDeniedDesc(&st, desc)
+ require.Equal(t, desc, apemanager.ReadAccessDeniedDesc(st))
+
+ apemanager.WriteAccessDeniedDesc(&st, desc+"1")
+ require.Equal(t, desc+"1", apemanager.ReadAccessDeniedDesc(st))
+}
diff --git a/api/apemanager/test/generate.go b/api/apemanager/test/generate.go
new file mode 100644
index 0000000..47427d7
--- /dev/null
+++ b/api/apemanager/test/generate.go
@@ -0,0 +1,143 @@
+package apemanagertest
+
+import (
+ apetest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape/test"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/apemanager"
+ sessiontest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/test"
+)
+
+func generateChainID(empty bool) []byte {
+ if empty {
+ return []byte{}
+ }
+
+ return []byte("616c6c6f774f626a476574436e72")
+}
+
+func GenerateAddChainRequestBody(empty bool) *apemanager.AddChainRequestBody {
+ m := new(apemanager.AddChainRequestBody)
+
+ if !empty {
+ m.SetTarget(apetest.GenerateChainTarget(empty))
+ m.SetChain(apetest.GenerateRawChain(empty))
+ }
+
+ return m
+}
+
+func GenerateAddChainRequest(empty bool) *apemanager.AddChainRequest {
+ m := new(apemanager.AddChainRequest)
+
+ if !empty {
+ m.SetBody(GenerateAddChainRequestBody(empty))
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+ }
+
+ return m
+}
+
+func GenerateAddChainResponseBody(empty bool) *apemanager.AddChainResponseBody {
+ m := new(apemanager.AddChainResponseBody)
+
+ if !empty {
+ m.SetChainID(generateChainID(empty))
+ }
+
+ return m
+}
+
+func GenerateAddChainResponse(empty bool) *apemanager.AddChainResponse {
+ m := new(apemanager.AddChainResponse)
+
+ if !empty {
+ m.SetBody(GenerateAddChainResponseBody(empty))
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+ }
+
+ return m
+}
+
+func GenerateRemoveChainRequestBody(empty bool) *apemanager.RemoveChainRequestBody {
+ m := new(apemanager.RemoveChainRequestBody)
+
+ if !empty {
+ m.SetChainID(generateChainID(empty))
+ m.SetTarget(apetest.GenerateChainTarget(empty))
+ }
+
+ return m
+}
+
+func GenerateRemoveChainRequest(empty bool) *apemanager.RemoveChainRequest {
+ m := new(apemanager.RemoveChainRequest)
+
+ if !empty {
+ m.SetBody(GenerateRemoveChainRequestBody(empty))
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+ }
+
+ return m
+}
+
+func GenerateRemoveChainResponseBody(_ bool) *apemanager.RemoveChainResponseBody {
+ return new(apemanager.RemoveChainResponseBody)
+}
+
+func GenerateRemoveChainResponse(empty bool) *apemanager.RemoveChainResponse {
+ m := new(apemanager.RemoveChainResponse)
+
+ if !empty {
+ m.SetBody(GenerateRemoveChainResponseBody(empty))
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+ }
+
+ return m
+}
+
+func GenerateListChainsRequestBody(empty bool) *apemanager.ListChainsRequestBody {
+ m := new(apemanager.ListChainsRequestBody)
+
+ if !empty {
+ m.SetTarget(apetest.GenerateChainTarget(empty))
+ }
+
+ return m
+}
+
+func GenerateListChainsRequest(empty bool) *apemanager.ListChainsRequest {
+ m := new(apemanager.ListChainsRequest)
+
+ if !empty {
+ m.SetBody(GenerateListChainsRequestBody(empty))
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+ }
+
+ return m
+}
+
+func GenerateListChainsResponseBody(empty bool) *apemanager.ListChainsResponseBody {
+ m := new(apemanager.ListChainsResponseBody)
+
+ if !empty {
+ m.SetChains(apetest.GenerateRawChains(empty, 10))
+ }
+
+ return m
+}
+
+func GenerateListChainsResponse(empty bool) *apemanager.ListChainsResponse {
+ m := new(apemanager.ListChainsResponse)
+
+ if !empty {
+ m.SetBody(GenerateListChainsResponseBody(empty))
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+ }
+
+ return m
+}
diff --git a/api/apemanager/types.go b/api/apemanager/types.go
new file mode 100644
index 0000000..077488b
--- /dev/null
+++ b/api/apemanager/types.go
@@ -0,0 +1,226 @@
+package apemanager
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+)
+
+type AddChainRequest struct {
+ body *AddChainRequestBody
+
+ session.RequestHeaders
+}
+
+func (r *AddChainRequest) SetBody(body *AddChainRequestBody) {
+ r.body = body
+}
+
+func (r *AddChainRequest) GetBody() *AddChainRequestBody {
+ if r == nil {
+ return nil
+ }
+
+ return r.body
+}
+
+type AddChainRequestBody struct {
+ target *ape.ChainTarget
+
+ chain *ape.Chain
+}
+
+func (rb *AddChainRequestBody) SetTarget(target *ape.ChainTarget) {
+ rb.target = target
+}
+
+func (rb *AddChainRequestBody) GetTarget() *ape.ChainTarget {
+ if rb == nil {
+ return nil
+ }
+
+ return rb.target
+}
+
+func (rb *AddChainRequestBody) SetChain(chain *ape.Chain) {
+ rb.chain = chain
+}
+
+func (rb *AddChainRequestBody) GetChain() *ape.Chain {
+ if rb == nil {
+ return nil
+ }
+
+ return rb.chain
+}
+
+type AddChainResponse struct {
+ body *AddChainResponseBody
+
+ session.ResponseHeaders
+}
+
+func (r *AddChainResponse) SetBody(body *AddChainResponseBody) {
+ r.body = body
+}
+
+func (r *AddChainResponse) GetBody() *AddChainResponseBody {
+ if r == nil {
+ return nil
+ }
+
+ return r.body
+}
+
+type AddChainResponseBody struct {
+ chainID []byte
+}
+
+func (rb *AddChainResponseBody) SetChainID(chainID []byte) {
+ rb.chainID = chainID
+}
+
+func (rb *AddChainResponseBody) GetChainID() []byte {
+ if rb == nil {
+ return nil
+ }
+
+ return rb.chainID
+}
+
+type RemoveChainRequest struct {
+ body *RemoveChainRequestBody
+
+ session.RequestHeaders
+}
+
+func (r *RemoveChainRequest) SetBody(body *RemoveChainRequestBody) {
+ r.body = body
+}
+
+func (r *RemoveChainRequest) GetBody() *RemoveChainRequestBody {
+ if r == nil {
+ return nil
+ }
+
+ return r.body
+}
+
+type RemoveChainRequestBody struct {
+ target *ape.ChainTarget
+
+ chainID []byte
+}
+
+func (rb *RemoveChainRequestBody) SetTarget(target *ape.ChainTarget) {
+ rb.target = target
+}
+
+func (rb *RemoveChainRequestBody) GetTarget() *ape.ChainTarget {
+ if rb == nil {
+ return nil
+ }
+
+ return rb.target
+}
+
+func (rb *RemoveChainRequestBody) SetChainID(chainID []byte) {
+ rb.chainID = chainID
+}
+
+func (rb *RemoveChainRequestBody) GetChainID() []byte {
+ if rb == nil {
+ return nil
+ }
+
+ return rb.chainID
+}
+
+type RemoveChainResponse struct {
+ body *RemoveChainResponseBody
+
+ session.ResponseHeaders
+}
+
+type RemoveChainResponseBody struct{}
+
+func (r *RemoveChainResponse) SetBody(body *RemoveChainResponseBody) {
+ r.body = body
+}
+
+func (r *RemoveChainResponse) GetBody() *RemoveChainResponseBody {
+ if r == nil {
+ return nil
+ }
+
+ return r.body
+}
+
+type ListChainsRequest struct {
+ body *ListChainsRequestBody
+
+ session.RequestHeaders
+}
+
+func (r *ListChainsRequest) SetBody(body *ListChainsRequestBody) {
+ r.body = body
+}
+
+func (r *ListChainsRequest) GetBody() *ListChainsRequestBody {
+ if r == nil {
+ return nil
+ }
+
+ return r.body
+}
+
+type ListChainsRequestBody struct {
+ target *ape.ChainTarget
+}
+
+func (rb *ListChainsRequestBody) SetTarget(target *ape.ChainTarget) {
+ rb.target = target
+}
+
+func (rb *ListChainsRequestBody) GetTarget() *ape.ChainTarget {
+ if rb == nil {
+ return nil
+ }
+
+ return rb.target
+}
+
+type ListChainsResponse struct {
+ body *ListChainsResponseBody
+
+ session.ResponseHeaders
+}
+
+func (r *ListChainsResponse) SetBody(body *ListChainsResponseBody) {
+ r.body = body
+}
+
+func (r *ListChainsResponse) GetBody() *ListChainsResponseBody {
+ if r == nil {
+ return nil
+ }
+
+ return r.body
+}
+
+type ListChainsResponseBody struct {
+ chains []*ape.Chain
+
+ session.RequestHeaders
+}
+
+func (r *ListChainsResponseBody) SetChains(chains []*ape.Chain) {
+ r.chains = chains
+}
+
+func (r *ListChainsResponseBody) GetChains() []*ape.Chain {
+ if r == nil {
+ return nil
+ }
+
+ return r.chains
+}
diff --git a/api/container/attributes.go b/api/container/attributes.go
new file mode 100644
index 0000000..288d048
--- /dev/null
+++ b/api/container/attributes.go
@@ -0,0 +1,90 @@
+package container
+
+// SysAttributePrefix is a prefix of key to system attribute.
+const SysAttributePrefix = "__SYSTEM__"
+
+const (
+ // SysAttributeName is a string of human-friendly container name registered as the domain in NNS contract.
+ SysAttributeName = SysAttributePrefix + "NAME"
+
+ // SysAttributeZone is a string of zone for container name.
+ SysAttributeZone = SysAttributePrefix + "ZONE"
+
+ // SysAttributeHomomorphicHashing is a container's homomorphic hashing state.
+ SysAttributeHomomorphicHashing = SysAttributePrefix + "DISABLE_HOMOMORPHIC_HASHING"
+)
+
+// SysAttributePrefixNeoFS is a prefix of key to system attribute.
+// Deprecated: use SysAttributePrefix.
+const SysAttributePrefixNeoFS = "__NEOFS__"
+
+const (
+ // SysAttributeNameNeoFS is a string of human-friendly container name registered as the domain in NNS contract.
+ // Deprecated: use SysAttributeName.
+ SysAttributeNameNeoFS = SysAttributePrefixNeoFS + "NAME"
+
+ // SysAttributeZoneNeoFS is a string of zone for container name.
+ // Deprecated: use SysAttributeZone.
+ SysAttributeZoneNeoFS = SysAttributePrefixNeoFS + "ZONE"
+
+ // SysAttributeHomomorphicHashingNeoFS is a container's homomorphic hashing state.
+ // Deprecated: use SysAttributeHomomorphicHashing.
+ SysAttributeHomomorphicHashingNeoFS = SysAttributePrefixNeoFS + "DISABLE_HOMOMORPHIC_HASHING"
+)
+
+// SysAttributeZoneDefault is a default value for SysAttributeZone attribute.
+const SysAttributeZoneDefault = "container"
+
+const disabledHomomorphicHashingValue = "true"
+
+// HomomorphicHashingState returns container's homomorphic
+// hashing state:
+// - true if hashing is enabled;
+// - false if hashing is disabled.
+//
+// All container's attributes must be unique, otherwise behavior
+// is undefined.
+//
+// See also SetHomomorphicHashingState.
+func (c Container) HomomorphicHashingState() bool {
+ for i := range c.attr {
+ if c.attr[i].GetKey() == SysAttributeHomomorphicHashing || c.attr[i].GetKey() == SysAttributeHomomorphicHashingNeoFS {
+ return c.attr[i].GetValue() != disabledHomomorphicHashingValue
+ }
+ }
+
+ return true
+}
+
+// SetHomomorphicHashingState sets homomorphic hashing state for
+// container.
+//
+// All container's attributes must be unique, otherwise behavior
+// is undefined.
+//
+// See also HomomorphicHashingState.
+func (c *Container) SetHomomorphicHashingState(enable bool) {
+ for i := range c.attr {
+ if c.attr[i].GetKey() == SysAttributeHomomorphicHashing || c.attr[i].GetKey() == SysAttributeHomomorphicHashingNeoFS {
+ if enable {
+ // approach without allocation/waste
+ // coping works since the attributes
+ // order is not important
+ c.attr[i] = c.attr[len(c.attr)-1]
+ c.attr = c.attr[:len(c.attr)-1]
+ } else {
+ c.attr[i].SetValue(disabledHomomorphicHashingValue)
+ }
+
+ return
+ }
+ }
+
+ if !enable {
+ attr := Attribute{}
+ attr.SetKey(SysAttributeHomomorphicHashing)
+ attr.SetValue(disabledHomomorphicHashingValue)
+
+ c.attr = append(c.attr, attr)
+ }
+}
diff --git a/api/container/attributes_test.go b/api/container/attributes_test.go
new file mode 100644
index 0000000..2b00d33
--- /dev/null
+++ b/api/container/attributes_test.go
@@ -0,0 +1,59 @@
+package container_test
+
+import (
+ "testing"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
+ containertest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container/test"
+ "github.com/stretchr/testify/require"
+)
+
+func TestContainer_HomomorphicHashingDisabled(t *testing.T) {
+ cnr := containertest.GenerateContainer(false)
+
+ t.Run("defaults", func(t *testing.T) {
+ require.True(t, cnr.HomomorphicHashingState())
+ })
+
+ t.Run("disabled", func(t *testing.T) {
+ attr := container.Attribute{}
+ attr.SetKey(container.SysAttributeHomomorphicHashing)
+ attr.SetValue("NOT_true")
+
+ cnr.SetAttributes(append(cnr.GetAttributes(), attr))
+ require.True(t, cnr.HomomorphicHashingState())
+
+ attr.SetValue("true")
+
+ cnr.SetAttributes([]container.Attribute{attr})
+ require.False(t, cnr.HomomorphicHashingState())
+ })
+}
+
+func TestContainer_SetHomomorphicHashingState(t *testing.T) {
+ cnr := containertest.GenerateContainer(false)
+ attrs := cnr.GetAttributes()
+ attrLen := len(attrs)
+
+ cnr.SetHomomorphicHashingState(true)
+
+ // enabling hashing should not add any new attributes
+ require.Equal(t, attrLen, len(cnr.GetAttributes()))
+ require.True(t, cnr.HomomorphicHashingState())
+
+ cnr.SetHomomorphicHashingState(false)
+
+ // disabling hashing should add exactly one attribute
+ require.Equal(t, attrLen+1, len(cnr.GetAttributes()))
+ require.False(t, cnr.HomomorphicHashingState())
+
+ cnr.SetHomomorphicHashingState(true)
+
+ // enabling hashing should remove 1 attribute if
+ // hashing was disabled before
+ require.Equal(t, attrLen, len(cnr.GetAttributes()))
+ require.True(t, cnr.HomomorphicHashingState())
+
+ // hashing operations should not change any other attributes
+ require.ElementsMatch(t, attrs, cnr.GetAttributes())
+}
diff --git a/api/container/convert.go b/api/container/convert.go
new file mode 100644
index 0000000..c91bdfd
--- /dev/null
+++ b/api/container/convert.go
@@ -0,0 +1,764 @@
+package container
+
+import (
+ container "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
+ netmapGRPC "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ sessionGRPC "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/grpc"
+)
+
+func (a *Attribute) ToGRPCMessage() grpc.Message {
+ var m *container.Container_Attribute
+
+ if a != nil {
+ m = new(container.Container_Attribute)
+
+ m.SetKey(a.key)
+ m.SetValue(a.val)
+ }
+
+ return m
+}
+
+func (a *Attribute) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.Container_Attribute)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ a.key = v.GetKey()
+ a.val = v.GetValue()
+
+ return nil
+}
+
+func AttributesToGRPC(xs []Attribute) (res []container.Container_Attribute) {
+ if xs != nil {
+ res = make([]container.Container_Attribute, 0, len(xs))
+
+ for i := range xs {
+ res = append(res, *xs[i].ToGRPCMessage().(*container.Container_Attribute))
+ }
+ }
+
+ return
+}
+
+func AttributesFromGRPC(xs []container.Container_Attribute) (res []Attribute, err error) {
+ if xs != nil {
+ res = make([]Attribute, len(xs))
+
+ for i := range xs {
+ err = res[i].FromGRPCMessage(&xs[i])
+ if err != nil {
+ return
+ }
+ }
+ }
+
+ return
+}
+
+func (c *Container) ToGRPCMessage() grpc.Message {
+ var m *container.Container
+
+ if c != nil {
+ m = new(container.Container)
+
+ m.SetVersion(c.version.ToGRPCMessage().(*refsGRPC.Version))
+ m.SetOwnerId(c.ownerID.ToGRPCMessage().(*refsGRPC.OwnerID))
+ m.SetPlacementPolicy(c.policy.ToGRPCMessage().(*netmapGRPC.PlacementPolicy))
+ m.SetAttributes(AttributesToGRPC(c.attr))
+ m.SetBasicAcl(c.basicACL)
+ m.SetNonce(c.nonce)
+ }
+
+ return m
+}
+
+func (c *Container) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.Container)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ version := v.GetVersion()
+ if version == nil {
+ c.version = nil
+ } else {
+ if c.version == nil {
+ c.version = new(refs.Version)
+ }
+
+ err = c.version.FromGRPCMessage(version)
+ if err != nil {
+ return err
+ }
+ }
+
+ ownerID := v.GetOwnerId()
+ if ownerID == nil {
+ c.ownerID = nil
+ } else {
+ if c.ownerID == nil {
+ c.ownerID = new(refs.OwnerID)
+ }
+
+ err = c.ownerID.FromGRPCMessage(ownerID)
+ if err != nil {
+ return err
+ }
+ }
+
+ policy := v.GetPlacementPolicy()
+ if policy == nil {
+ c.policy = nil
+ } else {
+ if c.policy == nil {
+ c.policy = new(netmap.PlacementPolicy)
+ }
+
+ err = c.policy.FromGRPCMessage(policy)
+ if err != nil {
+ return err
+ }
+ }
+
+ c.attr, err = AttributesFromGRPC(v.GetAttributes())
+ if err != nil {
+ return err
+ }
+
+ c.basicACL = v.GetBasicAcl()
+ c.nonce = v.GetNonce()
+
+ return nil
+}
+
+func toSignatureRFC6979(s *refs.Signature) *refsGRPC.SignatureRFC6979 {
+ var res *refsGRPC.SignatureRFC6979
+
+ if s != nil {
+ res = new(refsGRPC.SignatureRFC6979)
+ res.SetKey(s.GetKey())
+ res.SetSign(s.GetSign())
+ }
+
+ return res
+}
+
+func (r *PutRequestBody) ToGRPCMessage() grpc.Message {
+ var m *container.PutRequest_Body
+
+ if r != nil {
+ m = new(container.PutRequest_Body)
+
+ m.SetContainer(r.cnr.ToGRPCMessage().(*container.Container))
+ m.SetSignature(toSignatureRFC6979(r.sig))
+ }
+
+ return m
+}
+
+func (r *PutRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.PutRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ cnr := v.GetContainer()
+ if cnr == nil {
+ r.cnr = nil
+ } else {
+ if r.cnr == nil {
+ r.cnr = new(Container)
+ }
+
+ err = r.cnr.FromGRPCMessage(cnr)
+ if err != nil {
+ return err
+ }
+ }
+
+ sig := v.GetSignature()
+ if sig == nil {
+ r.sig = nil
+ } else {
+ if r.sig == nil {
+ r.sig = new(refs.Signature)
+ }
+
+ r.sig.SetKey(sig.GetKey())
+ r.sig.SetSign(sig.GetSign())
+ }
+
+ return err
+}
+
+func (r *PutRequest) ToGRPCMessage() grpc.Message {
+ var m *container.PutRequest
+
+ if r != nil {
+ m = new(container.PutRequest)
+
+ m.SetBody(r.body.ToGRPCMessage().(*container.PutRequest_Body))
+ r.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *PutRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.PutRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(PutRequestBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.RequestHeaders.FromMessage(v)
+}
+
+func (r *PutResponseBody) ToGRPCMessage() grpc.Message {
+ var m *container.PutResponse_Body
+
+ if r != nil {
+ m = new(container.PutResponse_Body)
+
+ m.SetContainerId(r.cid.ToGRPCMessage().(*refsGRPC.ContainerID))
+ }
+
+ return m
+}
+
+func (r *PutResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.PutResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ cid := v.GetContainerId()
+ if cid == nil {
+ r.cid = nil
+ } else {
+ if r.cid == nil {
+ r.cid = new(refs.ContainerID)
+ }
+
+ err = r.cid.FromGRPCMessage(cid)
+ }
+
+ return err
+}
+
+func (r *PutResponse) ToGRPCMessage() grpc.Message {
+ var m *container.PutResponse
+
+ if r != nil {
+ m = new(container.PutResponse)
+
+ m.SetBody(r.body.ToGRPCMessage().(*container.PutResponse_Body))
+ r.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *PutResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.PutResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(PutResponseBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.ResponseHeaders.FromMessage(v)
+}
+
+func (r *GetRequestBody) ToGRPCMessage() grpc.Message {
+ var m *container.GetRequest_Body
+
+ if r != nil {
+ m = new(container.GetRequest_Body)
+
+ m.SetContainerId(r.cid.ToGRPCMessage().(*refsGRPC.ContainerID))
+ }
+
+ return m
+}
+
+func (r *GetRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.GetRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ cid := v.GetContainerId()
+ if cid == nil {
+ r.cid = nil
+ } else {
+ if r.cid == nil {
+ r.cid = new(refs.ContainerID)
+ }
+
+ err = r.cid.FromGRPCMessage(cid)
+ }
+
+ return err
+}
+
+func (r *GetRequest) ToGRPCMessage() grpc.Message {
+ var m *container.GetRequest
+
+ if r != nil {
+ m = new(container.GetRequest)
+
+ m.SetBody(r.body.ToGRPCMessage().(*container.GetRequest_Body))
+ r.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *GetRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.GetRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(GetRequestBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.RequestHeaders.FromMessage(v)
+}
+
+func (r *GetResponseBody) ToGRPCMessage() grpc.Message {
+ var m *container.GetResponse_Body
+
+ if r != nil {
+ m = new(container.GetResponse_Body)
+
+ m.SetContainer(r.cnr.ToGRPCMessage().(*container.Container))
+ m.SetSessionToken(r.token.ToGRPCMessage().(*sessionGRPC.SessionToken))
+ m.SetSignature(toSignatureRFC6979(r.sig))
+ }
+
+ return m
+}
+
+func (r *GetResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.GetResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ cnr := v.GetContainer()
+ if cnr == nil {
+ r.cnr = nil
+ } else {
+ if r.cnr == nil {
+ r.cnr = new(Container)
+ }
+
+ err = r.cnr.FromGRPCMessage(cnr)
+ }
+
+ sig := v.GetSignature()
+ if sig == nil {
+ r.sig = nil
+ } else {
+ if r.sig == nil {
+ r.sig = new(refs.Signature)
+ }
+
+ r.sig.SetKey(sig.GetKey())
+ r.sig.SetSign(sig.GetSign())
+ }
+
+ token := v.GetSessionToken()
+ if token == nil {
+ r.token = nil
+ } else {
+ if r.token == nil {
+ r.token = new(session.Token)
+ }
+
+ err = r.token.FromGRPCMessage(token)
+ }
+
+ return err
+}
+
+func (r *GetResponse) ToGRPCMessage() grpc.Message {
+ var m *container.GetResponse
+
+ if r != nil {
+ m = new(container.GetResponse)
+
+ m.SetBody(r.body.ToGRPCMessage().(*container.GetResponse_Body))
+ r.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *GetResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.GetResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(GetResponseBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.ResponseHeaders.FromMessage(v)
+}
+
+func (r *DeleteRequestBody) ToGRPCMessage() grpc.Message {
+ var m *container.DeleteRequest_Body
+
+ if r != nil {
+ m = new(container.DeleteRequest_Body)
+
+ m.SetContainerId(r.cid.ToGRPCMessage().(*refsGRPC.ContainerID))
+ m.SetSignature(toSignatureRFC6979(r.sig))
+ }
+
+ return m
+}
+
+func (r *DeleteRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.DeleteRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ cid := v.GetContainerId()
+ if cid == nil {
+ r.cid = nil
+ } else {
+ if r.cid == nil {
+ r.cid = new(refs.ContainerID)
+ }
+
+ err = r.cid.FromGRPCMessage(cid)
+ if err != nil {
+ return err
+ }
+ }
+
+ sig := v.GetSignature()
+ if sig == nil {
+ r.sig = nil
+ } else {
+ if r.sig == nil {
+ r.sig = new(refs.Signature)
+ }
+
+ r.sig.SetKey(sig.GetKey())
+ r.sig.SetSign(sig.GetSign())
+ }
+
+ return err
+}
+
+func (r *DeleteRequest) ToGRPCMessage() grpc.Message {
+ var m *container.DeleteRequest
+
+ if r != nil {
+ m = new(container.DeleteRequest)
+
+ m.SetBody(r.body.ToGRPCMessage().(*container.DeleteRequest_Body))
+ r.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *DeleteRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.DeleteRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(DeleteRequestBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.RequestHeaders.FromMessage(v)
+}
+
+func (r *DeleteResponseBody) ToGRPCMessage() grpc.Message {
+ var m *container.DeleteResponse_Body
+
+ if r != nil {
+ m = new(container.DeleteResponse_Body)
+ }
+
+ return m
+}
+
+func (r *DeleteResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.DeleteResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ return nil
+}
+
+func (r *DeleteResponse) ToGRPCMessage() grpc.Message {
+ var m *container.DeleteResponse
+
+ if r != nil {
+ m = new(container.DeleteResponse)
+
+ m.SetBody(r.body.ToGRPCMessage().(*container.DeleteResponse_Body))
+ r.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *DeleteResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.DeleteResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(DeleteResponseBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.ResponseHeaders.FromMessage(v)
+}
+
+func (r *ListRequestBody) ToGRPCMessage() grpc.Message {
+ var m *container.ListRequest_Body
+
+ if r != nil {
+ m = new(container.ListRequest_Body)
+
+ m.SetOwnerId(r.ownerID.ToGRPCMessage().(*refsGRPC.OwnerID))
+ }
+
+ return m
+}
+
+func (r *ListRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.ListRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ ownerID := v.GetOwnerId()
+ if ownerID == nil {
+ r.ownerID = nil
+ } else {
+ if r.ownerID == nil {
+ r.ownerID = new(refs.OwnerID)
+ }
+
+ err = r.ownerID.FromGRPCMessage(ownerID)
+ }
+
+ return err
+}
+
+func (r *ListRequest) ToGRPCMessage() grpc.Message {
+ var m *container.ListRequest
+
+ if r != nil {
+ m = new(container.ListRequest)
+
+ m.SetBody(r.body.ToGRPCMessage().(*container.ListRequest_Body))
+ r.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *ListRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.ListRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(ListRequestBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.RequestHeaders.FromMessage(v)
+}
+
+func (r *ListResponseBody) ToGRPCMessage() grpc.Message {
+ var m *container.ListResponse_Body
+
+ if r != nil {
+ m = new(container.ListResponse_Body)
+
+ m.SetContainerIds(refs.ContainerIDsToGRPCMessage(r.cidList))
+ }
+
+ return m
+}
+
+func (r *ListResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.ListResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ r.cidList, err = refs.ContainerIDsFromGRPCMessage(v.GetContainerIds())
+
+ return err
+}
+
+func (r *ListResponse) ToGRPCMessage() grpc.Message {
+ var m *container.ListResponse
+
+ if r != nil {
+ m = new(container.ListResponse)
+
+ m.SetBody(r.body.ToGRPCMessage().(*container.ListResponse_Body))
+ r.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *ListResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*container.ListResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(ListResponseBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.ResponseHeaders.FromMessage(v)
+}
diff --git a/api/container/grpc/service_frostfs.pb.go b/api/container/grpc/service_frostfs.pb.go
new file mode 100644
index 0000000..0743824
--- /dev/null
+++ b/api/container/grpc/service_frostfs.pb.go
@@ -0,0 +1,3157 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package container
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ grpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ grpc1 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/grpc"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+)
+
+type PutRequest_Body struct {
+ Container *Container `json:"container"`
+ Signature *grpc.SignatureRFC6979 `json:"signature"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PutRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*PutRequest_Body)(nil)
+ _ json.Marshaler = (*PutRequest_Body)(nil)
+ _ json.Unmarshaler = (*PutRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PutRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Container)
+ size += proto.NestedStructureSize(2, x.Signature)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PutRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PutRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Container != nil {
+ x.Container.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Signature != nil {
+ x.Signature.EmitProtobuf(mm.AppendMessage(2))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PutRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PutRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Container
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Container")
+ }
+ x.Container = new(Container)
+ if err := x.Container.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Signature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Signature")
+ }
+ x.Signature = new(grpc.SignatureRFC6979)
+ if err := x.Signature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *PutRequest_Body) GetContainer() *Container {
+ if x != nil {
+ return x.Container
+ }
+ return nil
+}
+func (x *PutRequest_Body) SetContainer(v *Container) {
+ x.Container = v
+}
+func (x *PutRequest_Body) GetSignature() *grpc.SignatureRFC6979 {
+ if x != nil {
+ return x.Signature
+ }
+ return nil
+}
+func (x *PutRequest_Body) SetSignature(v *grpc.SignatureRFC6979) {
+ x.Signature = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PutRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PutRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"container\":"
+ out.RawString(prefix)
+ x.Container.MarshalEasyJSON(out)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"signature\":"
+ out.RawString(prefix)
+ x.Signature.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PutRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PutRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "container":
+ {
+ var f *Container
+ f = new(Container)
+ f.UnmarshalEasyJSON(in)
+ x.Container = f
+ }
+ case "signature":
+ {
+ var f *grpc.SignatureRFC6979
+ f = new(grpc.SignatureRFC6979)
+ f.UnmarshalEasyJSON(in)
+ x.Signature = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PutRequest struct {
+ Body *PutRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PutRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*PutRequest)(nil)
+ _ json.Marshaler = (*PutRequest)(nil)
+ _ json.Unmarshaler = (*PutRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PutRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *PutRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *PutRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PutRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PutRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PutRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PutRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(PutRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *PutRequest) GetBody() *PutRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *PutRequest) SetBody(v *PutRequest_Body) {
+ x.Body = v
+}
+func (x *PutRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *PutRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *PutRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *PutRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PutRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PutRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PutRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PutRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *PutRequest_Body
+ f = new(PutRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PutResponse_Body struct {
+ ContainerId *grpc.ContainerID `json:"containerId"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PutResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*PutResponse_Body)(nil)
+ _ json.Marshaler = (*PutResponse_Body)(nil)
+ _ json.Unmarshaler = (*PutResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PutResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.ContainerId)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PutResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PutResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.ContainerId != nil {
+ x.ContainerId.EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PutResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PutResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // ContainerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ContainerId")
+ }
+ x.ContainerId = new(grpc.ContainerID)
+ if err := x.ContainerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *PutResponse_Body) GetContainerId() *grpc.ContainerID {
+ if x != nil {
+ return x.ContainerId
+ }
+ return nil
+}
+func (x *PutResponse_Body) SetContainerId(v *grpc.ContainerID) {
+ x.ContainerId = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PutResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PutResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"containerId\":"
+ out.RawString(prefix)
+ x.ContainerId.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PutResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PutResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "containerId":
+ {
+ var f *grpc.ContainerID
+ f = new(grpc.ContainerID)
+ f.UnmarshalEasyJSON(in)
+ x.ContainerId = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PutResponse struct {
+ Body *PutResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PutResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*PutResponse)(nil)
+ _ json.Marshaler = (*PutResponse)(nil)
+ _ json.Unmarshaler = (*PutResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PutResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *PutResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *PutResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PutResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PutResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PutResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PutResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(PutResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *PutResponse) GetBody() *PutResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *PutResponse) SetBody(v *PutResponse_Body) {
+ x.Body = v
+}
+func (x *PutResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *PutResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *PutResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *PutResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PutResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PutResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PutResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PutResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *PutResponse_Body
+ f = new(PutResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type DeleteRequest_Body struct {
+ ContainerId *grpc.ContainerID `json:"containerId"`
+ Signature *grpc.SignatureRFC6979 `json:"signature"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*DeleteRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*DeleteRequest_Body)(nil)
+ _ json.Marshaler = (*DeleteRequest_Body)(nil)
+ _ json.Unmarshaler = (*DeleteRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *DeleteRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.ContainerId)
+ size += proto.NestedStructureSize(2, x.Signature)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *DeleteRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *DeleteRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.ContainerId != nil {
+ x.ContainerId.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Signature != nil {
+ x.Signature.EmitProtobuf(mm.AppendMessage(2))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *DeleteRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "DeleteRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // ContainerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ContainerId")
+ }
+ x.ContainerId = new(grpc.ContainerID)
+ if err := x.ContainerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Signature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Signature")
+ }
+ x.Signature = new(grpc.SignatureRFC6979)
+ if err := x.Signature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *DeleteRequest_Body) GetContainerId() *grpc.ContainerID {
+ if x != nil {
+ return x.ContainerId
+ }
+ return nil
+}
+func (x *DeleteRequest_Body) SetContainerId(v *grpc.ContainerID) {
+ x.ContainerId = v
+}
+func (x *DeleteRequest_Body) GetSignature() *grpc.SignatureRFC6979 {
+ if x != nil {
+ return x.Signature
+ }
+ return nil
+}
+func (x *DeleteRequest_Body) SetSignature(v *grpc.SignatureRFC6979) {
+ x.Signature = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *DeleteRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *DeleteRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"containerId\":"
+ out.RawString(prefix)
+ x.ContainerId.MarshalEasyJSON(out)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"signature\":"
+ out.RawString(prefix)
+ x.Signature.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *DeleteRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *DeleteRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "containerId":
+ {
+ var f *grpc.ContainerID
+ f = new(grpc.ContainerID)
+ f.UnmarshalEasyJSON(in)
+ x.ContainerId = f
+ }
+ case "signature":
+ {
+ var f *grpc.SignatureRFC6979
+ f = new(grpc.SignatureRFC6979)
+ f.UnmarshalEasyJSON(in)
+ x.Signature = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type DeleteRequest struct {
+ Body *DeleteRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*DeleteRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*DeleteRequest)(nil)
+ _ json.Marshaler = (*DeleteRequest)(nil)
+ _ json.Unmarshaler = (*DeleteRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *DeleteRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *DeleteRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *DeleteRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *DeleteRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *DeleteRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *DeleteRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "DeleteRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(DeleteRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *DeleteRequest) GetBody() *DeleteRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *DeleteRequest) SetBody(v *DeleteRequest_Body) {
+ x.Body = v
+}
+func (x *DeleteRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *DeleteRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *DeleteRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *DeleteRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *DeleteRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *DeleteRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *DeleteRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *DeleteRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *DeleteRequest_Body
+ f = new(DeleteRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type DeleteResponse_Body struct {
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*DeleteResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*DeleteResponse_Body)(nil)
+ _ json.Marshaler = (*DeleteResponse_Body)(nil)
+ _ json.Unmarshaler = (*DeleteResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *DeleteResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *DeleteResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *DeleteResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *DeleteResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "DeleteResponse_Body")
+ }
+ switch fc.FieldNum {
+ }
+ }
+ return nil
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *DeleteResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *DeleteResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ out.RawByte('{')
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *DeleteResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *DeleteResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type DeleteResponse struct {
+ Body *DeleteResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*DeleteResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*DeleteResponse)(nil)
+ _ json.Marshaler = (*DeleteResponse)(nil)
+ _ json.Unmarshaler = (*DeleteResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *DeleteResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *DeleteResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *DeleteResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *DeleteResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *DeleteResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *DeleteResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "DeleteResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(DeleteResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *DeleteResponse) GetBody() *DeleteResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *DeleteResponse) SetBody(v *DeleteResponse_Body) {
+ x.Body = v
+}
+func (x *DeleteResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *DeleteResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *DeleteResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *DeleteResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *DeleteResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *DeleteResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *DeleteResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *DeleteResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *DeleteResponse_Body
+ f = new(DeleteResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type GetRequest_Body struct {
+ ContainerId *grpc.ContainerID `json:"containerId"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetRequest_Body)(nil)
+ _ json.Marshaler = (*GetRequest_Body)(nil)
+ _ json.Unmarshaler = (*GetRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.ContainerId)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.ContainerId != nil {
+ x.ContainerId.EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // ContainerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ContainerId")
+ }
+ x.ContainerId = new(grpc.ContainerID)
+ if err := x.ContainerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *GetRequest_Body) GetContainerId() *grpc.ContainerID {
+ if x != nil {
+ return x.ContainerId
+ }
+ return nil
+}
+func (x *GetRequest_Body) SetContainerId(v *grpc.ContainerID) {
+ x.ContainerId = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"containerId\":"
+ out.RawString(prefix)
+ x.ContainerId.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "containerId":
+ {
+ var f *grpc.ContainerID
+ f = new(grpc.ContainerID)
+ f.UnmarshalEasyJSON(in)
+ x.ContainerId = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type GetRequest struct {
+ Body *GetRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetRequest)(nil)
+ _ json.Marshaler = (*GetRequest)(nil)
+ _ json.Unmarshaler = (*GetRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *GetRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *GetRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(GetRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *GetRequest) GetBody() *GetRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *GetRequest) SetBody(v *GetRequest_Body) {
+ x.Body = v
+}
+func (x *GetRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *GetRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *GetRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *GetRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *GetRequest_Body
+ f = new(GetRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type GetResponse_Body struct {
+ Container *Container `json:"container"`
+ Signature *grpc.SignatureRFC6979 `json:"signature"`
+ SessionToken *grpc1.SessionToken `json:"sessionToken"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetResponse_Body)(nil)
+ _ json.Marshaler = (*GetResponse_Body)(nil)
+ _ json.Unmarshaler = (*GetResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Container)
+ size += proto.NestedStructureSize(2, x.Signature)
+ size += proto.NestedStructureSize(3, x.SessionToken)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Container != nil {
+ x.Container.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Signature != nil {
+ x.Signature.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.SessionToken != nil {
+ x.SessionToken.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Container
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Container")
+ }
+ x.Container = new(Container)
+ if err := x.Container.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Signature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Signature")
+ }
+ x.Signature = new(grpc.SignatureRFC6979)
+ if err := x.Signature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // SessionToken
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "SessionToken")
+ }
+ x.SessionToken = new(grpc1.SessionToken)
+ if err := x.SessionToken.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *GetResponse_Body) GetContainer() *Container {
+ if x != nil {
+ return x.Container
+ }
+ return nil
+}
+func (x *GetResponse_Body) SetContainer(v *Container) {
+ x.Container = v
+}
+func (x *GetResponse_Body) GetSignature() *grpc.SignatureRFC6979 {
+ if x != nil {
+ return x.Signature
+ }
+ return nil
+}
+func (x *GetResponse_Body) SetSignature(v *grpc.SignatureRFC6979) {
+ x.Signature = v
+}
+func (x *GetResponse_Body) GetSessionToken() *grpc1.SessionToken {
+ if x != nil {
+ return x.SessionToken
+ }
+ return nil
+}
+func (x *GetResponse_Body) SetSessionToken(v *grpc1.SessionToken) {
+ x.SessionToken = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"container\":"
+ out.RawString(prefix)
+ x.Container.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"sessionToken\":"
+ out.RawString(prefix)
+ x.SessionToken.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "container":
+ {
+ var f *Container
+ f = new(Container)
+ f.UnmarshalEasyJSON(in)
+ x.Container = f
+ }
+ case "signature":
+ {
+ var f *grpc.SignatureRFC6979
+ f = new(grpc.SignatureRFC6979)
+ f.UnmarshalEasyJSON(in)
+ x.Signature = f
+ }
+ case "sessionToken":
+ {
+ var f *grpc1.SessionToken
+ f = new(grpc1.SessionToken)
+ f.UnmarshalEasyJSON(in)
+ x.SessionToken = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type GetResponse struct {
+ Body *GetResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetResponse)(nil)
+ _ json.Marshaler = (*GetResponse)(nil)
+ _ json.Unmarshaler = (*GetResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *GetResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *GetResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(GetResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *GetResponse) GetBody() *GetResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *GetResponse) SetBody(v *GetResponse_Body) {
+ x.Body = v
+}
+func (x *GetResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *GetResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *GetResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *GetResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *GetResponse_Body
+ f = new(GetResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ListRequest_Body struct {
+ OwnerId *grpc.OwnerID `json:"ownerId"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ListRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*ListRequest_Body)(nil)
+ _ json.Marshaler = (*ListRequest_Body)(nil)
+ _ json.Unmarshaler = (*ListRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ListRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.OwnerId)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ListRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ListRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.OwnerId != nil {
+ x.OwnerId.EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ListRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ListRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // OwnerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "OwnerId")
+ }
+ x.OwnerId = new(grpc.OwnerID)
+ if err := x.OwnerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *ListRequest_Body) GetOwnerId() *grpc.OwnerID {
+ if x != nil {
+ return x.OwnerId
+ }
+ return nil
+}
+func (x *ListRequest_Body) SetOwnerId(v *grpc.OwnerID) {
+ x.OwnerId = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ListRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ListRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"ownerId\":"
+ out.RawString(prefix)
+ x.OwnerId.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ListRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ListRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "ownerId":
+ {
+ var f *grpc.OwnerID
+ f = new(grpc.OwnerID)
+ f.UnmarshalEasyJSON(in)
+ x.OwnerId = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ListRequest struct {
+ Body *ListRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ListRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*ListRequest)(nil)
+ _ json.Marshaler = (*ListRequest)(nil)
+ _ json.Unmarshaler = (*ListRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ListRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *ListRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *ListRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ListRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ListRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ListRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ListRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(ListRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *ListRequest) GetBody() *ListRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *ListRequest) SetBody(v *ListRequest_Body) {
+ x.Body = v
+}
+func (x *ListRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *ListRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *ListRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *ListRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ListRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ListRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ListRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ListRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *ListRequest_Body
+ f = new(ListRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ListResponse_Body struct {
+ ContainerIds []grpc.ContainerID `json:"containerIds"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ListResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*ListResponse_Body)(nil)
+ _ json.Marshaler = (*ListResponse_Body)(nil)
+ _ json.Unmarshaler = (*ListResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ListResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ for i := range x.ContainerIds {
+ size += proto.NestedStructureSizeUnchecked(1, &x.ContainerIds[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ListResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ListResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ for i := range x.ContainerIds {
+ x.ContainerIds[i].EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ListResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ListResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // ContainerIds
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ContainerIds")
+ }
+ x.ContainerIds = append(x.ContainerIds, grpc.ContainerID{})
+ ff := &x.ContainerIds[len(x.ContainerIds)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *ListResponse_Body) GetContainerIds() []grpc.ContainerID {
+ if x != nil {
+ return x.ContainerIds
+ }
+ return nil
+}
+func (x *ListResponse_Body) SetContainerIds(v []grpc.ContainerID) {
+ x.ContainerIds = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ListResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ListResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ListResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ListResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "containerIds":
+ {
+ var f grpc.ContainerID
+ var list []grpc.ContainerID
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = grpc.ContainerID{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.ContainerIds = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ListResponse struct {
+ Body *ListResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ListResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*ListResponse)(nil)
+ _ json.Marshaler = (*ListResponse)(nil)
+ _ json.Unmarshaler = (*ListResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ListResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *ListResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *ListResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ListResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ListResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ListResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ListResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(ListResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *ListResponse) GetBody() *ListResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *ListResponse) SetBody(v *ListResponse_Body) {
+ x.Body = v
+}
+func (x *ListResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *ListResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *ListResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *ListResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ListResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ListResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ListResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ListResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *ListResponse_Body
+ f = new(ListResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/container/grpc/service_frostfs_fuzz.go b/api/container/grpc/service_frostfs_fuzz.go
new file mode 100644
index 0000000..7e6d6e6
--- /dev/null
+++ b/api/container/grpc/service_frostfs_fuzz.go
@@ -0,0 +1,159 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package container
+
+func DoFuzzProtoPutRequest(data []byte) int {
+ msg := new(PutRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONPutRequest(data []byte) int {
+ msg := new(PutRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoPutResponse(data []byte) int {
+ msg := new(PutResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONPutResponse(data []byte) int {
+ msg := new(PutResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoDeleteRequest(data []byte) int {
+ msg := new(DeleteRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONDeleteRequest(data []byte) int {
+ msg := new(DeleteRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoDeleteResponse(data []byte) int {
+ msg := new(DeleteResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONDeleteResponse(data []byte) int {
+ msg := new(DeleteResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoGetRequest(data []byte) int {
+ msg := new(GetRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONGetRequest(data []byte) int {
+ msg := new(GetRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoGetResponse(data []byte) int {
+ msg := new(GetResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONGetResponse(data []byte) int {
+ msg := new(GetResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoListRequest(data []byte) int {
+ msg := new(ListRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONListRequest(data []byte) int {
+ msg := new(ListRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoListResponse(data []byte) int {
+ msg := new(ListResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONListResponse(data []byte) int {
+ msg := new(ListResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/container/grpc/service_frostfs_test.go b/api/container/grpc/service_frostfs_test.go
new file mode 100644
index 0000000..804b89c
--- /dev/null
+++ b/api/container/grpc/service_frostfs_test.go
@@ -0,0 +1,91 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package container
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoPutRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoPutRequest(data)
+ })
+}
+func FuzzJSONPutRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONPutRequest(data)
+ })
+}
+func FuzzProtoPutResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoPutResponse(data)
+ })
+}
+func FuzzJSONPutResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONPutResponse(data)
+ })
+}
+func FuzzProtoDeleteRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoDeleteRequest(data)
+ })
+}
+func FuzzJSONDeleteRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONDeleteRequest(data)
+ })
+}
+func FuzzProtoDeleteResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoDeleteResponse(data)
+ })
+}
+func FuzzJSONDeleteResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONDeleteResponse(data)
+ })
+}
+func FuzzProtoGetRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoGetRequest(data)
+ })
+}
+func FuzzJSONGetRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONGetRequest(data)
+ })
+}
+func FuzzProtoGetResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoGetResponse(data)
+ })
+}
+func FuzzJSONGetResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONGetResponse(data)
+ })
+}
+func FuzzProtoListRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoListRequest(data)
+ })
+}
+func FuzzJSONListRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONListRequest(data)
+ })
+}
+func FuzzProtoListResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoListResponse(data)
+ })
+}
+func FuzzJSONListResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONListResponse(data)
+ })
+}
diff --git a/api/container/grpc/service_grpc.pb.go b/api/container/grpc/service_grpc.pb.go
new file mode 100644
index 0000000..ea22604
--- /dev/null
+++ b/api/container/grpc/service_grpc.pb.go
@@ -0,0 +1,298 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.3.0
+// - protoc v5.27.2
+// source: api/container/grpc/service.proto
+
+package container
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+const (
+ ContainerService_Put_FullMethodName = "/neo.fs.v2.container.ContainerService/Put"
+ ContainerService_Delete_FullMethodName = "/neo.fs.v2.container.ContainerService/Delete"
+ ContainerService_Get_FullMethodName = "/neo.fs.v2.container.ContainerService/Get"
+ ContainerService_List_FullMethodName = "/neo.fs.v2.container.ContainerService/List"
+)
+
+// ContainerServiceClient is the client API for ContainerService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type ContainerServiceClient interface {
+ // `Put` invokes `Container` smart contract's `Put` method and returns
+ // response immediately. After a new block is issued in sidechain, request is
+ // verified by Inner Ring nodes. After one more block in sidechain, the
+ // container is added into smart contract storage.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // request to save the container has been sent to the sidechain;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // container create access denied.
+ Put(ctx context.Context, in *PutRequest, opts ...grpc.CallOption) (*PutResponse, error)
+ // `Delete` invokes `Container` smart contract's `Delete` method and returns
+ // response immediately. After a new block is issued in sidechain, request is
+ // verified by Inner Ring nodes. After one more block in sidechain, the
+ // container is added into smart contract storage.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // request to remove the container has been sent to the sidechain;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // container delete access denied.
+ Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*DeleteResponse, error)
+ // Returns container structure from `Container` smart contract storage.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // container has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // requested container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied.
+ Get(ctx context.Context, in *GetRequest, opts ...grpc.CallOption) (*GetResponse, error)
+ // Returns all owner's containers from 'Container` smart contract' storage.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // container list has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // container list access denied.
+ List(ctx context.Context, in *ListRequest, opts ...grpc.CallOption) (*ListResponse, error)
+}
+
+type containerServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewContainerServiceClient(cc grpc.ClientConnInterface) ContainerServiceClient {
+ return &containerServiceClient{cc}
+}
+
+func (c *containerServiceClient) Put(ctx context.Context, in *PutRequest, opts ...grpc.CallOption) (*PutResponse, error) {
+ out := new(PutResponse)
+ err := c.cc.Invoke(ctx, ContainerService_Put_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *containerServiceClient) Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*DeleteResponse, error) {
+ out := new(DeleteResponse)
+ err := c.cc.Invoke(ctx, ContainerService_Delete_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *containerServiceClient) Get(ctx context.Context, in *GetRequest, opts ...grpc.CallOption) (*GetResponse, error) {
+ out := new(GetResponse)
+ err := c.cc.Invoke(ctx, ContainerService_Get_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *containerServiceClient) List(ctx context.Context, in *ListRequest, opts ...grpc.CallOption) (*ListResponse, error) {
+ out := new(ListResponse)
+ err := c.cc.Invoke(ctx, ContainerService_List_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// ContainerServiceServer is the server API for ContainerService service.
+// All implementations should embed UnimplementedContainerServiceServer
+// for forward compatibility
+type ContainerServiceServer interface {
+ // `Put` invokes `Container` smart contract's `Put` method and returns
+ // response immediately. After a new block is issued in sidechain, request is
+ // verified by Inner Ring nodes. After one more block in sidechain, the
+ // container is added into smart contract storage.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // request to save the container has been sent to the sidechain;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // container create access denied.
+ Put(context.Context, *PutRequest) (*PutResponse, error)
+ // `Delete` invokes `Container` smart contract's `Delete` method and returns
+ // response immediately. After a new block is issued in sidechain, request is
+ // verified by Inner Ring nodes. After one more block in sidechain, the
+ // container is added into smart contract storage.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // request to remove the container has been sent to the sidechain;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // container delete access denied.
+ Delete(context.Context, *DeleteRequest) (*DeleteResponse, error)
+ // Returns container structure from `Container` smart contract storage.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // container has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // requested container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied.
+ Get(context.Context, *GetRequest) (*GetResponse, error)
+ // Returns all owner's containers from 'Container` smart contract' storage.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // container list has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // container list access denied.
+ List(context.Context, *ListRequest) (*ListResponse, error)
+}
+
+// UnimplementedContainerServiceServer should be embedded to have forward compatible implementations.
+type UnimplementedContainerServiceServer struct {
+}
+
+func (UnimplementedContainerServiceServer) Put(context.Context, *PutRequest) (*PutResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Put not implemented")
+}
+func (UnimplementedContainerServiceServer) Delete(context.Context, *DeleteRequest) (*DeleteResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented")
+}
+func (UnimplementedContainerServiceServer) Get(context.Context, *GetRequest) (*GetResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Get not implemented")
+}
+func (UnimplementedContainerServiceServer) List(context.Context, *ListRequest) (*ListResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
+}
+
+// UnsafeContainerServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to ContainerServiceServer will
+// result in compilation errors.
+type UnsafeContainerServiceServer interface {
+ mustEmbedUnimplementedContainerServiceServer()
+}
+
+func RegisterContainerServiceServer(s grpc.ServiceRegistrar, srv ContainerServiceServer) {
+ s.RegisterService(&ContainerService_ServiceDesc, srv)
+}
+
+func _ContainerService_Put_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(PutRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ContainerServiceServer).Put(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: ContainerService_Put_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ContainerServiceServer).Put(ctx, req.(*PutRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _ContainerService_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(DeleteRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ContainerServiceServer).Delete(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: ContainerService_Delete_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ContainerServiceServer).Delete(ctx, req.(*DeleteRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _ContainerService_Get_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ContainerServiceServer).Get(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: ContainerService_Get_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ContainerServiceServer).Get(ctx, req.(*GetRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _ContainerService_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(ListRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ContainerServiceServer).List(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: ContainerService_List_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ContainerServiceServer).List(ctx, req.(*ListRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// ContainerService_ServiceDesc is the grpc.ServiceDesc for ContainerService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var ContainerService_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "neo.fs.v2.container.ContainerService",
+ HandlerType: (*ContainerServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Put",
+ Handler: _ContainerService_Put_Handler,
+ },
+ {
+ MethodName: "Delete",
+ Handler: _ContainerService_Delete_Handler,
+ },
+ {
+ MethodName: "Get",
+ Handler: _ContainerService_Get_Handler,
+ },
+ {
+ MethodName: "List",
+ Handler: _ContainerService_List_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "api/container/grpc/service.proto",
+}
diff --git a/api/container/grpc/types_frostfs.pb.go b/api/container/grpc/types_frostfs.pb.go
new file mode 100644
index 0000000..fa4aead
--- /dev/null
+++ b/api/container/grpc/types_frostfs.pb.go
@@ -0,0 +1,554 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package container
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ grpc1 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap/grpc"
+ grpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+ strconv "strconv"
+)
+
+type Container_Attribute struct {
+ Key string `json:"key"`
+ Value string `json:"value"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Container_Attribute)(nil)
+ _ encoding.ProtoUnmarshaler = (*Container_Attribute)(nil)
+ _ json.Marshaler = (*Container_Attribute)(nil)
+ _ json.Unmarshaler = (*Container_Attribute)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Container_Attribute) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.StringSize(1, x.Key)
+ size += proto.StringSize(2, x.Value)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Container_Attribute) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Container_Attribute) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.Key) != 0 {
+ mm.AppendString(1, x.Key)
+ }
+ if len(x.Value) != 0 {
+ mm.AppendString(2, x.Value)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Container_Attribute) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Container_Attribute")
+ }
+ switch fc.FieldNum {
+ case 1: // Key
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Key")
+ }
+ x.Key = data
+ case 2: // Value
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Value")
+ }
+ x.Value = data
+ }
+ }
+ return nil
+}
+func (x *Container_Attribute) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+func (x *Container_Attribute) SetKey(v string) {
+ x.Key = v
+}
+func (x *Container_Attribute) GetValue() string {
+ if x != nil {
+ return x.Value
+ }
+ return ""
+}
+func (x *Container_Attribute) SetValue(v string) {
+ x.Value = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Container_Attribute) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Container_Attribute) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Container_Attribute) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Container_Attribute) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "key":
+ {
+ var f string
+ f = in.String()
+ x.Key = f
+ }
+ case "value":
+ {
+ var f string
+ f = in.String()
+ x.Value = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Container struct {
+ Version *grpc.Version `json:"version"`
+ OwnerId *grpc.OwnerID `json:"ownerID"`
+ Nonce []byte `json:"nonce"`
+ BasicAcl uint32 `json:"basicACL"`
+ Attributes []Container_Attribute `json:"attributes"`
+ PlacementPolicy *grpc1.PlacementPolicy `json:"placementPolicy"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Container)(nil)
+ _ encoding.ProtoUnmarshaler = (*Container)(nil)
+ _ json.Marshaler = (*Container)(nil)
+ _ json.Unmarshaler = (*Container)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Container) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Version)
+ size += proto.NestedStructureSize(2, x.OwnerId)
+ size += proto.BytesSize(3, x.Nonce)
+ size += proto.UInt32Size(4, x.BasicAcl)
+ for i := range x.Attributes {
+ size += proto.NestedStructureSizeUnchecked(5, &x.Attributes[i])
+ }
+ size += proto.NestedStructureSize(6, x.PlacementPolicy)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Container) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Container) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Version != nil {
+ x.Version.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.OwnerId != nil {
+ x.OwnerId.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if len(x.Nonce) != 0 {
+ mm.AppendBytes(3, x.Nonce)
+ }
+ if x.BasicAcl != 0 {
+ mm.AppendUint32(4, x.BasicAcl)
+ }
+ for i := range x.Attributes {
+ x.Attributes[i].EmitProtobuf(mm.AppendMessage(5))
+ }
+ if x.PlacementPolicy != nil {
+ x.PlacementPolicy.EmitProtobuf(mm.AppendMessage(6))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Container) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Container")
+ }
+ switch fc.FieldNum {
+ case 1: // Version
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Version")
+ }
+ x.Version = new(grpc.Version)
+ if err := x.Version.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // OwnerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "OwnerId")
+ }
+ x.OwnerId = new(grpc.OwnerID)
+ if err := x.OwnerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // Nonce
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Nonce")
+ }
+ x.Nonce = data
+ case 4: // BasicAcl
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "BasicAcl")
+ }
+ x.BasicAcl = data
+ case 5: // Attributes
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Attributes")
+ }
+ x.Attributes = append(x.Attributes, Container_Attribute{})
+ ff := &x.Attributes[len(x.Attributes)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 6: // PlacementPolicy
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "PlacementPolicy")
+ }
+ x.PlacementPolicy = new(grpc1.PlacementPolicy)
+ if err := x.PlacementPolicy.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *Container) GetVersion() *grpc.Version {
+ if x != nil {
+ return x.Version
+ }
+ return nil
+}
+func (x *Container) SetVersion(v *grpc.Version) {
+ x.Version = v
+}
+func (x *Container) GetOwnerId() *grpc.OwnerID {
+ if x != nil {
+ return x.OwnerId
+ }
+ return nil
+}
+func (x *Container) SetOwnerId(v *grpc.OwnerID) {
+ x.OwnerId = v
+}
+func (x *Container) GetNonce() []byte {
+ if x != nil {
+ return x.Nonce
+ }
+ return nil
+}
+func (x *Container) SetNonce(v []byte) {
+ x.Nonce = v
+}
+func (x *Container) GetBasicAcl() uint32 {
+ if x != nil {
+ return x.BasicAcl
+ }
+ return 0
+}
+func (x *Container) SetBasicAcl(v uint32) {
+ x.BasicAcl = v
+}
+func (x *Container) GetAttributes() []Container_Attribute {
+ if x != nil {
+ return x.Attributes
+ }
+ return nil
+}
+func (x *Container) SetAttributes(v []Container_Attribute) {
+ x.Attributes = v
+}
+func (x *Container) GetPlacementPolicy() *grpc1.PlacementPolicy {
+ if x != nil {
+ return x.PlacementPolicy
+ }
+ return nil
+}
+func (x *Container) SetPlacementPolicy(v *grpc1.PlacementPolicy) {
+ x.PlacementPolicy = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Container) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Container) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"version\":"
+ out.RawString(prefix)
+ x.Version.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 = "\"nonce\":"
+ out.RawString(prefix)
+ if x.Nonce != nil {
+ out.Base64Bytes(x.Nonce)
+ } else {
+ out.String("")
+ }
+ }
+ {
+ 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 = "\"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 = "\"placementPolicy\":"
+ out.RawString(prefix)
+ x.PlacementPolicy.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Container) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Container) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "version":
+ {
+ var f *grpc.Version
+ f = new(grpc.Version)
+ f.UnmarshalEasyJSON(in)
+ x.Version = f
+ }
+ case "ownerID":
+ {
+ var f *grpc.OwnerID
+ f = new(grpc.OwnerID)
+ f.UnmarshalEasyJSON(in)
+ x.OwnerId = f
+ }
+ case "nonce":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Nonce = f
+ }
+ case "basicACL":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.BasicAcl = f
+ }
+ case "attributes":
+ {
+ var f Container_Attribute
+ var list []Container_Attribute
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = Container_Attribute{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Attributes = list
+ in.Delim(']')
+ }
+ case "placementPolicy":
+ {
+ var f *grpc1.PlacementPolicy
+ f = new(grpc1.PlacementPolicy)
+ f.UnmarshalEasyJSON(in)
+ x.PlacementPolicy = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/container/grpc/types_frostfs_fuzz.go b/api/container/grpc/types_frostfs_fuzz.go
new file mode 100644
index 0000000..5551978
--- /dev/null
+++ b/api/container/grpc/types_frostfs_fuzz.go
@@ -0,0 +1,26 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package container
+
+func DoFuzzProtoContainer(data []byte) int {
+ msg := new(Container)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONContainer(data []byte) int {
+ msg := new(Container)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/container/grpc/types_frostfs_test.go b/api/container/grpc/types_frostfs_test.go
new file mode 100644
index 0000000..64d840e
--- /dev/null
+++ b/api/container/grpc/types_frostfs_test.go
@@ -0,0 +1,21 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package container
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoContainer(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoContainer(data)
+ })
+}
+func FuzzJSONContainer(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONContainer(data)
+ })
+}
diff --git a/api/container/json.go b/api/container/json.go
new file mode 100644
index 0000000..838fb8d
--- /dev/null
+++ b/api/container/json.go
@@ -0,0 +1,22 @@
+package container
+
+import (
+ container "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+)
+
+func (a *Attribute) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(a)
+}
+
+func (a *Attribute) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(a, data, new(container.Container_Attribute))
+}
+
+func (c *Container) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(c)
+}
+
+func (c *Container) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(c, data, new(container.Container))
+}
diff --git a/api/container/marshal.go b/api/container/marshal.go
new file mode 100644
index 0000000..2b16669
--- /dev/null
+++ b/api/container/marshal.go
@@ -0,0 +1,345 @@
+package container
+
+import (
+ container "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ protoutil "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+)
+
+const (
+ attributeKeyField = 1
+ attributeValueField = 2
+
+ containerVersionField = 1
+ containerOwnerField = 2
+ containerNonceField = 3
+ containerBasicACLField = 4
+ containerAttributesField = 5
+ containerPlacementField = 6
+
+ putReqBodyContainerField = 1
+ putReqBodySignatureField = 2
+
+ putRespBodyIDField = 1
+
+ deleteReqBodyIDField = 1
+ deleteReqBodySignatureField = 2
+
+ getReqBodyIDField = 1
+
+ getRespBodyContainerField = 1
+ getRespBodySignatureField = 2
+ getRespBodyTokenField = 3
+
+ listReqBodyOwnerField = 1
+
+ listRespBodyIDsField = 1
+)
+
+func (a *Attribute) StableMarshal(buf []byte) []byte {
+ if a == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, a.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.StringMarshal(attributeKeyField, buf[offset:], a.key)
+ protoutil.StringMarshal(attributeValueField, buf[offset:], a.val)
+
+ return buf
+}
+
+func (a *Attribute) StableSize() (size int) {
+ if a == nil {
+ return 0
+ }
+
+ size += protoutil.StringSize(attributeKeyField, a.key)
+ size += protoutil.StringSize(attributeValueField, a.val)
+
+ return size
+}
+
+func (a *Attribute) Unmarshal(data []byte) error {
+ return message.Unmarshal(a, data, new(container.Container_Attribute))
+}
+
+func (c *Container) StableMarshal(buf []byte) []byte {
+ if c == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, c.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.NestedStructureMarshal(containerVersionField, buf[offset:], c.version)
+ offset += protoutil.NestedStructureMarshal(containerOwnerField, buf[offset:], c.ownerID)
+ offset += protoutil.BytesMarshal(containerNonceField, buf[offset:], c.nonce)
+ offset += protoutil.UInt32Marshal(containerBasicACLField, buf[offset:], c.basicACL)
+
+ for i := range c.attr {
+ offset += protoutil.NestedStructureMarshal(containerAttributesField, buf[offset:], &c.attr[i])
+ }
+
+ protoutil.NestedStructureMarshal(containerPlacementField, buf[offset:], c.policy)
+
+ return buf
+}
+
+func (c *Container) StableSize() (size int) {
+ if c == nil {
+ return 0
+ }
+
+ size += protoutil.NestedStructureSize(containerVersionField, c.version)
+ size += protoutil.NestedStructureSize(containerOwnerField, c.ownerID)
+ size += protoutil.BytesSize(containerNonceField, c.nonce)
+ size += protoutil.UInt32Size(containerBasicACLField, c.basicACL)
+
+ for i := range c.attr {
+ size += protoutil.NestedStructureSize(containerAttributesField, &c.attr[i])
+ }
+
+ size += protoutil.NestedStructureSize(containerPlacementField, c.policy)
+
+ return size
+}
+
+func (c *Container) Unmarshal(data []byte) error {
+ return message.Unmarshal(c, data, new(container.Container))
+}
+
+func (r *PutRequestBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.NestedStructureMarshal(putReqBodyContainerField, buf[offset:], r.cnr)
+ protoutil.NestedStructureMarshal(putReqBodySignatureField, buf[offset:], r.sig)
+
+ return buf
+}
+
+func (r *PutRequestBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += protoutil.NestedStructureSize(putReqBodyContainerField, r.cnr)
+ size += protoutil.NestedStructureSize(putReqBodySignatureField, r.sig)
+
+ return size
+}
+
+func (r *PutRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(container.PutRequest_Body))
+}
+
+func (r *PutResponseBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ protoutil.NestedStructureMarshal(putRespBodyIDField, buf, r.cid)
+
+ return buf
+}
+
+func (r *PutResponseBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += protoutil.NestedStructureSize(putRespBodyIDField, r.cid)
+
+ return size
+}
+
+func (r *PutResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(container.PutResponse_Body))
+}
+
+func (r *DeleteRequestBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.NestedStructureMarshal(deleteReqBodyIDField, buf[offset:], r.cid)
+ protoutil.NestedStructureMarshal(deleteReqBodySignatureField, buf[offset:], r.sig)
+
+ return buf
+}
+
+func (r *DeleteRequestBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += protoutil.NestedStructureSize(deleteReqBodyIDField, r.cid)
+ size += protoutil.NestedStructureSize(deleteReqBodySignatureField, r.sig)
+
+ return size
+}
+
+func (r *DeleteRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(container.DeleteRequest_Body))
+}
+
+func (r *DeleteResponseBody) StableMarshal(_ []byte) []byte {
+ return nil
+}
+
+func (r *DeleteResponseBody) StableSize() (size int) {
+ return 0
+}
+
+func (r *DeleteResponseBody) Unmarshal([]byte) error {
+ return nil
+}
+
+func (r *GetRequestBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ protoutil.NestedStructureMarshal(getReqBodyIDField, buf, r.cid)
+
+ return buf
+}
+
+func (r *GetRequestBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += protoutil.NestedStructureSize(getReqBodyIDField, r.cid)
+
+ return size
+}
+
+func (r *GetRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(container.GetRequest_Body))
+}
+
+func (r *GetResponseBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.NestedStructureMarshal(getRespBodyContainerField, buf, r.cnr)
+ offset += protoutil.NestedStructureMarshal(getRespBodySignatureField, buf[offset:], r.sig)
+ protoutil.NestedStructureMarshal(getRespBodyTokenField, buf[offset:], r.token)
+
+ return buf
+}
+
+func (r *GetResponseBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += protoutil.NestedStructureSize(getRespBodyContainerField, r.cnr)
+ size += protoutil.NestedStructureSize(getRespBodySignatureField, r.sig)
+ size += protoutil.NestedStructureSize(getRespBodyTokenField, r.token)
+
+ return size
+}
+
+func (r *GetResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(container.GetResponse_Body))
+}
+
+func (r *ListRequestBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ protoutil.NestedStructureMarshal(listReqBodyOwnerField, buf, r.ownerID)
+
+ return buf
+}
+
+func (r *ListRequestBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += protoutil.NestedStructureSize(listReqBodyOwnerField, r.ownerID)
+
+ return size
+}
+
+func (r *ListRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(container.ListRequest_Body))
+}
+
+func (r *ListResponseBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ for i := range r.cidList {
+ offset += protoutil.NestedStructureMarshal(listRespBodyIDsField, buf[offset:], &r.cidList[i])
+ }
+
+ return buf
+}
+
+func (r *ListResponseBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ for i := range r.cidList {
+ size += protoutil.NestedStructureSize(listRespBodyIDsField, &r.cidList[i])
+ }
+
+ return size
+}
+
+func (r *ListResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(container.ListResponse_Body))
+}
diff --git a/api/container/message_test.go b/api/container/message_test.go
new file mode 100644
index 0000000..b32475d
--- /dev/null
+++ b/api/container/message_test.go
@@ -0,0 +1,36 @@
+package container_test
+
+import (
+ "testing"
+
+ containertest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container/test"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ messagetest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message/test"
+)
+
+func TestMessageConvert(t *testing.T) {
+ messagetest.TestRPCMessage(t,
+ func(empty bool) message.Message { return containertest.GenerateAttribute(empty) },
+ func(empty bool) message.Message { return containertest.GenerateContainer(empty) },
+ func(empty bool) message.Message { return containertest.GeneratePutRequestBody(empty) },
+ func(empty bool) message.Message { return containertest.GeneratePutRequest(empty) },
+ func(empty bool) message.Message { return containertest.GeneratePutResponseBody(empty) },
+ func(empty bool) message.Message { return containertest.GeneratePutResponse(empty) },
+ func(empty bool) message.Message { return containertest.GenerateGetRequestBody(empty) },
+ func(empty bool) message.Message { return containertest.GenerateGetRequest(empty) },
+ func(empty bool) message.Message { return containertest.GenerateGetResponseBody(empty) },
+ func(empty bool) message.Message { return containertest.GenerateGetResponse(empty) },
+ func(empty bool) message.Message { return containertest.GenerateDeleteRequestBody(empty) },
+ func(empty bool) message.Message { return containertest.GenerateDeleteRequest(empty) },
+ func(empty bool) message.Message { return containertest.GenerateDeleteResponseBody(empty) },
+ func(empty bool) message.Message { return containertest.GenerateDeleteResponse(empty) },
+ func(empty bool) message.Message { return containertest.GenerateListRequestBody(empty) },
+ func(empty bool) message.Message { return containertest.GenerateListRequest(empty) },
+ func(empty bool) message.Message { return containertest.GenerateListResponseBody(empty) },
+ func(empty bool) message.Message { return containertest.GenerateListResponse(empty) },
+ func(empty bool) message.Message { return containertest.GenerateGetRequestBody(empty) },
+ func(empty bool) message.Message { return containertest.GenerateGetRequest(empty) },
+ func(empty bool) message.Message { return containertest.GenerateGetResponseBody(empty) },
+ func(empty bool) message.Message { return containertest.GenerateGetResponse(empty) },
+ )
+}
diff --git a/api/container/status.go b/api/container/status.go
new file mode 100644
index 0000000..93b2983
--- /dev/null
+++ b/api/container/status.go
@@ -0,0 +1,33 @@
+package container
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
+ statusgrpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status/grpc"
+)
+
+// LocalizeFailStatus checks if passed global status.Code is related to container failure and:
+//
+// then localizes the code and returns true,
+// else leaves the code unchanged and returns false.
+//
+// Arg must not be nil.
+func LocalizeFailStatus(c *status.Code) bool {
+ return status.LocalizeIfInSection(c, uint32(statusgrpc.Section_SECTION_CONTAINER))
+}
+
+// GlobalizeFail globalizes local code of container failure.
+//
+// Arg must not be nil.
+func GlobalizeFail(c *status.Code) {
+ c.GlobalizeSection(uint32(statusgrpc.Section_SECTION_CONTAINER))
+}
+
+const (
+ // StatusNotFound is a local status.Code value for
+ // CONTAINER_NOT_FOUND container failure.
+ StatusNotFound status.Code = iota
+
+ // StatusEACLNotFound is a local status.Code value for
+ // EACL_NOT_FOUND failure.
+ StatusEACLNotFound
+)
diff --git a/api/container/status_test.go b/api/container/status_test.go
new file mode 100644
index 0000000..92c738d
--- /dev/null
+++ b/api/container/status_test.go
@@ -0,0 +1,15 @@
+package container_test
+
+import (
+ "testing"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
+ statustest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status/test"
+)
+
+func TestStatusCodes(t *testing.T) {
+ statustest.TestCodes(t, container.LocalizeFailStatus, container.GlobalizeFail,
+ container.StatusNotFound, 3072,
+ container.StatusEACLNotFound, 3073,
+ )
+}
diff --git a/api/container/test/generate.go b/api/container/test/generate.go
new file mode 100644
index 0000000..f804da5
--- /dev/null
+++ b/api/container/test/generate.go
@@ -0,0 +1,240 @@
+package containertest
+
+import (
+ "crypto/rand"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
+ netmaptest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap/test"
+ refstest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/test"
+ sessiontest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/test"
+)
+
+func GenerateAttribute(empty bool) *container.Attribute {
+ m := new(container.Attribute)
+
+ if !empty {
+ m.SetKey("key")
+ m.SetValue("val")
+ }
+
+ return m
+}
+
+func GenerateAttributes(empty bool) []container.Attribute {
+ var res []container.Attribute
+
+ if !empty {
+ res = append(res,
+ *GenerateAttribute(false),
+ *GenerateAttribute(false),
+ )
+ }
+
+ return res
+}
+
+func GenerateContainer(empty bool) *container.Container {
+ m := new(container.Container)
+
+ if !empty {
+ nonce := make([]byte, 16)
+ _, _ = rand.Read(nonce)
+
+ m.SetBasicACL(12)
+ m.SetNonce(nonce)
+ m.SetOwnerID(refstest.GenerateOwnerID(false))
+ m.SetAttributes(GenerateAttributes(false))
+ m.SetPlacementPolicy(netmaptest.GeneratePlacementPolicy(false))
+ }
+
+ m.SetVersion(refstest.GenerateVersion(empty))
+
+ return m
+}
+
+func GeneratePutRequestBody(empty bool) *container.PutRequestBody {
+ m := new(container.PutRequestBody)
+
+ if !empty {
+ m.SetContainer(GenerateContainer(false))
+ }
+
+ m.SetSignature(refstest.GenerateSignature(empty))
+
+ return m
+}
+
+func GeneratePutRequest(empty bool) *container.PutRequest {
+ m := new(container.PutRequest)
+
+ if !empty {
+ m.SetBody(GeneratePutRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GeneratePutResponseBody(empty bool) *container.PutResponseBody {
+ m := new(container.PutResponseBody)
+
+ if !empty {
+ m.SetContainerID(refstest.GenerateContainerID(false))
+ }
+
+ return m
+}
+
+func GeneratePutResponse(empty bool) *container.PutResponse {
+ m := new(container.PutResponse)
+
+ if !empty {
+ m.SetBody(GeneratePutResponseBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateGetRequestBody(empty bool) *container.GetRequestBody {
+ m := new(container.GetRequestBody)
+
+ if !empty {
+ m.SetContainerID(refstest.GenerateContainerID(false))
+ }
+
+ return m
+}
+
+func GenerateGetRequest(empty bool) *container.GetRequest {
+ m := new(container.GetRequest)
+
+ if !empty {
+ m.SetBody(GenerateGetRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateGetResponseBody(empty bool) *container.GetResponseBody {
+ m := new(container.GetResponseBody)
+
+ if !empty {
+ m.SetContainer(GenerateContainer(false))
+ }
+
+ m.SetSignature(refstest.GenerateSignature(empty))
+ m.SetSessionToken(sessiontest.GenerateSessionToken(empty))
+
+ return m
+}
+
+func GenerateGetResponse(empty bool) *container.GetResponse {
+ m := new(container.GetResponse)
+
+ if !empty {
+ m.SetBody(GenerateGetResponseBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateDeleteRequestBody(empty bool) *container.DeleteRequestBody {
+ m := new(container.DeleteRequestBody)
+
+ if !empty {
+ m.SetContainerID(refstest.GenerateContainerID(false))
+ }
+
+ m.SetSignature(refstest.GenerateSignature(empty))
+
+ return m
+}
+
+func GenerateDeleteRequest(empty bool) *container.DeleteRequest {
+ m := new(container.DeleteRequest)
+
+ if !empty {
+ m.SetBody(GenerateDeleteRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateDeleteResponseBody(_ bool) *container.DeleteResponseBody {
+ m := new(container.DeleteResponseBody)
+
+ return m
+}
+
+func GenerateDeleteResponse(empty bool) *container.DeleteResponse {
+ m := new(container.DeleteResponse)
+
+ if !empty {
+ m.SetBody(GenerateDeleteResponseBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateListRequestBody(empty bool) *container.ListRequestBody {
+ m := new(container.ListRequestBody)
+
+ if !empty {
+ m.SetOwnerID(refstest.GenerateOwnerID(false))
+ }
+
+ return m
+}
+
+func GenerateListRequest(empty bool) *container.ListRequest {
+ m := new(container.ListRequest)
+
+ if !empty {
+ m.SetBody(GenerateListRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateListResponseBody(empty bool) *container.ListResponseBody {
+ m := new(container.ListResponseBody)
+
+ if !empty {
+ m.SetContainerIDs(refstest.GenerateContainerIDs(false))
+ }
+
+ return m
+}
+
+func GenerateListResponse(empty bool) *container.ListResponse {
+ m := new(container.ListResponse)
+
+ if !empty {
+ m.SetBody(GenerateListResponseBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+
+ return m
+}
diff --git a/api/container/types.go b/api/container/types.go
new file mode 100644
index 0000000..92c4706
--- /dev/null
+++ b/api/container/types.go
@@ -0,0 +1,446 @@
+package container
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+)
+
+type Attribute struct {
+ key, val string
+}
+
+type Container struct {
+ version *refs.Version
+
+ ownerID *refs.OwnerID
+
+ nonce []byte
+
+ basicACL uint32
+
+ attr []Attribute
+
+ policy *netmap.PlacementPolicy
+}
+
+type PutRequestBody struct {
+ cnr *Container
+
+ sig *refs.Signature
+}
+type PutRequest struct {
+ body *PutRequestBody
+
+ session.RequestHeaders
+}
+
+type PutResponseBody struct {
+ cid *refs.ContainerID
+}
+
+type PutResponse struct {
+ body *PutResponseBody
+
+ session.ResponseHeaders
+}
+
+type GetRequestBody struct {
+ cid *refs.ContainerID
+}
+
+type GetRequest struct {
+ body *GetRequestBody
+
+ session.RequestHeaders
+}
+
+type GetResponseBody struct {
+ cnr *Container
+
+ token *session.Token
+
+ sig *refs.Signature
+}
+
+type GetResponse struct {
+ body *GetResponseBody
+
+ session.ResponseHeaders
+}
+
+type DeleteRequestBody struct {
+ cid *refs.ContainerID
+
+ sig *refs.Signature
+}
+
+type DeleteRequest struct {
+ body *DeleteRequestBody
+
+ session.RequestHeaders
+}
+
+type DeleteResponseBody struct{}
+
+type DeleteResponse struct {
+ body *DeleteResponseBody
+
+ session.ResponseHeaders
+}
+
+type ListRequestBody struct {
+ ownerID *refs.OwnerID
+}
+
+type ListRequest struct {
+ body *ListRequestBody
+
+ session.RequestHeaders
+}
+
+type ListResponseBody struct {
+ cidList []refs.ContainerID
+}
+
+type ListResponse struct {
+ body *ListResponseBody
+
+ session.ResponseHeaders
+}
+
+func (a *Attribute) GetKey() string {
+ if a != nil {
+ return a.key
+ }
+
+ return ""
+}
+
+func (a *Attribute) SetKey(v string) {
+ a.key = v
+}
+
+func (a *Attribute) GetValue() string {
+ if a != nil {
+ return a.val
+ }
+
+ return ""
+}
+
+func (a *Attribute) SetValue(v string) {
+ a.val = v
+}
+
+func (c *Container) GetVersion() *refs.Version {
+ if c != nil {
+ return c.version
+ }
+
+ return nil
+}
+
+func (c *Container) SetVersion(v *refs.Version) {
+ c.version = v
+}
+
+func (c *Container) GetOwnerID() *refs.OwnerID {
+ if c != nil {
+ return c.ownerID
+ }
+
+ return nil
+}
+
+func (c *Container) SetOwnerID(v *refs.OwnerID) {
+ c.ownerID = v
+}
+
+func (c *Container) GetNonce() []byte {
+ if c != nil {
+ return c.nonce
+ }
+
+ return nil
+}
+
+func (c *Container) SetNonce(v []byte) {
+ c.nonce = v
+}
+
+func (c *Container) GetBasicACL() uint32 {
+ if c != nil {
+ return c.basicACL
+ }
+
+ return 0
+}
+
+func (c *Container) SetBasicACL(v uint32) {
+ c.basicACL = v
+}
+
+func (c *Container) GetAttributes() []Attribute {
+ if c != nil {
+ return c.attr
+ }
+
+ return nil
+}
+
+func (c *Container) SetAttributes(v []Attribute) {
+ c.attr = v
+}
+
+func (c *Container) GetPlacementPolicy() *netmap.PlacementPolicy {
+ if c != nil {
+ return c.policy
+ }
+
+ return nil
+}
+
+func (c *Container) SetPlacementPolicy(v *netmap.PlacementPolicy) {
+ c.policy = v
+}
+
+func (r *PutRequestBody) GetContainer() *Container {
+ if r != nil {
+ return r.cnr
+ }
+
+ return nil
+}
+
+func (r *PutRequestBody) SetContainer(v *Container) {
+ r.cnr = v
+}
+
+func (r *PutRequestBody) GetSignature() *refs.Signature {
+ if r != nil {
+ return r.sig
+ }
+
+ return nil
+}
+
+func (r *PutRequestBody) SetSignature(v *refs.Signature) {
+ // TODO: (neofs-api-go#381) avoid this hack (e.g. create refs.SignatureRFC6979 type)
+ v.SetScheme(0)
+ r.sig = v
+}
+
+func (r *PutRequest) GetBody() *PutRequestBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *PutRequest) SetBody(v *PutRequestBody) {
+ r.body = v
+}
+
+func (r *PutResponseBody) GetContainerID() *refs.ContainerID {
+ if r != nil {
+ return r.cid
+ }
+
+ return nil
+}
+
+func (r *PutResponseBody) SetContainerID(v *refs.ContainerID) {
+ r.cid = v
+}
+
+func (r *PutResponse) GetBody() *PutResponseBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *PutResponse) SetBody(v *PutResponseBody) {
+ r.body = v
+}
+
+func (r *GetRequestBody) GetContainerID() *refs.ContainerID {
+ if r != nil {
+ return r.cid
+ }
+
+ return nil
+}
+
+func (r *GetRequestBody) SetContainerID(v *refs.ContainerID) {
+ r.cid = v
+}
+
+func (r *GetRequest) GetBody() *GetRequestBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *GetRequest) SetBody(v *GetRequestBody) {
+ r.body = v
+}
+
+func (r *GetResponseBody) GetContainer() *Container {
+ if r != nil {
+ return r.cnr
+ }
+
+ return nil
+}
+
+func (r *GetResponseBody) SetContainer(v *Container) {
+ r.cnr = v
+}
+
+// GetSessionToken returns token of the session within which requested
+// container was created.
+func (r *GetResponseBody) GetSessionToken() *session.Token {
+ if r != nil {
+ return r.token
+ }
+
+ return nil
+}
+
+// SetSessionToken sets token of the session within which requested
+// container was created.
+func (r *GetResponseBody) SetSessionToken(v *session.Token) {
+ r.token = v
+}
+
+// GetSignature returns signature of the requested container.
+func (r *GetResponseBody) GetSignature() *refs.Signature {
+ if r != nil {
+ return r.sig
+ }
+
+ return nil
+}
+
+// SetSignature sets signature of the requested container.
+func (r *GetResponseBody) SetSignature(v *refs.Signature) {
+ // TODO: (neofs-api-go#381) avoid this hack (e.g. create refs.SignatureRFC6979 type)
+ v.SetScheme(0)
+ r.sig = v
+}
+
+func (r *GetResponse) GetBody() *GetResponseBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *GetResponse) SetBody(v *GetResponseBody) {
+ r.body = v
+}
+
+func (r *DeleteRequestBody) GetContainerID() *refs.ContainerID {
+ if r != nil {
+ return r.cid
+ }
+
+ return nil
+}
+
+func (r *DeleteRequestBody) SetContainerID(v *refs.ContainerID) {
+ r.cid = v
+}
+
+func (r *DeleteRequestBody) GetSignature() *refs.Signature {
+ if r != nil {
+ return r.sig
+ }
+
+ return nil
+}
+
+func (r *DeleteRequestBody) SetSignature(v *refs.Signature) {
+ // TODO: (neofs-api-go#381) avoid this hack (e.g. create refs.SignatureRFC6979 type)
+ v.SetScheme(0)
+ r.sig = v
+}
+
+func (r *DeleteRequest) GetBody() *DeleteRequestBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *DeleteRequest) SetBody(v *DeleteRequestBody) {
+ r.body = v
+}
+
+func (r *DeleteResponse) GetBody() *DeleteResponseBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *DeleteResponse) SetBody(v *DeleteResponseBody) {
+ r.body = v
+}
+
+func (r *ListRequestBody) GetOwnerID() *refs.OwnerID {
+ if r != nil {
+ return r.ownerID
+ }
+
+ return nil
+}
+
+func (r *ListRequestBody) SetOwnerID(v *refs.OwnerID) {
+ r.ownerID = v
+}
+
+func (r *ListRequest) GetBody() *ListRequestBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *ListRequest) SetBody(v *ListRequestBody) {
+ r.body = v
+}
+
+func (r *ListResponseBody) GetContainerIDs() []refs.ContainerID {
+ if r != nil {
+ return r.cidList
+ }
+
+ return nil
+}
+
+func (r *ListResponseBody) SetContainerIDs(v []refs.ContainerID) {
+ r.cidList = v
+}
+
+func (r *ListResponse) GetBody() *ListResponseBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *ListResponse) SetBody(v *ListResponseBody) {
+ r.body = v
+}
diff --git a/api/lock/grpc/types_frostfs.pb.go b/api/lock/grpc/types_frostfs.pb.go
new file mode 100644
index 0000000..19e45b0
--- /dev/null
+++ b/api/lock/grpc/types_frostfs.pb.go
@@ -0,0 +1,171 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package lock
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ grpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+)
+
+type Lock struct {
+ Members []grpc.ObjectID `json:"members"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Lock)(nil)
+ _ encoding.ProtoUnmarshaler = (*Lock)(nil)
+ _ json.Marshaler = (*Lock)(nil)
+ _ json.Unmarshaler = (*Lock)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Lock) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ for i := range x.Members {
+ size += proto.NestedStructureSizeUnchecked(1, &x.Members[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Lock) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Lock) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ for i := range x.Members {
+ x.Members[i].EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Lock) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Lock")
+ }
+ switch fc.FieldNum {
+ case 1: // Members
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Members")
+ }
+ x.Members = append(x.Members, grpc.ObjectID{})
+ ff := &x.Members[len(x.Members)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *Lock) GetMembers() []grpc.ObjectID {
+ if x != nil {
+ return x.Members
+ }
+ return nil
+}
+func (x *Lock) SetMembers(v []grpc.ObjectID) {
+ x.Members = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Lock) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Lock) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Lock) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Lock) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "members":
+ {
+ var f grpc.ObjectID
+ var list []grpc.ObjectID
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = grpc.ObjectID{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Members = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/lock/grpc/types_frostfs_fuzz.go b/api/lock/grpc/types_frostfs_fuzz.go
new file mode 100644
index 0000000..cb55151
--- /dev/null
+++ b/api/lock/grpc/types_frostfs_fuzz.go
@@ -0,0 +1,26 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package lock
+
+func DoFuzzProtoLock(data []byte) int {
+ msg := new(Lock)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONLock(data []byte) int {
+ msg := new(Lock)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/lock/grpc/types_frostfs_test.go b/api/lock/grpc/types_frostfs_test.go
new file mode 100644
index 0000000..7c69064
--- /dev/null
+++ b/api/lock/grpc/types_frostfs_test.go
@@ -0,0 +1,21 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package lock
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoLock(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoLock(data)
+ })
+}
+func FuzzJSONLock(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONLock(data)
+ })
+}
diff --git a/api/netmap/convert.go b/api/netmap/convert.go
new file mode 100644
index 0000000..f8117a5
--- /dev/null
+++ b/api/netmap/convert.go
@@ -0,0 +1,916 @@
+package netmap
+
+import (
+ netmap "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+)
+
+func (f *Filter) ToGRPCMessage() grpc.Message {
+ var m *netmap.Filter
+
+ if f != nil {
+ m = new(netmap.Filter)
+
+ m.SetKey(f.key)
+ m.SetValue(f.value)
+ m.SetName(f.name)
+ m.SetOp(OperationToGRPCMessage(f.op))
+ m.SetFilters(FiltersToGRPC(f.filters))
+ }
+
+ return m
+}
+
+func (f *Filter) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.Filter)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ f.filters, err = FiltersFromGRPC(v.GetFilters())
+ if err != nil {
+ return err
+ }
+
+ f.key = v.GetKey()
+ f.value = v.GetValue()
+ f.name = v.GetName()
+ f.op = OperationFromGRPCMessage(v.GetOp())
+
+ return nil
+}
+
+func FiltersToGRPC(fs []Filter) (res []netmap.Filter) {
+ if fs != nil {
+ res = make([]netmap.Filter, 0, len(fs))
+
+ for i := range fs {
+ res = append(res, *fs[i].ToGRPCMessage().(*netmap.Filter))
+ }
+ }
+
+ return
+}
+
+func FiltersFromGRPC(fs []netmap.Filter) (res []Filter, err error) {
+ if fs != nil {
+ res = make([]Filter, len(fs))
+
+ for i := range fs {
+ err = res[i].FromGRPCMessage(&fs[i])
+ if err != nil {
+ return
+ }
+ }
+ }
+
+ return
+}
+
+func (s *Selector) ToGRPCMessage() grpc.Message {
+ var m *netmap.Selector
+
+ if s != nil {
+ m = new(netmap.Selector)
+
+ m.SetName(s.name)
+ m.SetAttribute(s.attribute)
+ m.SetFilter(s.filter)
+ m.SetCount(s.count)
+ m.SetClause(ClauseToGRPCMessage(s.clause))
+ }
+
+ return m
+}
+
+func (s *Selector) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.Selector)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ s.name = v.GetName()
+ s.attribute = v.GetAttribute()
+ s.filter = v.GetFilter()
+ s.count = v.GetCount()
+ s.clause = ClauseFromGRPCMessage(v.GetClause())
+
+ return nil
+}
+
+func SelectorsToGRPC(ss []Selector) (res []netmap.Selector) {
+ if ss != nil {
+ res = make([]netmap.Selector, 0, len(ss))
+
+ for i := range ss {
+ res = append(res, *ss[i].ToGRPCMessage().(*netmap.Selector))
+ }
+ }
+
+ return
+}
+
+func SelectorsFromGRPC(ss []netmap.Selector) (res []Selector, err error) {
+ if ss != nil {
+ res = make([]Selector, len(ss))
+
+ for i := range ss {
+ err = res[i].FromGRPCMessage(&ss[i])
+ if err != nil {
+ return
+ }
+ }
+ }
+
+ return
+}
+
+func (r *Replica) ToGRPCMessage() grpc.Message {
+ var m *netmap.Replica
+
+ if r != nil {
+ m = new(netmap.Replica)
+
+ m.SetSelector(r.selector)
+ m.SetCount(r.count)
+ m.EcDataCount = r.ecDataCount
+ m.EcParityCount = r.ecParityCount
+ }
+
+ return m
+}
+
+func (r *Replica) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.Replica)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ r.selector = v.GetSelector()
+ r.count = v.GetCount()
+ r.ecDataCount = v.GetEcDataCount()
+ r.ecParityCount = v.GetEcParityCount()
+
+ return nil
+}
+
+func ReplicasToGRPC(rs []Replica) (res []netmap.Replica) {
+ if rs != nil {
+ res = make([]netmap.Replica, 0, len(rs))
+
+ for i := range rs {
+ res = append(res, *rs[i].ToGRPCMessage().(*netmap.Replica))
+ }
+ }
+
+ return
+}
+
+func ReplicasFromGRPC(rs []netmap.Replica) (res []Replica, err error) {
+ if rs != nil {
+ res = make([]Replica, len(rs))
+
+ for i := range rs {
+ err = res[i].FromGRPCMessage(&rs[i])
+ if err != nil {
+ return
+ }
+ }
+ }
+
+ return
+}
+
+func (p *PlacementPolicy) ToGRPCMessage() grpc.Message {
+ var m *netmap.PlacementPolicy
+
+ if p != nil {
+ m = new(netmap.PlacementPolicy)
+
+ m.SetFilters(FiltersToGRPC(p.filters))
+ m.SetSelectors(SelectorsToGRPC(p.selectors))
+ m.SetReplicas(ReplicasToGRPC(p.replicas))
+ m.SetContainerBackupFactor(p.backupFactor)
+ m.SetUnique(p.unique)
+ }
+
+ return m
+}
+
+func (p *PlacementPolicy) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.PlacementPolicy)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ p.filters, err = FiltersFromGRPC(v.GetFilters())
+ if err != nil {
+ return err
+ }
+
+ p.selectors, err = SelectorsFromGRPC(v.GetSelectors())
+ if err != nil {
+ return err
+ }
+
+ p.replicas, err = ReplicasFromGRPC(v.GetReplicas())
+ if err != nil {
+ return err
+ }
+
+ p.backupFactor = v.GetContainerBackupFactor()
+
+ p.unique = v.GetUnique()
+
+ return nil
+}
+
+func ClauseToGRPCMessage(n Clause) netmap.Clause {
+ return netmap.Clause(n)
+}
+
+func ClauseFromGRPCMessage(n netmap.Clause) Clause {
+ return Clause(n)
+}
+
+func OperationToGRPCMessage(n Operation) netmap.Operation {
+ return netmap.Operation(n)
+}
+
+func OperationFromGRPCMessage(n netmap.Operation) Operation {
+ return Operation(n)
+}
+
+func NodeStateToGRPCMessage(n NodeState) netmap.NodeInfo_State {
+ return netmap.NodeInfo_State(n)
+}
+
+func NodeStateFromRPCMessage(n netmap.NodeInfo_State) NodeState {
+ return NodeState(n)
+}
+
+func (a *Attribute) ToGRPCMessage() grpc.Message {
+ var m *netmap.NodeInfo_Attribute
+
+ if a != nil {
+ m = new(netmap.NodeInfo_Attribute)
+
+ m.SetKey(a.key)
+ m.SetValue(a.value)
+ m.SetParents(a.parents)
+ }
+
+ return m
+}
+
+func (a *Attribute) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.NodeInfo_Attribute)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ a.key = v.GetKey()
+ a.value = v.GetValue()
+ a.parents = v.GetParents()
+
+ return nil
+}
+
+func AttributesToGRPC(as []Attribute) (res []netmap.NodeInfo_Attribute) {
+ if as != nil {
+ res = make([]netmap.NodeInfo_Attribute, 0, len(as))
+
+ for i := range as {
+ res = append(res, *as[i].ToGRPCMessage().(*netmap.NodeInfo_Attribute))
+ }
+ }
+
+ return
+}
+
+func AttributesFromGRPC(as []netmap.NodeInfo_Attribute) (res []Attribute, err error) {
+ if as != nil {
+ res = make([]Attribute, len(as))
+
+ for i := range as {
+ err = res[i].FromGRPCMessage(&as[i])
+ if err != nil {
+ return
+ }
+ }
+ }
+
+ return
+}
+
+func (ni *NodeInfo) ToGRPCMessage() grpc.Message {
+ var m *netmap.NodeInfo
+
+ if ni != nil {
+ m = new(netmap.NodeInfo)
+
+ m.SetPublicKey(ni.publicKey)
+ m.SetAddresses(ni.addresses)
+ m.SetState(NodeStateToGRPCMessage(ni.state))
+ m.SetAttributes(AttributesToGRPC(ni.attributes))
+ }
+
+ return m
+}
+
+func (ni *NodeInfo) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.NodeInfo)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ ni.attributes, err = AttributesFromGRPC(v.GetAttributes())
+ if err != nil {
+ return err
+ }
+
+ ni.publicKey = v.GetPublicKey()
+ ni.addresses = v.GetAddresses()
+ ni.state = NodeStateFromRPCMessage(v.GetState())
+
+ return nil
+}
+
+func (l *LocalNodeInfoRequestBody) ToGRPCMessage() grpc.Message {
+ var m *netmap.LocalNodeInfoRequest_Body
+
+ if l != nil {
+ m = new(netmap.LocalNodeInfoRequest_Body)
+ }
+
+ return m
+}
+
+func (l *LocalNodeInfoRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.LocalNodeInfoRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ return nil
+}
+
+func (l *LocalNodeInfoRequest) ToGRPCMessage() grpc.Message {
+ var m *netmap.LocalNodeInfoRequest
+
+ if l != nil {
+ m = new(netmap.LocalNodeInfoRequest)
+
+ m.SetBody(l.body.ToGRPCMessage().(*netmap.LocalNodeInfoRequest_Body))
+ l.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (l *LocalNodeInfoRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.LocalNodeInfoRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ l.body = nil
+ } else {
+ if l.body == nil {
+ l.body = new(LocalNodeInfoRequestBody)
+ }
+
+ err = l.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return l.RequestHeaders.FromMessage(v)
+}
+
+func (l *LocalNodeInfoResponseBody) ToGRPCMessage() grpc.Message {
+ var m *netmap.LocalNodeInfoResponse_Body
+
+ if l != nil {
+ m = new(netmap.LocalNodeInfoResponse_Body)
+
+ m.SetVersion(l.version.ToGRPCMessage().(*refsGRPC.Version))
+ m.SetNodeInfo(l.nodeInfo.ToGRPCMessage().(*netmap.NodeInfo))
+ }
+
+ return m
+}
+
+func (l *LocalNodeInfoResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.LocalNodeInfoResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ version := v.GetVersion()
+ if version == nil {
+ l.version = nil
+ } else {
+ if l.version == nil {
+ l.version = new(refs.Version)
+ }
+
+ err = l.version.FromGRPCMessage(version)
+ if err != nil {
+ return err
+ }
+ }
+
+ nodeInfo := v.GetNodeInfo()
+ if nodeInfo == nil {
+ l.nodeInfo = nil
+ } else {
+ if l.nodeInfo == nil {
+ l.nodeInfo = new(NodeInfo)
+ }
+
+ err = l.nodeInfo.FromGRPCMessage(nodeInfo)
+ }
+
+ return err
+}
+
+func (l *LocalNodeInfoResponse) ToGRPCMessage() grpc.Message {
+ var m *netmap.LocalNodeInfoResponse
+
+ if l != nil {
+ m = new(netmap.LocalNodeInfoResponse)
+
+ m.SetBody(l.body.ToGRPCMessage().(*netmap.LocalNodeInfoResponse_Body))
+ l.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (l *LocalNodeInfoResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.LocalNodeInfoResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ l.body = nil
+ } else {
+ if l.body == nil {
+ l.body = new(LocalNodeInfoResponseBody)
+ }
+
+ err = l.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return l.ResponseHeaders.FromMessage(v)
+}
+
+func (x *NetworkParameter) ToGRPCMessage() grpc.Message {
+ var m *netmap.NetworkConfig_Parameter
+
+ if x != nil {
+ m = new(netmap.NetworkConfig_Parameter)
+
+ m.SetKey(x.k)
+ m.SetValue(x.v)
+ }
+
+ return m
+}
+
+func (x *NetworkParameter) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.NetworkConfig_Parameter)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ x.k = v.GetKey()
+ x.v = v.GetValue()
+
+ return nil
+}
+
+func (x *NetworkConfig) ToGRPCMessage() grpc.Message {
+ var m *netmap.NetworkConfig
+
+ if x != nil {
+ m = new(netmap.NetworkConfig)
+
+ var ps []netmap.NetworkConfig_Parameter
+
+ if ln := len(x.ps); ln > 0 {
+ ps = make([]netmap.NetworkConfig_Parameter, 0, ln)
+
+ for i := range ln {
+ ps = append(ps, *x.ps[i].ToGRPCMessage().(*netmap.NetworkConfig_Parameter))
+ }
+ }
+
+ m.SetParameters(ps)
+ }
+
+ return m
+}
+
+func (x *NetworkConfig) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.NetworkConfig)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var (
+ ps []NetworkParameter
+ psV2 = v.GetParameters()
+ )
+
+ if psV2 != nil {
+ ln := len(psV2)
+
+ ps = make([]NetworkParameter, ln)
+
+ for i := range ln {
+ if err := ps[i].FromGRPCMessage(&psV2[i]); err != nil {
+ return err
+ }
+ }
+ }
+
+ x.ps = ps
+
+ return nil
+}
+
+func (i *NetworkInfo) ToGRPCMessage() grpc.Message {
+ var m *netmap.NetworkInfo
+
+ if i != nil {
+ m = new(netmap.NetworkInfo)
+
+ m.SetMagicNumber(i.magicNum)
+ m.SetCurrentEpoch(i.curEpoch)
+ m.SetMsPerBlock(i.msPerBlock)
+ m.SetNetworkConfig(i.netCfg.ToGRPCMessage().(*netmap.NetworkConfig))
+ }
+
+ return m
+}
+
+func (i *NetworkInfo) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.NetworkInfo)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ netCfg := v.GetNetworkConfig()
+ if netCfg == nil {
+ i.netCfg = nil
+ } else {
+ if i.netCfg == nil {
+ i.netCfg = new(NetworkConfig)
+ }
+
+ err = i.netCfg.FromGRPCMessage(netCfg)
+ if err != nil {
+ return err
+ }
+ }
+
+ i.magicNum = v.GetMagicNumber()
+ i.curEpoch = v.GetCurrentEpoch()
+ i.msPerBlock = v.GetMsPerBlock()
+
+ return nil
+}
+
+func (l *NetworkInfoRequestBody) ToGRPCMessage() grpc.Message {
+ var m *netmap.NetworkInfoRequest_Body
+
+ if l != nil {
+ m = new(netmap.NetworkInfoRequest_Body)
+ }
+
+ return m
+}
+
+func (l *NetworkInfoRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.NetworkInfoRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ return nil
+}
+
+func (l *NetworkInfoRequest) ToGRPCMessage() grpc.Message {
+ var m *netmap.NetworkInfoRequest
+
+ if l != nil {
+ m = new(netmap.NetworkInfoRequest)
+
+ m.SetBody(l.body.ToGRPCMessage().(*netmap.NetworkInfoRequest_Body))
+ l.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (l *NetworkInfoRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.NetworkInfoRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ l.body = nil
+ } else {
+ if l.body == nil {
+ l.body = new(NetworkInfoRequestBody)
+ }
+
+ err = l.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return l.RequestHeaders.FromMessage(v)
+}
+
+func (i *NetworkInfoResponseBody) ToGRPCMessage() grpc.Message {
+ var m *netmap.NetworkInfoResponse_Body
+
+ if i != nil {
+ m = new(netmap.NetworkInfoResponse_Body)
+
+ m.SetNetworkInfo(i.netInfo.ToGRPCMessage().(*netmap.NetworkInfo))
+ }
+
+ return m
+}
+
+func (i *NetworkInfoResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.NetworkInfoResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ netInfo := v.GetNetworkInfo()
+ if netInfo == nil {
+ i.netInfo = nil
+ } else {
+ if i.netInfo == nil {
+ i.netInfo = new(NetworkInfo)
+ }
+
+ err = i.netInfo.FromGRPCMessage(netInfo)
+ }
+
+ return err
+}
+
+func (l *NetworkInfoResponse) ToGRPCMessage() grpc.Message {
+ var m *netmap.NetworkInfoResponse
+
+ if l != nil {
+ m = new(netmap.NetworkInfoResponse)
+
+ m.SetBody(l.body.ToGRPCMessage().(*netmap.NetworkInfoResponse_Body))
+ l.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (l *NetworkInfoResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.NetworkInfoResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ l.body = nil
+ } else {
+ if l.body == nil {
+ l.body = new(NetworkInfoResponseBody)
+ }
+
+ err = l.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return l.ResponseHeaders.FromMessage(v)
+}
+
+func (x *NetMap) ToGRPCMessage() grpc.Message {
+ var m *netmap.Netmap
+
+ if x != nil {
+ m = new(netmap.Netmap)
+
+ m.SetEpoch(x.epoch)
+
+ if x.nodes != nil {
+ nodes := make([]netmap.NodeInfo, len(x.nodes))
+
+ for i := range x.nodes {
+ nodes[i] = *x.nodes[i].ToGRPCMessage().(*netmap.NodeInfo)
+ }
+
+ m.SetNodes(nodes)
+ }
+ }
+
+ return m
+}
+
+func (x *NetMap) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.Netmap)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ nodes := v.GetNodes()
+ if nodes == nil {
+ x.nodes = nil
+ } else {
+ x.nodes = make([]NodeInfo, len(nodes))
+
+ for i := range nodes {
+ err = x.nodes[i].FromGRPCMessage(&nodes[i])
+ if err != nil {
+ return err
+ }
+ }
+ }
+
+ x.epoch = v.GetEpoch()
+
+ return nil
+}
+
+func (x *SnapshotRequestBody) ToGRPCMessage() grpc.Message {
+ var m *netmap.NetmapSnapshotRequest_Body
+
+ if x != nil {
+ m = new(netmap.NetmapSnapshotRequest_Body)
+ }
+
+ return m
+}
+
+func (x *SnapshotRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.NetmapSnapshotRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ return nil
+}
+
+func (x *SnapshotRequest) ToGRPCMessage() grpc.Message {
+ var m *netmap.NetmapSnapshotRequest
+
+ if x != nil {
+ m = new(netmap.NetmapSnapshotRequest)
+
+ m.SetBody(x.body.ToGRPCMessage().(*netmap.NetmapSnapshotRequest_Body))
+ x.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (x *SnapshotRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.NetmapSnapshotRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ x.body = nil
+ } else {
+ if x.body == nil {
+ x.body = new(SnapshotRequestBody)
+ }
+
+ err = x.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return x.RequestHeaders.FromMessage(v)
+}
+
+func (x *SnapshotResponseBody) ToGRPCMessage() grpc.Message {
+ var m *netmap.NetmapSnapshotResponse_Body
+
+ if x != nil {
+ m = new(netmap.NetmapSnapshotResponse_Body)
+
+ m.SetNetmap(x.netMap.ToGRPCMessage().(*netmap.Netmap))
+ }
+
+ return m
+}
+
+func (x *SnapshotResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.NetmapSnapshotResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ netMap := v.GetNetmap()
+ if netMap == nil {
+ x.netMap = nil
+ } else {
+ if x.netMap == nil {
+ x.netMap = new(NetMap)
+ }
+
+ err = x.netMap.FromGRPCMessage(netMap)
+ }
+
+ return err
+}
+
+func (x *SnapshotResponse) ToGRPCMessage() grpc.Message {
+ var m *netmap.NetmapSnapshotResponse
+
+ if x != nil {
+ m = new(netmap.NetmapSnapshotResponse)
+
+ m.SetBody(x.body.ToGRPCMessage().(*netmap.NetmapSnapshotResponse_Body))
+ x.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (x *SnapshotResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*netmap.NetmapSnapshotResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ x.body = nil
+ } else {
+ if x.body == nil {
+ x.body = new(SnapshotResponseBody)
+ }
+
+ err = x.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return x.ResponseHeaders.FromMessage(v)
+}
diff --git a/api/netmap/grpc/service_frostfs.pb.go b/api/netmap/grpc/service_frostfs.pb.go
new file mode 100644
index 0000000..7e2d7a3
--- /dev/null
+++ b/api/netmap/grpc/service_frostfs.pb.go
@@ -0,0 +1,2180 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package netmap
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ grpc1 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ grpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/grpc"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+)
+
+type LocalNodeInfoRequest_Body struct {
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*LocalNodeInfoRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*LocalNodeInfoRequest_Body)(nil)
+ _ json.Marshaler = (*LocalNodeInfoRequest_Body)(nil)
+ _ json.Unmarshaler = (*LocalNodeInfoRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *LocalNodeInfoRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *LocalNodeInfoRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *LocalNodeInfoRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *LocalNodeInfoRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "LocalNodeInfoRequest_Body")
+ }
+ switch fc.FieldNum {
+ }
+ }
+ return nil
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *LocalNodeInfoRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *LocalNodeInfoRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ out.RawByte('{')
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *LocalNodeInfoRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *LocalNodeInfoRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type LocalNodeInfoRequest struct {
+ Body *LocalNodeInfoRequest_Body `json:"body"`
+ MetaHeader *grpc.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*LocalNodeInfoRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*LocalNodeInfoRequest)(nil)
+ _ json.Marshaler = (*LocalNodeInfoRequest)(nil)
+ _ json.Unmarshaler = (*LocalNodeInfoRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *LocalNodeInfoRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *LocalNodeInfoRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *LocalNodeInfoRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *LocalNodeInfoRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *LocalNodeInfoRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *LocalNodeInfoRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "LocalNodeInfoRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(LocalNodeInfoRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *LocalNodeInfoRequest) GetBody() *LocalNodeInfoRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *LocalNodeInfoRequest) SetBody(v *LocalNodeInfoRequest_Body) {
+ x.Body = v
+}
+func (x *LocalNodeInfoRequest) GetMetaHeader() *grpc.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *LocalNodeInfoRequest) SetMetaHeader(v *grpc.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *LocalNodeInfoRequest) GetVerifyHeader() *grpc.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *LocalNodeInfoRequest) SetVerifyHeader(v *grpc.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *LocalNodeInfoRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *LocalNodeInfoRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *LocalNodeInfoRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *LocalNodeInfoRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *LocalNodeInfoRequest_Body
+ f = new(LocalNodeInfoRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc.RequestMetaHeader
+ f = new(grpc.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc.RequestVerificationHeader
+ f = new(grpc.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type LocalNodeInfoResponse_Body struct {
+ Version *grpc1.Version `json:"version"`
+ NodeInfo *NodeInfo `json:"nodeInfo"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*LocalNodeInfoResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*LocalNodeInfoResponse_Body)(nil)
+ _ json.Marshaler = (*LocalNodeInfoResponse_Body)(nil)
+ _ json.Unmarshaler = (*LocalNodeInfoResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *LocalNodeInfoResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Version)
+ size += proto.NestedStructureSize(2, x.NodeInfo)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *LocalNodeInfoResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *LocalNodeInfoResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Version != nil {
+ x.Version.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.NodeInfo != nil {
+ x.NodeInfo.EmitProtobuf(mm.AppendMessage(2))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *LocalNodeInfoResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "LocalNodeInfoResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Version
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Version")
+ }
+ x.Version = new(grpc1.Version)
+ if err := x.Version.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // NodeInfo
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "NodeInfo")
+ }
+ x.NodeInfo = new(NodeInfo)
+ if err := x.NodeInfo.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *LocalNodeInfoResponse_Body) GetVersion() *grpc1.Version {
+ if x != nil {
+ return x.Version
+ }
+ return nil
+}
+func (x *LocalNodeInfoResponse_Body) SetVersion(v *grpc1.Version) {
+ x.Version = v
+}
+func (x *LocalNodeInfoResponse_Body) GetNodeInfo() *NodeInfo {
+ if x != nil {
+ return x.NodeInfo
+ }
+ return nil
+}
+func (x *LocalNodeInfoResponse_Body) SetNodeInfo(v *NodeInfo) {
+ x.NodeInfo = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *LocalNodeInfoResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *LocalNodeInfoResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"version\":"
+ out.RawString(prefix)
+ x.Version.MarshalEasyJSON(out)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"nodeInfo\":"
+ out.RawString(prefix)
+ x.NodeInfo.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *LocalNodeInfoResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *LocalNodeInfoResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "version":
+ {
+ var f *grpc1.Version
+ f = new(grpc1.Version)
+ f.UnmarshalEasyJSON(in)
+ x.Version = f
+ }
+ case "nodeInfo":
+ {
+ var f *NodeInfo
+ f = new(NodeInfo)
+ f.UnmarshalEasyJSON(in)
+ x.NodeInfo = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type LocalNodeInfoResponse struct {
+ Body *LocalNodeInfoResponse_Body `json:"body"`
+ MetaHeader *grpc.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*LocalNodeInfoResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*LocalNodeInfoResponse)(nil)
+ _ json.Marshaler = (*LocalNodeInfoResponse)(nil)
+ _ json.Unmarshaler = (*LocalNodeInfoResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *LocalNodeInfoResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *LocalNodeInfoResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *LocalNodeInfoResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *LocalNodeInfoResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *LocalNodeInfoResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *LocalNodeInfoResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "LocalNodeInfoResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(LocalNodeInfoResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *LocalNodeInfoResponse) GetBody() *LocalNodeInfoResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *LocalNodeInfoResponse) SetBody(v *LocalNodeInfoResponse_Body) {
+ x.Body = v
+}
+func (x *LocalNodeInfoResponse) GetMetaHeader() *grpc.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *LocalNodeInfoResponse) SetMetaHeader(v *grpc.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *LocalNodeInfoResponse) GetVerifyHeader() *grpc.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *LocalNodeInfoResponse) SetVerifyHeader(v *grpc.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *LocalNodeInfoResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *LocalNodeInfoResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *LocalNodeInfoResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *LocalNodeInfoResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *LocalNodeInfoResponse_Body
+ f = new(LocalNodeInfoResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc.ResponseMetaHeader
+ f = new(grpc.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc.ResponseVerificationHeader
+ f = new(grpc.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type NetworkInfoRequest_Body struct {
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*NetworkInfoRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*NetworkInfoRequest_Body)(nil)
+ _ json.Marshaler = (*NetworkInfoRequest_Body)(nil)
+ _ json.Unmarshaler = (*NetworkInfoRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *NetworkInfoRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *NetworkInfoRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *NetworkInfoRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *NetworkInfoRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "NetworkInfoRequest_Body")
+ }
+ switch fc.FieldNum {
+ }
+ }
+ return nil
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *NetworkInfoRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *NetworkInfoRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ out.RawByte('{')
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *NetworkInfoRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *NetworkInfoRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type NetworkInfoRequest struct {
+ Body *NetworkInfoRequest_Body `json:"body"`
+ MetaHeader *grpc.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*NetworkInfoRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*NetworkInfoRequest)(nil)
+ _ json.Marshaler = (*NetworkInfoRequest)(nil)
+ _ json.Unmarshaler = (*NetworkInfoRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *NetworkInfoRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *NetworkInfoRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *NetworkInfoRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *NetworkInfoRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *NetworkInfoRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *NetworkInfoRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "NetworkInfoRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(NetworkInfoRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *NetworkInfoRequest) GetBody() *NetworkInfoRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *NetworkInfoRequest) SetBody(v *NetworkInfoRequest_Body) {
+ x.Body = v
+}
+func (x *NetworkInfoRequest) GetMetaHeader() *grpc.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *NetworkInfoRequest) SetMetaHeader(v *grpc.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *NetworkInfoRequest) GetVerifyHeader() *grpc.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *NetworkInfoRequest) SetVerifyHeader(v *grpc.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *NetworkInfoRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *NetworkInfoRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *NetworkInfoRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *NetworkInfoRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *NetworkInfoRequest_Body
+ f = new(NetworkInfoRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc.RequestMetaHeader
+ f = new(grpc.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc.RequestVerificationHeader
+ f = new(grpc.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type NetworkInfoResponse_Body struct {
+ NetworkInfo *NetworkInfo `json:"networkInfo"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*NetworkInfoResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*NetworkInfoResponse_Body)(nil)
+ _ json.Marshaler = (*NetworkInfoResponse_Body)(nil)
+ _ json.Unmarshaler = (*NetworkInfoResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *NetworkInfoResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.NetworkInfo)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *NetworkInfoResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *NetworkInfoResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.NetworkInfo != nil {
+ x.NetworkInfo.EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *NetworkInfoResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "NetworkInfoResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // NetworkInfo
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "NetworkInfo")
+ }
+ x.NetworkInfo = new(NetworkInfo)
+ if err := x.NetworkInfo.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *NetworkInfoResponse_Body) GetNetworkInfo() *NetworkInfo {
+ if x != nil {
+ return x.NetworkInfo
+ }
+ return nil
+}
+func (x *NetworkInfoResponse_Body) SetNetworkInfo(v *NetworkInfo) {
+ x.NetworkInfo = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *NetworkInfoResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *NetworkInfoResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"networkInfo\":"
+ out.RawString(prefix)
+ x.NetworkInfo.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *NetworkInfoResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *NetworkInfoResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "networkInfo":
+ {
+ var f *NetworkInfo
+ f = new(NetworkInfo)
+ f.UnmarshalEasyJSON(in)
+ x.NetworkInfo = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type NetworkInfoResponse struct {
+ Body *NetworkInfoResponse_Body `json:"body"`
+ MetaHeader *grpc.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*NetworkInfoResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*NetworkInfoResponse)(nil)
+ _ json.Marshaler = (*NetworkInfoResponse)(nil)
+ _ json.Unmarshaler = (*NetworkInfoResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *NetworkInfoResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *NetworkInfoResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *NetworkInfoResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *NetworkInfoResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *NetworkInfoResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *NetworkInfoResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "NetworkInfoResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(NetworkInfoResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *NetworkInfoResponse) GetBody() *NetworkInfoResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *NetworkInfoResponse) SetBody(v *NetworkInfoResponse_Body) {
+ x.Body = v
+}
+func (x *NetworkInfoResponse) GetMetaHeader() *grpc.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *NetworkInfoResponse) SetMetaHeader(v *grpc.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *NetworkInfoResponse) GetVerifyHeader() *grpc.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *NetworkInfoResponse) SetVerifyHeader(v *grpc.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *NetworkInfoResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *NetworkInfoResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *NetworkInfoResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *NetworkInfoResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *NetworkInfoResponse_Body
+ f = new(NetworkInfoResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc.ResponseMetaHeader
+ f = new(grpc.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc.ResponseVerificationHeader
+ f = new(grpc.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type NetmapSnapshotRequest_Body struct {
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*NetmapSnapshotRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*NetmapSnapshotRequest_Body)(nil)
+ _ json.Marshaler = (*NetmapSnapshotRequest_Body)(nil)
+ _ json.Unmarshaler = (*NetmapSnapshotRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *NetmapSnapshotRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *NetmapSnapshotRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *NetmapSnapshotRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *NetmapSnapshotRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "NetmapSnapshotRequest_Body")
+ }
+ switch fc.FieldNum {
+ }
+ }
+ return nil
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *NetmapSnapshotRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *NetmapSnapshotRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ out.RawByte('{')
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *NetmapSnapshotRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *NetmapSnapshotRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type NetmapSnapshotRequest struct {
+ Body *NetmapSnapshotRequest_Body `json:"body"`
+ MetaHeader *grpc.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*NetmapSnapshotRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*NetmapSnapshotRequest)(nil)
+ _ json.Marshaler = (*NetmapSnapshotRequest)(nil)
+ _ json.Unmarshaler = (*NetmapSnapshotRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *NetmapSnapshotRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *NetmapSnapshotRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *NetmapSnapshotRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *NetmapSnapshotRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *NetmapSnapshotRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *NetmapSnapshotRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "NetmapSnapshotRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(NetmapSnapshotRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *NetmapSnapshotRequest) GetBody() *NetmapSnapshotRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *NetmapSnapshotRequest) SetBody(v *NetmapSnapshotRequest_Body) {
+ x.Body = v
+}
+func (x *NetmapSnapshotRequest) GetMetaHeader() *grpc.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *NetmapSnapshotRequest) SetMetaHeader(v *grpc.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *NetmapSnapshotRequest) GetVerifyHeader() *grpc.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *NetmapSnapshotRequest) SetVerifyHeader(v *grpc.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *NetmapSnapshotRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *NetmapSnapshotRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *NetmapSnapshotRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *NetmapSnapshotRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *NetmapSnapshotRequest_Body
+ f = new(NetmapSnapshotRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc.RequestMetaHeader
+ f = new(grpc.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc.RequestVerificationHeader
+ f = new(grpc.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type NetmapSnapshotResponse_Body struct {
+ Netmap *Netmap `json:"netmap"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*NetmapSnapshotResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*NetmapSnapshotResponse_Body)(nil)
+ _ json.Marshaler = (*NetmapSnapshotResponse_Body)(nil)
+ _ json.Unmarshaler = (*NetmapSnapshotResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *NetmapSnapshotResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Netmap)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *NetmapSnapshotResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *NetmapSnapshotResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Netmap != nil {
+ x.Netmap.EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *NetmapSnapshotResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "NetmapSnapshotResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Netmap
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Netmap")
+ }
+ x.Netmap = new(Netmap)
+ if err := x.Netmap.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *NetmapSnapshotResponse_Body) GetNetmap() *Netmap {
+ if x != nil {
+ return x.Netmap
+ }
+ return nil
+}
+func (x *NetmapSnapshotResponse_Body) SetNetmap(v *Netmap) {
+ x.Netmap = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *NetmapSnapshotResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *NetmapSnapshotResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"netmap\":"
+ out.RawString(prefix)
+ x.Netmap.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *NetmapSnapshotResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *NetmapSnapshotResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "netmap":
+ {
+ var f *Netmap
+ f = new(Netmap)
+ f.UnmarshalEasyJSON(in)
+ x.Netmap = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type NetmapSnapshotResponse struct {
+ Body *NetmapSnapshotResponse_Body `json:"body"`
+ MetaHeader *grpc.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*NetmapSnapshotResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*NetmapSnapshotResponse)(nil)
+ _ json.Marshaler = (*NetmapSnapshotResponse)(nil)
+ _ json.Unmarshaler = (*NetmapSnapshotResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *NetmapSnapshotResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *NetmapSnapshotResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *NetmapSnapshotResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *NetmapSnapshotResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *NetmapSnapshotResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *NetmapSnapshotResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "NetmapSnapshotResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(NetmapSnapshotResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *NetmapSnapshotResponse) GetBody() *NetmapSnapshotResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *NetmapSnapshotResponse) SetBody(v *NetmapSnapshotResponse_Body) {
+ x.Body = v
+}
+func (x *NetmapSnapshotResponse) GetMetaHeader() *grpc.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *NetmapSnapshotResponse) SetMetaHeader(v *grpc.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *NetmapSnapshotResponse) GetVerifyHeader() *grpc.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *NetmapSnapshotResponse) SetVerifyHeader(v *grpc.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *NetmapSnapshotResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *NetmapSnapshotResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *NetmapSnapshotResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *NetmapSnapshotResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *NetmapSnapshotResponse_Body
+ f = new(NetmapSnapshotResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc.ResponseMetaHeader
+ f = new(grpc.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc.ResponseVerificationHeader
+ f = new(grpc.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/netmap/grpc/service_frostfs_fuzz.go b/api/netmap/grpc/service_frostfs_fuzz.go
new file mode 100644
index 0000000..ebb59bc
--- /dev/null
+++ b/api/netmap/grpc/service_frostfs_fuzz.go
@@ -0,0 +1,121 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package netmap
+
+func DoFuzzProtoLocalNodeInfoRequest(data []byte) int {
+ msg := new(LocalNodeInfoRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONLocalNodeInfoRequest(data []byte) int {
+ msg := new(LocalNodeInfoRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoLocalNodeInfoResponse(data []byte) int {
+ msg := new(LocalNodeInfoResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONLocalNodeInfoResponse(data []byte) int {
+ msg := new(LocalNodeInfoResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoNetworkInfoRequest(data []byte) int {
+ msg := new(NetworkInfoRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONNetworkInfoRequest(data []byte) int {
+ msg := new(NetworkInfoRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoNetworkInfoResponse(data []byte) int {
+ msg := new(NetworkInfoResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONNetworkInfoResponse(data []byte) int {
+ msg := new(NetworkInfoResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoNetmapSnapshotRequest(data []byte) int {
+ msg := new(NetmapSnapshotRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONNetmapSnapshotRequest(data []byte) int {
+ msg := new(NetmapSnapshotRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoNetmapSnapshotResponse(data []byte) int {
+ msg := new(NetmapSnapshotResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONNetmapSnapshotResponse(data []byte) int {
+ msg := new(NetmapSnapshotResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/netmap/grpc/service_frostfs_test.go b/api/netmap/grpc/service_frostfs_test.go
new file mode 100644
index 0000000..5c9035f
--- /dev/null
+++ b/api/netmap/grpc/service_frostfs_test.go
@@ -0,0 +1,71 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package netmap
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoLocalNodeInfoRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoLocalNodeInfoRequest(data)
+ })
+}
+func FuzzJSONLocalNodeInfoRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONLocalNodeInfoRequest(data)
+ })
+}
+func FuzzProtoLocalNodeInfoResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoLocalNodeInfoResponse(data)
+ })
+}
+func FuzzJSONLocalNodeInfoResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONLocalNodeInfoResponse(data)
+ })
+}
+func FuzzProtoNetworkInfoRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoNetworkInfoRequest(data)
+ })
+}
+func FuzzJSONNetworkInfoRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONNetworkInfoRequest(data)
+ })
+}
+func FuzzProtoNetworkInfoResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoNetworkInfoResponse(data)
+ })
+}
+func FuzzJSONNetworkInfoResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONNetworkInfoResponse(data)
+ })
+}
+func FuzzProtoNetmapSnapshotRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoNetmapSnapshotRequest(data)
+ })
+}
+func FuzzJSONNetmapSnapshotRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONNetmapSnapshotRequest(data)
+ })
+}
+func FuzzProtoNetmapSnapshotResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoNetmapSnapshotResponse(data)
+ })
+}
+func FuzzJSONNetmapSnapshotResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONNetmapSnapshotResponse(data)
+ })
+}
diff --git a/api/netmap/grpc/service_grpc.pb.go b/api/netmap/grpc/service_grpc.pb.go
new file mode 100644
index 0000000..7deee56
--- /dev/null
+++ b/api/netmap/grpc/service_grpc.pb.go
@@ -0,0 +1,227 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.3.0
+// - protoc v5.27.2
+// source: api/netmap/grpc/service.proto
+
+package netmap
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+const (
+ NetmapService_LocalNodeInfo_FullMethodName = "/neo.fs.v2.netmap.NetmapService/LocalNodeInfo"
+ NetmapService_NetworkInfo_FullMethodName = "/neo.fs.v2.netmap.NetmapService/NetworkInfo"
+ NetmapService_NetmapSnapshot_FullMethodName = "/neo.fs.v2.netmap.NetmapService/NetmapSnapshot"
+)
+
+// NetmapServiceClient is the client API for NetmapService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type NetmapServiceClient interface {
+ // Get NodeInfo structure from the particular node directly.
+ // Node information can be taken from `Netmap` smart contract. In some cases,
+ // though, one may want to get recent information directly or to talk to the
+ // node not yet present in the `Network Map` to find out what API version can
+ // be used for further communication. This can be also used to check if a node
+ // is up and running.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS):
+ // information about the server has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON).
+ LocalNodeInfo(ctx context.Context, in *LocalNodeInfoRequest, opts ...grpc.CallOption) (*LocalNodeInfoResponse, error)
+ // Read recent information about the FrostFS network.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS):
+ // information about the current network state has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON).
+ NetworkInfo(ctx context.Context, in *NetworkInfoRequest, opts ...grpc.CallOption) (*NetworkInfoResponse, error)
+ // Returns network map snapshot of the current FrostFS epoch.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS):
+ // information about the current network map has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON).
+ NetmapSnapshot(ctx context.Context, in *NetmapSnapshotRequest, opts ...grpc.CallOption) (*NetmapSnapshotResponse, error)
+}
+
+type netmapServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewNetmapServiceClient(cc grpc.ClientConnInterface) NetmapServiceClient {
+ return &netmapServiceClient{cc}
+}
+
+func (c *netmapServiceClient) LocalNodeInfo(ctx context.Context, in *LocalNodeInfoRequest, opts ...grpc.CallOption) (*LocalNodeInfoResponse, error) {
+ out := new(LocalNodeInfoResponse)
+ err := c.cc.Invoke(ctx, NetmapService_LocalNodeInfo_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *netmapServiceClient) NetworkInfo(ctx context.Context, in *NetworkInfoRequest, opts ...grpc.CallOption) (*NetworkInfoResponse, error) {
+ out := new(NetworkInfoResponse)
+ err := c.cc.Invoke(ctx, NetmapService_NetworkInfo_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *netmapServiceClient) NetmapSnapshot(ctx context.Context, in *NetmapSnapshotRequest, opts ...grpc.CallOption) (*NetmapSnapshotResponse, error) {
+ out := new(NetmapSnapshotResponse)
+ err := c.cc.Invoke(ctx, NetmapService_NetmapSnapshot_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// NetmapServiceServer is the server API for NetmapService service.
+// All implementations should embed UnimplementedNetmapServiceServer
+// for forward compatibility
+type NetmapServiceServer interface {
+ // Get NodeInfo structure from the particular node directly.
+ // Node information can be taken from `Netmap` smart contract. In some cases,
+ // though, one may want to get recent information directly or to talk to the
+ // node not yet present in the `Network Map` to find out what API version can
+ // be used for further communication. This can be also used to check if a node
+ // is up and running.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS):
+ // information about the server has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON).
+ LocalNodeInfo(context.Context, *LocalNodeInfoRequest) (*LocalNodeInfoResponse, error)
+ // Read recent information about the FrostFS network.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS):
+ // information about the current network state has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON).
+ NetworkInfo(context.Context, *NetworkInfoRequest) (*NetworkInfoResponse, error)
+ // Returns network map snapshot of the current FrostFS epoch.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS):
+ // information about the current network map has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON).
+ NetmapSnapshot(context.Context, *NetmapSnapshotRequest) (*NetmapSnapshotResponse, error)
+}
+
+// UnimplementedNetmapServiceServer should be embedded to have forward compatible implementations.
+type UnimplementedNetmapServiceServer struct {
+}
+
+func (UnimplementedNetmapServiceServer) LocalNodeInfo(context.Context, *LocalNodeInfoRequest) (*LocalNodeInfoResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method LocalNodeInfo not implemented")
+}
+func (UnimplementedNetmapServiceServer) NetworkInfo(context.Context, *NetworkInfoRequest) (*NetworkInfoResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method NetworkInfo not implemented")
+}
+func (UnimplementedNetmapServiceServer) NetmapSnapshot(context.Context, *NetmapSnapshotRequest) (*NetmapSnapshotResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method NetmapSnapshot not implemented")
+}
+
+// UnsafeNetmapServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to NetmapServiceServer will
+// result in compilation errors.
+type UnsafeNetmapServiceServer interface {
+ mustEmbedUnimplementedNetmapServiceServer()
+}
+
+func RegisterNetmapServiceServer(s grpc.ServiceRegistrar, srv NetmapServiceServer) {
+ s.RegisterService(&NetmapService_ServiceDesc, srv)
+}
+
+func _NetmapService_LocalNodeInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(LocalNodeInfoRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(NetmapServiceServer).LocalNodeInfo(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: NetmapService_LocalNodeInfo_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(NetmapServiceServer).LocalNodeInfo(ctx, req.(*LocalNodeInfoRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _NetmapService_NetworkInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(NetworkInfoRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(NetmapServiceServer).NetworkInfo(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: NetmapService_NetworkInfo_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(NetmapServiceServer).NetworkInfo(ctx, req.(*NetworkInfoRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _NetmapService_NetmapSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(NetmapSnapshotRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(NetmapServiceServer).NetmapSnapshot(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: NetmapService_NetmapSnapshot_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(NetmapServiceServer).NetmapSnapshot(ctx, req.(*NetmapSnapshotRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// NetmapService_ServiceDesc is the grpc.ServiceDesc for NetmapService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var NetmapService_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "neo.fs.v2.netmap.NetmapService",
+ HandlerType: (*NetmapServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "LocalNodeInfo",
+ Handler: _NetmapService_LocalNodeInfo_Handler,
+ },
+ {
+ MethodName: "NetworkInfo",
+ Handler: _NetmapService_NetworkInfo_Handler,
+ },
+ {
+ MethodName: "NetmapSnapshot",
+ Handler: _NetmapService_NetmapSnapshot_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "api/netmap/grpc/service.proto",
+}
diff --git a/api/netmap/grpc/types_frostfs.pb.go b/api/netmap/grpc/types_frostfs.pb.go
new file mode 100644
index 0000000..15f8959
--- /dev/null
+++ b/api/netmap/grpc/types_frostfs.pb.go
@@ -0,0 +1,2749 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package netmap
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+ strconv "strconv"
+)
+
+type Operation int32
+
+const (
+ Operation_OPERATION_UNSPECIFIED Operation = 0
+ Operation_EQ Operation = 1
+ Operation_NE Operation = 2
+ Operation_GT Operation = 3
+ Operation_GE Operation = 4
+ Operation_LT Operation = 5
+ Operation_LE Operation = 6
+ Operation_OR Operation = 7
+ Operation_AND Operation = 8
+ Operation_NOT Operation = 9
+ Operation_LIKE Operation = 10
+)
+
+var (
+ Operation_name = map[int32]string{
+ 0: "OPERATION_UNSPECIFIED",
+ 1: "EQ",
+ 2: "NE",
+ 3: "GT",
+ 4: "GE",
+ 5: "LT",
+ 6: "LE",
+ 7: "OR",
+ 8: "AND",
+ 9: "NOT",
+ 10: "LIKE",
+ }
+ Operation_value = map[string]int32{
+ "OPERATION_UNSPECIFIED": 0,
+ "EQ": 1,
+ "NE": 2,
+ "GT": 3,
+ "GE": 4,
+ "LT": 5,
+ "LE": 6,
+ "OR": 7,
+ "AND": 8,
+ "NOT": 9,
+ "LIKE": 10,
+ }
+)
+
+func (x Operation) String() string {
+ if v, ok := Operation_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *Operation) FromString(s string) bool {
+ if v, ok := Operation_value[s]; ok {
+ *x = Operation(v)
+ return true
+ }
+ return false
+}
+
+type Clause int32
+
+const (
+ Clause_CLAUSE_UNSPECIFIED Clause = 0
+ Clause_SAME Clause = 1
+ Clause_DISTINCT Clause = 2
+)
+
+var (
+ Clause_name = map[int32]string{
+ 0: "CLAUSE_UNSPECIFIED",
+ 1: "SAME",
+ 2: "DISTINCT",
+ }
+ Clause_value = map[string]int32{
+ "CLAUSE_UNSPECIFIED": 0,
+ "SAME": 1,
+ "DISTINCT": 2,
+ }
+)
+
+func (x Clause) String() string {
+ if v, ok := Clause_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *Clause) FromString(s string) bool {
+ if v, ok := Clause_value[s]; ok {
+ *x = Clause(v)
+ return true
+ }
+ return false
+}
+
+type Filter struct {
+ Name string `json:"name"`
+ Key string `json:"key"`
+ Op Operation `json:"op"`
+ Value string `json:"value"`
+ Filters []Filter `json:"filters"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Filter)(nil)
+ _ encoding.ProtoUnmarshaler = (*Filter)(nil)
+ _ json.Marshaler = (*Filter)(nil)
+ _ json.Unmarshaler = (*Filter)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Filter) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.StringSize(1, x.Name)
+ size += proto.StringSize(2, x.Key)
+ size += proto.EnumSize(3, int32(x.Op))
+ size += proto.StringSize(4, x.Value)
+ for i := range x.Filters {
+ size += proto.NestedStructureSizeUnchecked(5, &x.Filters[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Filter) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Filter) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.Name) != 0 {
+ mm.AppendString(1, x.Name)
+ }
+ if len(x.Key) != 0 {
+ mm.AppendString(2, x.Key)
+ }
+ if int32(x.Op) != 0 {
+ mm.AppendInt32(3, int32(x.Op))
+ }
+ if len(x.Value) != 0 {
+ mm.AppendString(4, x.Value)
+ }
+ for i := range x.Filters {
+ x.Filters[i].EmitProtobuf(mm.AppendMessage(5))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Filter) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Filter")
+ }
+ switch fc.FieldNum {
+ case 1: // Name
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Name")
+ }
+ x.Name = data
+ case 2: // Key
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Key")
+ }
+ x.Key = data
+ case 3: // Op
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Op")
+ }
+ x.Op = Operation(data)
+ case 4: // Value
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Value")
+ }
+ x.Value = data
+ case 5: // Filters
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Filters")
+ }
+ x.Filters = append(x.Filters, Filter{})
+ ff := &x.Filters[len(x.Filters)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *Filter) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+func (x *Filter) SetName(v string) {
+ x.Name = v
+}
+func (x *Filter) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+func (x *Filter) SetKey(v string) {
+ x.Key = v
+}
+func (x *Filter) GetOp() Operation {
+ if x != nil {
+ return x.Op
+ }
+ return 0
+}
+func (x *Filter) SetOp(v Operation) {
+ x.Op = v
+}
+func (x *Filter) GetValue() string {
+ if x != nil {
+ return x.Value
+ }
+ return ""
+}
+func (x *Filter) SetValue(v string) {
+ x.Value = v
+}
+func (x *Filter) GetFilters() []Filter {
+ if x != nil {
+ return x.Filters
+ }
+ return nil
+}
+func (x *Filter) SetFilters(v []Filter) {
+ x.Filters = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Filter) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Filter) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 !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 = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Filter) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Filter) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "name":
+ {
+ var f string
+ f = in.String()
+ x.Name = f
+ }
+ case "key":
+ {
+ var f string
+ f = in.String()
+ x.Key = f
+ }
+ case "op":
+ {
+ var f Operation
+ var parsedValue Operation
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := Operation_value[v]; ok {
+ parsedValue = Operation(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = Operation(vv)
+ case float64:
+ parsedValue = Operation(v)
+ }
+ f = parsedValue
+ x.Op = f
+ }
+ case "value":
+ {
+ var f string
+ f = in.String()
+ x.Value = f
+ }
+ case "filters":
+ {
+ var f Filter
+ var list []Filter
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = Filter{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Filters = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Selector struct {
+ Name string `json:"name"`
+ Count uint32 `json:"count"`
+ Clause Clause `json:"clause"`
+ Attribute string `json:"attribute"`
+ Filter string `json:"filter"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Selector)(nil)
+ _ encoding.ProtoUnmarshaler = (*Selector)(nil)
+ _ json.Marshaler = (*Selector)(nil)
+ _ json.Unmarshaler = (*Selector)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Selector) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.StringSize(1, x.Name)
+ size += proto.UInt32Size(2, x.Count)
+ size += proto.EnumSize(3, int32(x.Clause))
+ size += proto.StringSize(4, x.Attribute)
+ size += proto.StringSize(5, x.Filter)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Selector) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Selector) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.Name) != 0 {
+ mm.AppendString(1, x.Name)
+ }
+ if x.Count != 0 {
+ mm.AppendUint32(2, x.Count)
+ }
+ if int32(x.Clause) != 0 {
+ mm.AppendInt32(3, int32(x.Clause))
+ }
+ if len(x.Attribute) != 0 {
+ mm.AppendString(4, x.Attribute)
+ }
+ if len(x.Filter) != 0 {
+ mm.AppendString(5, x.Filter)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Selector) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Selector")
+ }
+ switch fc.FieldNum {
+ case 1: // Name
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Name")
+ }
+ x.Name = data
+ case 2: // Count
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Count")
+ }
+ x.Count = data
+ case 3: // Clause
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Clause")
+ }
+ x.Clause = Clause(data)
+ case 4: // Attribute
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Attribute")
+ }
+ x.Attribute = data
+ case 5: // Filter
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Filter")
+ }
+ x.Filter = data
+ }
+ }
+ return nil
+}
+func (x *Selector) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+func (x *Selector) SetName(v string) {
+ x.Name = v
+}
+func (x *Selector) GetCount() uint32 {
+ if x != nil {
+ return x.Count
+ }
+ return 0
+}
+func (x *Selector) SetCount(v uint32) {
+ x.Count = v
+}
+func (x *Selector) GetClause() Clause {
+ if x != nil {
+ return x.Clause
+ }
+ return 0
+}
+func (x *Selector) SetClause(v Clause) {
+ x.Clause = v
+}
+func (x *Selector) GetAttribute() string {
+ if x != nil {
+ return x.Attribute
+ }
+ return ""
+}
+func (x *Selector) SetAttribute(v string) {
+ x.Attribute = v
+}
+func (x *Selector) GetFilter() string {
+ if x != nil {
+ return x.Filter
+ }
+ return ""
+}
+func (x *Selector) SetFilter(v string) {
+ x.Filter = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Selector) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Selector) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"attribute\":"
+ out.RawString(prefix)
+ out.String(x.Attribute)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"filter\":"
+ out.RawString(prefix)
+ out.String(x.Filter)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Selector) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Selector) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "name":
+ {
+ var f string
+ f = in.String()
+ x.Name = f
+ }
+ case "count":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.Count = f
+ }
+ case "clause":
+ {
+ var f Clause
+ var parsedValue Clause
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := Clause_value[v]; ok {
+ parsedValue = Clause(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = Clause(vv)
+ case float64:
+ parsedValue = Clause(v)
+ }
+ f = parsedValue
+ x.Clause = f
+ }
+ case "attribute":
+ {
+ var f string
+ f = in.String()
+ x.Attribute = f
+ }
+ case "filter":
+ {
+ var f string
+ f = in.String()
+ x.Filter = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Replica struct {
+ Count uint32 `json:"count"`
+ Selector string `json:"selector"`
+ EcDataCount uint32 `json:"ecDataCount"`
+ EcParityCount uint32 `json:"ecParityCount"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Replica)(nil)
+ _ encoding.ProtoUnmarshaler = (*Replica)(nil)
+ _ json.Marshaler = (*Replica)(nil)
+ _ json.Unmarshaler = (*Replica)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Replica) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.UInt32Size(1, x.Count)
+ size += proto.StringSize(2, x.Selector)
+ size += proto.UInt32Size(3, x.EcDataCount)
+ size += proto.UInt32Size(4, x.EcParityCount)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Replica) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Replica) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Count != 0 {
+ mm.AppendUint32(1, x.Count)
+ }
+ if len(x.Selector) != 0 {
+ mm.AppendString(2, x.Selector)
+ }
+ if x.EcDataCount != 0 {
+ mm.AppendUint32(3, x.EcDataCount)
+ }
+ if x.EcParityCount != 0 {
+ mm.AppendUint32(4, x.EcParityCount)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Replica) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Replica")
+ }
+ switch fc.FieldNum {
+ case 1: // Count
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Count")
+ }
+ x.Count = data
+ case 2: // Selector
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Selector")
+ }
+ x.Selector = data
+ case 3: // EcDataCount
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "EcDataCount")
+ }
+ x.EcDataCount = data
+ case 4: // EcParityCount
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "EcParityCount")
+ }
+ x.EcParityCount = data
+ }
+ }
+ return nil
+}
+func (x *Replica) GetCount() uint32 {
+ if x != nil {
+ return x.Count
+ }
+ return 0
+}
+func (x *Replica) SetCount(v uint32) {
+ x.Count = v
+}
+func (x *Replica) GetSelector() string {
+ if x != nil {
+ return x.Selector
+ }
+ return ""
+}
+func (x *Replica) SetSelector(v string) {
+ x.Selector = v
+}
+func (x *Replica) GetEcDataCount() uint32 {
+ if x != nil {
+ return x.EcDataCount
+ }
+ return 0
+}
+func (x *Replica) SetEcDataCount(v uint32) {
+ x.EcDataCount = v
+}
+func (x *Replica) GetEcParityCount() uint32 {
+ if x != nil {
+ return x.EcParityCount
+ }
+ return 0
+}
+func (x *Replica) SetEcParityCount(v uint32) {
+ x.EcParityCount = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Replica) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Replica) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"count\":"
+ out.RawString(prefix)
+ out.Uint32(x.Count)
+ }
+ {
+ 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 = "\"ecDataCount\":"
+ out.RawString(prefix)
+ out.Uint32(x.EcDataCount)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"ecParityCount\":"
+ out.RawString(prefix)
+ out.Uint32(x.EcParityCount)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Replica) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Replica) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "count":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.Count = f
+ }
+ case "selector":
+ {
+ var f string
+ f = in.String()
+ x.Selector = f
+ }
+ case "ecDataCount":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.EcDataCount = f
+ }
+ case "ecParityCount":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.EcParityCount = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PlacementPolicy struct {
+ Replicas []Replica `json:"replicas"`
+ ContainerBackupFactor uint32 `json:"containerBackupFactor"`
+ Selectors []Selector `json:"selectors"`
+ Filters []Filter `json:"filters"`
+ Unique bool `json:"unique"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PlacementPolicy)(nil)
+ _ encoding.ProtoUnmarshaler = (*PlacementPolicy)(nil)
+ _ json.Marshaler = (*PlacementPolicy)(nil)
+ _ json.Unmarshaler = (*PlacementPolicy)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PlacementPolicy) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ for i := range x.Replicas {
+ size += proto.NestedStructureSizeUnchecked(1, &x.Replicas[i])
+ }
+ size += proto.UInt32Size(2, x.ContainerBackupFactor)
+ for i := range x.Selectors {
+ size += proto.NestedStructureSizeUnchecked(3, &x.Selectors[i])
+ }
+ for i := range x.Filters {
+ size += proto.NestedStructureSizeUnchecked(4, &x.Filters[i])
+ }
+ size += proto.BoolSize(5, x.Unique)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PlacementPolicy) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PlacementPolicy) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ for i := range x.Replicas {
+ x.Replicas[i].EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.ContainerBackupFactor != 0 {
+ mm.AppendUint32(2, x.ContainerBackupFactor)
+ }
+ for i := range x.Selectors {
+ x.Selectors[i].EmitProtobuf(mm.AppendMessage(3))
+ }
+ for i := range x.Filters {
+ x.Filters[i].EmitProtobuf(mm.AppendMessage(4))
+ }
+ if x.Unique {
+ mm.AppendBool(5, x.Unique)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PlacementPolicy) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PlacementPolicy")
+ }
+ switch fc.FieldNum {
+ case 1: // Replicas
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Replicas")
+ }
+ x.Replicas = append(x.Replicas, Replica{})
+ ff := &x.Replicas[len(x.Replicas)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // ContainerBackupFactor
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ContainerBackupFactor")
+ }
+ x.ContainerBackupFactor = data
+ case 3: // Selectors
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Selectors")
+ }
+ x.Selectors = append(x.Selectors, Selector{})
+ ff := &x.Selectors[len(x.Selectors)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 4: // Filters
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Filters")
+ }
+ x.Filters = append(x.Filters, Filter{})
+ ff := &x.Filters[len(x.Filters)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 5: // Unique
+ data, ok := fc.Bool()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Unique")
+ }
+ x.Unique = data
+ }
+ }
+ return nil
+}
+func (x *PlacementPolicy) GetReplicas() []Replica {
+ if x != nil {
+ return x.Replicas
+ }
+ return nil
+}
+func (x *PlacementPolicy) SetReplicas(v []Replica) {
+ x.Replicas = v
+}
+func (x *PlacementPolicy) GetContainerBackupFactor() uint32 {
+ if x != nil {
+ return x.ContainerBackupFactor
+ }
+ return 0
+}
+func (x *PlacementPolicy) SetContainerBackupFactor(v uint32) {
+ x.ContainerBackupFactor = v
+}
+func (x *PlacementPolicy) GetSelectors() []Selector {
+ if x != nil {
+ return x.Selectors
+ }
+ return nil
+}
+func (x *PlacementPolicy) SetSelectors(v []Selector) {
+ x.Selectors = v
+}
+func (x *PlacementPolicy) GetFilters() []Filter {
+ if x != nil {
+ return x.Filters
+ }
+ return nil
+}
+func (x *PlacementPolicy) SetFilters(v []Filter) {
+ x.Filters = v
+}
+func (x *PlacementPolicy) GetUnique() bool {
+ if x != nil {
+ return x.Unique
+ }
+ return false
+}
+func (x *PlacementPolicy) SetUnique(v bool) {
+ x.Unique = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PlacementPolicy) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PlacementPolicy) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"containerBackupFactor\":"
+ out.RawString(prefix)
+ out.Uint32(x.ContainerBackupFactor)
+ }
+ {
+ 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 = "\"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 = "\"unique\":"
+ out.RawString(prefix)
+ out.Bool(x.Unique)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PlacementPolicy) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PlacementPolicy) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "replicas":
+ {
+ var f Replica
+ var list []Replica
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = Replica{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Replicas = list
+ in.Delim(']')
+ }
+ case "containerBackupFactor":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.ContainerBackupFactor = f
+ }
+ case "selectors":
+ {
+ var f Selector
+ var list []Selector
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = Selector{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Selectors = list
+ in.Delim(']')
+ }
+ case "filters":
+ {
+ var f Filter
+ var list []Filter
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = Filter{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Filters = list
+ in.Delim(']')
+ }
+ case "unique":
+ {
+ var f bool
+ f = in.Bool()
+ x.Unique = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type NodeInfo_State int32
+
+const (
+ NodeInfo_UNSPECIFIED NodeInfo_State = 0
+ NodeInfo_ONLINE NodeInfo_State = 1
+ NodeInfo_OFFLINE NodeInfo_State = 2
+ NodeInfo_MAINTENANCE NodeInfo_State = 3
+)
+
+var (
+ NodeInfo_State_name = map[int32]string{
+ 0: "UNSPECIFIED",
+ 1: "ONLINE",
+ 2: "OFFLINE",
+ 3: "MAINTENANCE",
+ }
+ NodeInfo_State_value = map[string]int32{
+ "UNSPECIFIED": 0,
+ "ONLINE": 1,
+ "OFFLINE": 2,
+ "MAINTENANCE": 3,
+ }
+)
+
+func (x NodeInfo_State) String() string {
+ if v, ok := NodeInfo_State_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *NodeInfo_State) FromString(s string) bool {
+ if v, ok := NodeInfo_State_value[s]; ok {
+ *x = NodeInfo_State(v)
+ return true
+ }
+ return false
+}
+
+type NodeInfo_Attribute struct {
+ Key string `json:"key"`
+ Value string `json:"value"`
+ Parents []string `json:"parents"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*NodeInfo_Attribute)(nil)
+ _ encoding.ProtoUnmarshaler = (*NodeInfo_Attribute)(nil)
+ _ json.Marshaler = (*NodeInfo_Attribute)(nil)
+ _ json.Unmarshaler = (*NodeInfo_Attribute)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *NodeInfo_Attribute) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.StringSize(1, x.Key)
+ size += proto.StringSize(2, x.Value)
+ size += proto.RepeatedStringSize(3, x.Parents)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *NodeInfo_Attribute) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *NodeInfo_Attribute) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.Key) != 0 {
+ mm.AppendString(1, x.Key)
+ }
+ if len(x.Value) != 0 {
+ mm.AppendString(2, x.Value)
+ }
+ for j := range x.Parents {
+ mm.AppendString(3, x.Parents[j])
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *NodeInfo_Attribute) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "NodeInfo_Attribute")
+ }
+ switch fc.FieldNum {
+ case 1: // Key
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Key")
+ }
+ x.Key = data
+ case 2: // Value
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Value")
+ }
+ x.Value = data
+ case 3: // Parents
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Parents")
+ }
+ x.Parents = append(x.Parents, data)
+ }
+ }
+ return nil
+}
+func (x *NodeInfo_Attribute) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+func (x *NodeInfo_Attribute) SetKey(v string) {
+ x.Key = v
+}
+func (x *NodeInfo_Attribute) GetValue() string {
+ if x != nil {
+ return x.Value
+ }
+ return ""
+}
+func (x *NodeInfo_Attribute) SetValue(v string) {
+ x.Value = v
+}
+func (x *NodeInfo_Attribute) GetParents() []string {
+ if x != nil {
+ return x.Parents
+ }
+ return nil
+}
+func (x *NodeInfo_Attribute) SetParents(v []string) {
+ x.Parents = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *NodeInfo_Attribute) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *NodeInfo_Attribute) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 !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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *NodeInfo_Attribute) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *NodeInfo_Attribute) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "key":
+ {
+ var f string
+ f = in.String()
+ x.Key = f
+ }
+ case "value":
+ {
+ var f string
+ f = in.String()
+ x.Value = f
+ }
+ case "parents":
+ {
+ var f string
+ var list []string
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = in.String()
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Parents = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type NodeInfo struct {
+ PublicKey []byte `json:"publicKey"`
+ Addresses []string `json:"addresses"`
+ Attributes []NodeInfo_Attribute `json:"attributes"`
+ State NodeInfo_State `json:"state"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*NodeInfo)(nil)
+ _ encoding.ProtoUnmarshaler = (*NodeInfo)(nil)
+ _ json.Marshaler = (*NodeInfo)(nil)
+ _ json.Unmarshaler = (*NodeInfo)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *NodeInfo) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.BytesSize(1, x.PublicKey)
+ size += proto.RepeatedStringSize(2, x.Addresses)
+ for i := range x.Attributes {
+ size += proto.NestedStructureSizeUnchecked(3, &x.Attributes[i])
+ }
+ size += proto.EnumSize(4, int32(x.State))
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *NodeInfo) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *NodeInfo) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.PublicKey) != 0 {
+ mm.AppendBytes(1, x.PublicKey)
+ }
+ for j := range x.Addresses {
+ mm.AppendString(2, x.Addresses[j])
+ }
+ for i := range x.Attributes {
+ x.Attributes[i].EmitProtobuf(mm.AppendMessage(3))
+ }
+ if int32(x.State) != 0 {
+ mm.AppendInt32(4, int32(x.State))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *NodeInfo) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "NodeInfo")
+ }
+ switch fc.FieldNum {
+ case 1: // PublicKey
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "PublicKey")
+ }
+ x.PublicKey = data
+ case 2: // Addresses
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Addresses")
+ }
+ x.Addresses = append(x.Addresses, data)
+ case 3: // Attributes
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Attributes")
+ }
+ x.Attributes = append(x.Attributes, NodeInfo_Attribute{})
+ ff := &x.Attributes[len(x.Attributes)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 4: // State
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "State")
+ }
+ x.State = NodeInfo_State(data)
+ }
+ }
+ return nil
+}
+func (x *NodeInfo) GetPublicKey() []byte {
+ if x != nil {
+ return x.PublicKey
+ }
+ return nil
+}
+func (x *NodeInfo) SetPublicKey(v []byte) {
+ x.PublicKey = v
+}
+func (x *NodeInfo) GetAddresses() []string {
+ if x != nil {
+ return x.Addresses
+ }
+ return nil
+}
+func (x *NodeInfo) SetAddresses(v []string) {
+ x.Addresses = v
+}
+func (x *NodeInfo) GetAttributes() []NodeInfo_Attribute {
+ if x != nil {
+ return x.Attributes
+ }
+ return nil
+}
+func (x *NodeInfo) SetAttributes(v []NodeInfo_Attribute) {
+ x.Attributes = v
+}
+func (x *NodeInfo) GetState() NodeInfo_State {
+ if x != nil {
+ return x.State
+ }
+ return 0
+}
+func (x *NodeInfo) SetState(v NodeInfo_State) {
+ x.State = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *NodeInfo) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *NodeInfo) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"publicKey\":"
+ out.RawString(prefix)
+ if x.PublicKey != nil {
+ out.Base64Bytes(x.PublicKey)
+ } else {
+ out.String("")
+ }
+ }
+ {
+ 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 = "\"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 = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *NodeInfo) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *NodeInfo) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "publicKey":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.PublicKey = f
+ }
+ case "addresses":
+ {
+ var f string
+ var list []string
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = in.String()
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Addresses = list
+ in.Delim(']')
+ }
+ case "attributes":
+ {
+ var f NodeInfo_Attribute
+ var list []NodeInfo_Attribute
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = NodeInfo_Attribute{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Attributes = list
+ in.Delim(']')
+ }
+ case "state":
+ {
+ var f NodeInfo_State
+ var parsedValue NodeInfo_State
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := NodeInfo_State_value[v]; ok {
+ parsedValue = NodeInfo_State(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = NodeInfo_State(vv)
+ case float64:
+ parsedValue = NodeInfo_State(v)
+ }
+ f = parsedValue
+ x.State = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Netmap struct {
+ Epoch uint64 `json:"epoch"`
+ Nodes []NodeInfo `json:"nodes"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Netmap)(nil)
+ _ encoding.ProtoUnmarshaler = (*Netmap)(nil)
+ _ json.Marshaler = (*Netmap)(nil)
+ _ json.Unmarshaler = (*Netmap)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Netmap) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.UInt64Size(1, x.Epoch)
+ for i := range x.Nodes {
+ size += proto.NestedStructureSizeUnchecked(2, &x.Nodes[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Netmap) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Netmap) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Epoch != 0 {
+ mm.AppendUint64(1, x.Epoch)
+ }
+ for i := range x.Nodes {
+ x.Nodes[i].EmitProtobuf(mm.AppendMessage(2))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Netmap) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Netmap")
+ }
+ switch fc.FieldNum {
+ case 1: // Epoch
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Epoch")
+ }
+ x.Epoch = data
+ case 2: // Nodes
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Nodes")
+ }
+ x.Nodes = append(x.Nodes, NodeInfo{})
+ ff := &x.Nodes[len(x.Nodes)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *Netmap) GetEpoch() uint64 {
+ if x != nil {
+ return x.Epoch
+ }
+ return 0
+}
+func (x *Netmap) SetEpoch(v uint64) {
+ x.Epoch = v
+}
+func (x *Netmap) GetNodes() []NodeInfo {
+ if x != nil {
+ return x.Nodes
+ }
+ return nil
+}
+func (x *Netmap) SetNodes(v []NodeInfo) {
+ x.Nodes = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Netmap) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Netmap) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Netmap) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Netmap) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "epoch":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.Epoch = f
+ }
+ case "nodes":
+ {
+ var f NodeInfo
+ var list []NodeInfo
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = NodeInfo{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Nodes = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type NetworkConfig_Parameter struct {
+ Key []byte `json:"key"`
+ Value []byte `json:"value"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*NetworkConfig_Parameter)(nil)
+ _ encoding.ProtoUnmarshaler = (*NetworkConfig_Parameter)(nil)
+ _ json.Marshaler = (*NetworkConfig_Parameter)(nil)
+ _ json.Unmarshaler = (*NetworkConfig_Parameter)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *NetworkConfig_Parameter) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.BytesSize(1, x.Key)
+ size += proto.BytesSize(2, x.Value)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *NetworkConfig_Parameter) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *NetworkConfig_Parameter) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.Key) != 0 {
+ mm.AppendBytes(1, x.Key)
+ }
+ if len(x.Value) != 0 {
+ mm.AppendBytes(2, x.Value)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *NetworkConfig_Parameter) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "NetworkConfig_Parameter")
+ }
+ switch fc.FieldNum {
+ case 1: // Key
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Key")
+ }
+ x.Key = data
+ case 2: // Value
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Value")
+ }
+ x.Value = data
+ }
+ }
+ return nil
+}
+func (x *NetworkConfig_Parameter) GetKey() []byte {
+ if x != nil {
+ return x.Key
+ }
+ return nil
+}
+func (x *NetworkConfig_Parameter) SetKey(v []byte) {
+ x.Key = v
+}
+func (x *NetworkConfig_Parameter) GetValue() []byte {
+ if x != nil {
+ return x.Value
+ }
+ return nil
+}
+func (x *NetworkConfig_Parameter) SetValue(v []byte) {
+ x.Value = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *NetworkConfig_Parameter) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *NetworkConfig_Parameter) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"key\":"
+ out.RawString(prefix)
+ if x.Key != nil {
+ out.Base64Bytes(x.Key)
+ } else {
+ out.String("")
+ }
+ }
+ {
+ 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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *NetworkConfig_Parameter) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *NetworkConfig_Parameter) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "key":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Key = f
+ }
+ case "value":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Value = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type NetworkConfig struct {
+ Parameters []NetworkConfig_Parameter `json:"parameters"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*NetworkConfig)(nil)
+ _ encoding.ProtoUnmarshaler = (*NetworkConfig)(nil)
+ _ json.Marshaler = (*NetworkConfig)(nil)
+ _ json.Unmarshaler = (*NetworkConfig)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *NetworkConfig) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ for i := range x.Parameters {
+ size += proto.NestedStructureSizeUnchecked(1, &x.Parameters[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *NetworkConfig) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *NetworkConfig) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ for i := range x.Parameters {
+ x.Parameters[i].EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *NetworkConfig) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "NetworkConfig")
+ }
+ switch fc.FieldNum {
+ case 1: // Parameters
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Parameters")
+ }
+ x.Parameters = append(x.Parameters, NetworkConfig_Parameter{})
+ ff := &x.Parameters[len(x.Parameters)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *NetworkConfig) GetParameters() []NetworkConfig_Parameter {
+ if x != nil {
+ return x.Parameters
+ }
+ return nil
+}
+func (x *NetworkConfig) SetParameters(v []NetworkConfig_Parameter) {
+ x.Parameters = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *NetworkConfig) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *NetworkConfig) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *NetworkConfig) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *NetworkConfig) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "parameters":
+ {
+ var f NetworkConfig_Parameter
+ var list []NetworkConfig_Parameter
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = NetworkConfig_Parameter{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Parameters = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type NetworkInfo struct {
+ CurrentEpoch uint64 `json:"currentEpoch"`
+ MagicNumber uint64 `json:"magicNumber"`
+ MsPerBlock int64 `json:"msPerBlock"`
+ NetworkConfig *NetworkConfig `json:"networkConfig"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*NetworkInfo)(nil)
+ _ encoding.ProtoUnmarshaler = (*NetworkInfo)(nil)
+ _ json.Marshaler = (*NetworkInfo)(nil)
+ _ json.Unmarshaler = (*NetworkInfo)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *NetworkInfo) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.UInt64Size(1, x.CurrentEpoch)
+ size += proto.UInt64Size(2, x.MagicNumber)
+ size += proto.Int64Size(3, x.MsPerBlock)
+ size += proto.NestedStructureSize(4, x.NetworkConfig)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *NetworkInfo) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *NetworkInfo) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.CurrentEpoch != 0 {
+ mm.AppendUint64(1, x.CurrentEpoch)
+ }
+ if x.MagicNumber != 0 {
+ mm.AppendUint64(2, x.MagicNumber)
+ }
+ if x.MsPerBlock != 0 {
+ mm.AppendInt64(3, x.MsPerBlock)
+ }
+ if x.NetworkConfig != nil {
+ x.NetworkConfig.EmitProtobuf(mm.AppendMessage(4))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *NetworkInfo) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "NetworkInfo")
+ }
+ switch fc.FieldNum {
+ case 1: // CurrentEpoch
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "CurrentEpoch")
+ }
+ x.CurrentEpoch = data
+ case 2: // MagicNumber
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MagicNumber")
+ }
+ x.MagicNumber = data
+ case 3: // MsPerBlock
+ data, ok := fc.Int64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MsPerBlock")
+ }
+ x.MsPerBlock = data
+ case 4: // NetworkConfig
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "NetworkConfig")
+ }
+ x.NetworkConfig = new(NetworkConfig)
+ if err := x.NetworkConfig.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *NetworkInfo) GetCurrentEpoch() uint64 {
+ if x != nil {
+ return x.CurrentEpoch
+ }
+ return 0
+}
+func (x *NetworkInfo) SetCurrentEpoch(v uint64) {
+ x.CurrentEpoch = v
+}
+func (x *NetworkInfo) GetMagicNumber() uint64 {
+ if x != nil {
+ return x.MagicNumber
+ }
+ return 0
+}
+func (x *NetworkInfo) SetMagicNumber(v uint64) {
+ x.MagicNumber = v
+}
+func (x *NetworkInfo) GetMsPerBlock() int64 {
+ if x != nil {
+ return x.MsPerBlock
+ }
+ return 0
+}
+func (x *NetworkInfo) SetMsPerBlock(v int64) {
+ x.MsPerBlock = v
+}
+func (x *NetworkInfo) GetNetworkConfig() *NetworkConfig {
+ if x != nil {
+ return x.NetworkConfig
+ }
+ return nil
+}
+func (x *NetworkInfo) SetNetworkConfig(v *NetworkConfig) {
+ x.NetworkConfig = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *NetworkInfo) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *NetworkInfo) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"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 = "\"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 = "\"networkConfig\":"
+ out.RawString(prefix)
+ x.NetworkConfig.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *NetworkInfo) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *NetworkInfo) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "currentEpoch":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.CurrentEpoch = f
+ }
+ case "magicNumber":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.MagicNumber = f
+ }
+ case "msPerBlock":
+ {
+ var f int64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseInt(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := int64(v)
+ f = pv
+ x.MsPerBlock = f
+ }
+ case "networkConfig":
+ {
+ var f *NetworkConfig
+ f = new(NetworkConfig)
+ f.UnmarshalEasyJSON(in)
+ x.NetworkConfig = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/netmap/grpc/types_frostfs_fuzz.go b/api/netmap/grpc/types_frostfs_fuzz.go
new file mode 100644
index 0000000..89ccd74
--- /dev/null
+++ b/api/netmap/grpc/types_frostfs_fuzz.go
@@ -0,0 +1,159 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package netmap
+
+func DoFuzzProtoFilter(data []byte) int {
+ msg := new(Filter)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONFilter(data []byte) int {
+ msg := new(Filter)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoSelector(data []byte) int {
+ msg := new(Selector)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONSelector(data []byte) int {
+ msg := new(Selector)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoReplica(data []byte) int {
+ msg := new(Replica)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONReplica(data []byte) int {
+ msg := new(Replica)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoPlacementPolicy(data []byte) int {
+ msg := new(PlacementPolicy)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONPlacementPolicy(data []byte) int {
+ msg := new(PlacementPolicy)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoNodeInfo(data []byte) int {
+ msg := new(NodeInfo)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONNodeInfo(data []byte) int {
+ msg := new(NodeInfo)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoNetmap(data []byte) int {
+ msg := new(Netmap)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONNetmap(data []byte) int {
+ msg := new(Netmap)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoNetworkConfig(data []byte) int {
+ msg := new(NetworkConfig)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONNetworkConfig(data []byte) int {
+ msg := new(NetworkConfig)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoNetworkInfo(data []byte) int {
+ msg := new(NetworkInfo)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONNetworkInfo(data []byte) int {
+ msg := new(NetworkInfo)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/netmap/grpc/types_frostfs_test.go b/api/netmap/grpc/types_frostfs_test.go
new file mode 100644
index 0000000..9996dc9
--- /dev/null
+++ b/api/netmap/grpc/types_frostfs_test.go
@@ -0,0 +1,91 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package netmap
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoFilter(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoFilter(data)
+ })
+}
+func FuzzJSONFilter(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONFilter(data)
+ })
+}
+func FuzzProtoSelector(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoSelector(data)
+ })
+}
+func FuzzJSONSelector(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONSelector(data)
+ })
+}
+func FuzzProtoReplica(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoReplica(data)
+ })
+}
+func FuzzJSONReplica(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONReplica(data)
+ })
+}
+func FuzzProtoPlacementPolicy(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoPlacementPolicy(data)
+ })
+}
+func FuzzJSONPlacementPolicy(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONPlacementPolicy(data)
+ })
+}
+func FuzzProtoNodeInfo(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoNodeInfo(data)
+ })
+}
+func FuzzJSONNodeInfo(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONNodeInfo(data)
+ })
+}
+func FuzzProtoNetmap(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoNetmap(data)
+ })
+}
+func FuzzJSONNetmap(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONNetmap(data)
+ })
+}
+func FuzzProtoNetworkConfig(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoNetworkConfig(data)
+ })
+}
+func FuzzJSONNetworkConfig(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONNetworkConfig(data)
+ })
+}
+func FuzzProtoNetworkInfo(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoNetworkInfo(data)
+ })
+}
+func FuzzJSONNetworkInfo(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONNetworkInfo(data)
+ })
+}
diff --git a/api/netmap/json.go b/api/netmap/json.go
new file mode 100644
index 0000000..6a1c257
--- /dev/null
+++ b/api/netmap/json.go
@@ -0,0 +1,62 @@
+package netmap
+
+import (
+ netmap "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+)
+
+func (p *PlacementPolicy) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(p)
+}
+
+func (p *PlacementPolicy) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(p, data, new(netmap.PlacementPolicy))
+}
+
+func (f *Filter) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(f)
+}
+
+func (f *Filter) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(f, data, new(netmap.Filter))
+}
+
+func (s *Selector) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(s)
+}
+
+func (s *Selector) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(s, data, new(netmap.Selector))
+}
+
+func (r *Replica) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(r)
+}
+
+func (r *Replica) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(r, data, new(netmap.Replica))
+}
+
+func (a *Attribute) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(a)
+}
+
+func (a *Attribute) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(a, data, new(netmap.NodeInfo_Attribute))
+}
+
+func (ni *NodeInfo) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(ni)
+}
+
+func (ni *NodeInfo) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(ni, data, new(netmap.NodeInfo))
+}
+
+func (i *NetworkInfo) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(i)
+}
+
+func (i *NetworkInfo) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(i, data, new(netmap.NetworkInfo))
+}
diff --git a/api/netmap/marshal.go b/api/netmap/marshal.go
new file mode 100644
index 0000000..4d5e4f1
--- /dev/null
+++ b/api/netmap/marshal.go
@@ -0,0 +1,576 @@
+package netmap
+
+import (
+ netmap "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ protoutil "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+)
+
+const (
+ nameFilterField = 1
+ keyFilterField = 2
+ opFilterField = 3
+ valueFilterField = 4
+ filtersFilterField = 5
+
+ nameSelectorField = 1
+ countSelectorField = 2
+ clauseSelectorField = 3
+ attributeSelectorField = 4
+ filterSelectorField = 5
+
+ countReplicaField = 1
+ selectorReplicaField = 2
+ ecDataCountReplicaField = 3
+ ecParityCountReplicaField = 4
+
+ replicasPolicyField = 1
+ backupPolicyField = 2
+ selectorsPolicyField = 3
+ filtersPolicyField = 4
+ uniquePolicyField = 5
+
+ keyAttributeField = 1
+ valueAttributeField = 2
+ parentsAttributeField = 3
+
+ keyNodeInfoField = 1
+ addressNodeInfoField = 2
+ attributesNodeInfoField = 3
+ stateNodeInfoField = 4
+
+ versionInfoResponseBodyField = 1
+ nodeInfoResponseBodyField = 2
+)
+
+func (f *Filter) StableMarshal(buf []byte) []byte {
+ if f == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, f.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.StringMarshal(nameFilterField, buf[offset:], f.name)
+ offset += protoutil.StringMarshal(keyFilterField, buf[offset:], f.key)
+ offset += protoutil.EnumMarshal(opFilterField, buf[offset:], int32(f.op))
+ offset += protoutil.StringMarshal(valueFilterField, buf[offset:], f.value)
+
+ for i := range f.filters {
+ offset += protoutil.NestedStructureMarshal(filtersFilterField, buf[offset:], &f.filters[i])
+ }
+
+ return buf
+}
+
+func (f *Filter) StableSize() (size int) {
+ if f == nil {
+ return 0
+ }
+
+ size += protoutil.StringSize(nameFilterField, f.name)
+ size += protoutil.StringSize(keyFilterField, f.key)
+ size += protoutil.EnumSize(opFilterField, int32(f.op))
+ size += protoutil.StringSize(valueFilterField, f.value)
+ for i := range f.filters {
+ size += protoutil.NestedStructureSize(filtersFilterField, &f.filters[i])
+ }
+
+ return size
+}
+
+func (f *Filter) Unmarshal(data []byte) error {
+ return message.Unmarshal(f, data, new(netmap.Filter))
+}
+
+func (s *Selector) StableMarshal(buf []byte) []byte {
+ if s == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, s.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.StringMarshal(nameSelectorField, buf[offset:], s.name)
+ offset += protoutil.UInt32Marshal(countSelectorField, buf[offset:], s.count)
+ offset += protoutil.EnumMarshal(clauseSelectorField, buf[offset:], int32(s.clause))
+ offset += protoutil.StringMarshal(attributeSelectorField, buf[offset:], s.attribute)
+ protoutil.StringMarshal(filterSelectorField, buf[offset:], s.filter)
+
+ return buf
+}
+
+func (s *Selector) StableSize() (size int) {
+ if s == nil {
+ return 0
+ }
+
+ size += protoutil.StringSize(nameSelectorField, s.name)
+ size += protoutil.UInt32Size(countSelectorField, s.count)
+ size += protoutil.EnumSize(countSelectorField, int32(s.clause))
+ size += protoutil.StringSize(attributeSelectorField, s.attribute)
+ size += protoutil.StringSize(filterSelectorField, s.filter)
+
+ return size
+}
+
+func (s *Selector) Unmarshal(data []byte) error {
+ return message.Unmarshal(s, data, new(netmap.Selector))
+}
+
+func (r *Replica) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.UInt32Marshal(countReplicaField, buf[offset:], r.count)
+ offset += protoutil.StringMarshal(selectorReplicaField, buf[offset:], r.selector)
+ offset += protoutil.UInt32Marshal(ecDataCountReplicaField, buf[offset:], r.ecDataCount)
+ protoutil.UInt32Marshal(ecParityCountReplicaField, buf[offset:], r.ecParityCount)
+
+ return buf
+}
+
+func (r *Replica) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += protoutil.UInt32Size(countReplicaField, r.count)
+ size += protoutil.StringSize(selectorReplicaField, r.selector)
+ size += protoutil.UInt32Size(ecDataCountReplicaField, r.ecDataCount)
+ size += protoutil.UInt32Size(ecParityCountReplicaField, r.ecParityCount)
+
+ return size
+}
+
+func (r *Replica) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(netmap.Replica))
+}
+
+func (p *PlacementPolicy) StableMarshal(buf []byte) []byte {
+ if p == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, p.StableSize())
+ }
+
+ var offset int
+
+ for i := range p.replicas {
+ offset += protoutil.NestedStructureMarshal(replicasPolicyField, buf[offset:], &p.replicas[i])
+ }
+
+ offset += protoutil.UInt32Marshal(backupPolicyField, buf[offset:], p.backupFactor)
+
+ for i := range p.selectors {
+ offset += protoutil.NestedStructureMarshal(selectorsPolicyField, buf[offset:], &p.selectors[i])
+ }
+
+ for i := range p.filters {
+ offset += protoutil.NestedStructureMarshal(filtersPolicyField, buf[offset:], &p.filters[i])
+ }
+
+ protoutil.BoolMarshal(uniquePolicyField, buf[offset:], p.unique)
+
+ return buf
+}
+
+func (p *PlacementPolicy) StableSize() (size int) {
+ if p == nil {
+ return 0
+ }
+
+ for i := range p.replicas {
+ size += protoutil.NestedStructureSize(replicasPolicyField, &p.replicas[i])
+ }
+
+ size += protoutil.UInt32Size(backupPolicyField, p.backupFactor)
+
+ for i := range p.selectors {
+ size += protoutil.NestedStructureSize(selectorsPolicyField, &p.selectors[i])
+ }
+
+ for i := range p.filters {
+ size += protoutil.NestedStructureSize(filtersPolicyField, &p.filters[i])
+ }
+
+ size += protoutil.BoolSize(uniquePolicyField, p.unique)
+
+ return size
+}
+
+func (p *PlacementPolicy) Unmarshal(data []byte) error {
+ return message.Unmarshal(p, data, new(netmap.PlacementPolicy))
+}
+
+func (a *Attribute) StableMarshal(buf []byte) []byte {
+ if a == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, a.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.StringMarshal(keyAttributeField, buf[offset:], a.key)
+ offset += protoutil.StringMarshal(valueAttributeField, buf[offset:], a.value)
+
+ for i := range a.parents {
+ offset += protoutil.StringMarshal(parentsAttributeField, buf[offset:], a.parents[i])
+ }
+
+ return buf
+}
+
+func (a *Attribute) StableSize() (size int) {
+ if a == nil {
+ return 0
+ }
+
+ size += protoutil.StringSize(keyAttributeField, a.key)
+ size += protoutil.StringSize(valueAttributeField, a.value)
+
+ for i := range a.parents {
+ size += protoutil.StringSize(parentsAttributeField, a.parents[i])
+ }
+
+ return size
+}
+
+func (a *Attribute) Unmarshal(data []byte) error {
+ return message.Unmarshal(a, data, new(netmap.NodeInfo_Attribute))
+}
+
+func (ni *NodeInfo) StableMarshal(buf []byte) []byte {
+ if ni == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, ni.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.BytesMarshal(keyNodeInfoField, buf[offset:], ni.publicKey)
+ offset += protoutil.RepeatedStringMarshal(addressNodeInfoField, buf[offset:], ni.addresses)
+
+ for i := range ni.attributes {
+ offset += protoutil.NestedStructureMarshal(attributesNodeInfoField, buf[offset:], &ni.attributes[i])
+ }
+
+ protoutil.EnumMarshal(stateNodeInfoField, buf[offset:], int32(ni.state))
+
+ return buf
+}
+
+func (ni *NodeInfo) StableSize() (size int) {
+ if ni == nil {
+ return 0
+ }
+
+ size += protoutil.BytesSize(keyNodeInfoField, ni.publicKey)
+ size += protoutil.RepeatedStringSize(addressNodeInfoField, ni.addresses)
+
+ for i := range ni.attributes {
+ size += protoutil.NestedStructureSize(attributesNodeInfoField, &ni.attributes[i])
+ }
+
+ size += protoutil.EnumSize(stateNodeInfoField, int32(ni.state))
+
+ return size
+}
+
+func (ni *NodeInfo) Unmarshal(data []byte) error {
+ return message.Unmarshal(ni, data, new(netmap.NodeInfo))
+}
+
+func (l *LocalNodeInfoRequestBody) StableMarshal(_ []byte) []byte {
+ return nil
+}
+
+func (l *LocalNodeInfoRequestBody) StableSize() (size int) {
+ return 0
+}
+
+func (l *LocalNodeInfoRequestBody) Unmarshal([]byte) error {
+ return nil
+}
+
+func (l *LocalNodeInfoResponseBody) StableMarshal(buf []byte) []byte {
+ if l == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, l.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.NestedStructureMarshal(versionInfoResponseBodyField, buf[offset:], l.version)
+ protoutil.NestedStructureMarshal(nodeInfoResponseBodyField, buf[offset:], l.nodeInfo)
+
+ return buf
+}
+
+func (l *LocalNodeInfoResponseBody) StableSize() (size int) {
+ if l == nil {
+ return 0
+ }
+
+ size += protoutil.NestedStructureSize(versionInfoResponseBodyField, l.version)
+ size += protoutil.NestedStructureSize(nodeInfoResponseBodyField, l.nodeInfo)
+
+ return size
+}
+
+func (l *LocalNodeInfoResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(l, data, new(netmap.LocalNodeInfoResponse_Body))
+}
+
+const (
+ _ = iota
+ netPrmKeyFNum
+ netPrmValFNum
+)
+
+func (x *NetworkParameter) StableMarshal(buf []byte) []byte {
+ if x == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, x.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.BytesMarshal(netPrmKeyFNum, buf[offset:], x.k)
+ protoutil.BytesMarshal(netPrmValFNum, buf[offset:], x.v)
+
+ return buf
+}
+
+func (x *NetworkParameter) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+
+ size += protoutil.BytesSize(netPrmKeyFNum, x.k)
+ size += protoutil.BytesSize(netPrmValFNum, x.v)
+
+ return size
+}
+
+const (
+ _ = iota
+ netCfgPrmsFNum
+)
+
+func (x *NetworkConfig) StableMarshal(buf []byte) []byte {
+ if x == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, x.StableSize())
+ }
+
+ var offset int
+
+ for i := range x.ps {
+ offset += protoutil.NestedStructureMarshal(netCfgPrmsFNum, buf[offset:], &x.ps[i])
+ }
+
+ return buf
+}
+
+func (x *NetworkConfig) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+
+ for i := range x.ps {
+ size += protoutil.NestedStructureSize(netCfgPrmsFNum, &x.ps[i])
+ }
+
+ return size
+}
+
+const (
+ _ = iota
+ netInfoCurEpochFNum
+ netInfoMagicNumFNum
+ netInfoMSPerBlockFNum
+ netInfoCfgFNum
+)
+
+func (i *NetworkInfo) StableMarshal(buf []byte) []byte {
+ if i == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, i.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.UInt64Marshal(netInfoCurEpochFNum, buf[offset:], i.curEpoch)
+ offset += protoutil.UInt64Marshal(netInfoMagicNumFNum, buf[offset:], i.magicNum)
+ offset += protoutil.Int64Marshal(netInfoMSPerBlockFNum, buf[offset:], i.msPerBlock)
+ protoutil.NestedStructureMarshal(netInfoCfgFNum, buf[offset:], i.netCfg)
+
+ return buf
+}
+
+func (i *NetworkInfo) StableSize() (size int) {
+ if i == nil {
+ return 0
+ }
+
+ size += protoutil.UInt64Size(netInfoCurEpochFNum, i.curEpoch)
+ size += protoutil.UInt64Size(netInfoMagicNumFNum, i.magicNum)
+ size += protoutil.Int64Size(netInfoMSPerBlockFNum, i.msPerBlock)
+ size += protoutil.NestedStructureSize(netInfoCfgFNum, i.netCfg)
+
+ return size
+}
+
+func (i *NetworkInfo) Unmarshal(data []byte) error {
+ return message.Unmarshal(i, data, new(netmap.NetworkInfo))
+}
+
+func (l *NetworkInfoRequestBody) StableMarshal(_ []byte) []byte {
+ return nil
+}
+
+func (l *NetworkInfoRequestBody) StableSize() (size int) {
+ return 0
+}
+
+func (l *NetworkInfoRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(l, data, new(netmap.NetworkInfoRequest_Body))
+}
+
+const (
+ _ = iota
+ netInfoRespBodyNetInfoFNum
+)
+
+func (i *NetworkInfoResponseBody) StableMarshal(buf []byte) []byte {
+ if i == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, i.StableSize())
+ }
+
+ protoutil.NestedStructureMarshal(netInfoRespBodyNetInfoFNum, buf, i.netInfo)
+
+ return buf
+}
+
+func (i *NetworkInfoResponseBody) StableSize() (size int) {
+ if i == nil {
+ return 0
+ }
+
+ size += protoutil.NestedStructureSize(netInfoRespBodyNetInfoFNum, i.netInfo)
+
+ return size
+}
+
+func (i *NetworkInfoResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(i, data, new(netmap.NetworkInfoResponse_Body))
+}
+
+const (
+ _ = iota
+ fNumNetMapEpoch
+ fNumNetMapNodes
+)
+
+func (x *NetMap) StableMarshal(buf []byte) []byte {
+ if x == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, x.StableSize())
+ }
+
+ offset := protoutil.UInt64Marshal(fNumNetMapEpoch, buf, x.epoch)
+
+ for i := range x.nodes {
+ offset += protoutil.NestedStructureMarshal(fNumNetMapNodes, buf[offset:], &x.nodes[i])
+ }
+
+ return buf
+}
+
+func (x *NetMap) StableSize() (size int) {
+ if x != nil {
+ size = protoutil.UInt64Size(fNumNetMapEpoch, x.epoch)
+
+ for i := range x.nodes {
+ size += protoutil.NestedStructureSize(fNumNetMapNodes, &x.nodes[i])
+ }
+ }
+
+ return
+}
+
+func (x *SnapshotRequestBody) StableMarshal([]byte) []byte {
+ return nil
+}
+
+func (x *SnapshotRequestBody) StableSize() int {
+ return 0
+}
+
+const (
+ _ = iota
+ fNumSnapshotResponseBodyNetMap
+)
+
+func (x *SnapshotResponseBody) StableMarshal(buf []byte) []byte {
+ if x == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, x.StableSize())
+ }
+
+ protoutil.NestedStructureMarshal(fNumSnapshotResponseBodyNetMap, buf, x.netMap)
+
+ return buf
+}
+
+func (x *SnapshotResponseBody) StableSize() (size int) {
+ if x != nil {
+ size = protoutil.NestedStructureSize(fNumSnapshotResponseBodyNetMap, x.netMap)
+ }
+
+ return
+}
diff --git a/api/netmap/message_test.go b/api/netmap/message_test.go
new file mode 100644
index 0000000..2406ece
--- /dev/null
+++ b/api/netmap/message_test.go
@@ -0,0 +1,32 @@
+package netmap_test
+
+import (
+ "testing"
+
+ netmaptest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap/test"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ messagetest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message/test"
+)
+
+func TestMessageConvert(t *testing.T) {
+ messagetest.TestRPCMessage(t,
+ func(empty bool) message.Message { return netmaptest.GenerateFilter(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateSelector(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateReplica(empty) },
+ func(empty bool) message.Message { return netmaptest.GeneratePlacementPolicy(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateAttribute(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateNodeInfo(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateLocalNodeInfoRequest(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateLocalNodeInfoResponseBody(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateNetworkParameter(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateNetworkConfig(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateNetworkInfo(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateNetworkInfoRequest(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateNetworkInfoResponseBody(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateNetMap(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateSnapshotRequestBody(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateSnapshotRequest(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateSnapshotResponseBody(empty) },
+ func(empty bool) message.Message { return netmaptest.GenerateSnapshotResponse(empty) },
+ )
+}
diff --git a/api/netmap/string.go b/api/netmap/string.go
new file mode 100644
index 0000000..a6805ae
--- /dev/null
+++ b/api/netmap/string.go
@@ -0,0 +1,68 @@
+package netmap
+
+import (
+ netmap "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap/grpc"
+)
+
+// String returns string representation of Clause.
+func (x Clause) String() string {
+ return ClauseToGRPCMessage(x).String()
+}
+
+// FromString parses Clause from a string representation.
+// It is a reverse action to String().
+//
+// Returns true if s was parsed successfully.
+func (x *Clause) FromString(s string) bool {
+ var g netmap.Clause
+
+ ok := g.FromString(s)
+
+ if ok {
+ *x = ClauseFromGRPCMessage(g)
+ }
+
+ return ok
+}
+
+// String returns string representation of Operation.
+func (x Operation) String() string {
+ return OperationToGRPCMessage(x).String()
+}
+
+// FromString parses Operation from a string representation.
+// It is a reverse action to String().
+//
+// Returns true if s was parsed successfully.
+func (x *Operation) FromString(s string) bool {
+ var g netmap.Operation
+
+ ok := g.FromString(s)
+
+ if ok {
+ *x = OperationFromGRPCMessage(g)
+ }
+
+ return ok
+}
+
+// String returns string representation of NodeState.
+func (x NodeState) String() string {
+ return NodeStateToGRPCMessage(x).String()
+}
+
+// FromString parses NodeState from a string representation.
+// It is a reverse action to String().
+//
+// Returns true if s was parsed successfully.
+func (x *NodeState) FromString(s string) bool {
+ var g netmap.NodeInfo_State
+
+ ok := g.FromString(s)
+
+ if ok {
+ *x = NodeStateFromRPCMessage(g)
+ }
+
+ return ok
+}
diff --git a/api/netmap/test/generate.go b/api/netmap/test/generate.go
new file mode 100644
index 0000000..4ac9254
--- /dev/null
+++ b/api/netmap/test/generate.go
@@ -0,0 +1,335 @@
+package netmaptest
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
+ refstest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/test"
+ sessiontest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/test"
+)
+
+func GenerateFilter(empty bool) *netmap.Filter {
+ return generateFilter(empty, true)
+}
+
+func generateFilter(empty, withSub bool) *netmap.Filter {
+ m := new(netmap.Filter)
+
+ if !empty {
+ m.SetKey("filter key")
+ m.SetValue("filter value")
+ m.SetName("filter name")
+ m.SetOp(1)
+
+ if withSub {
+ m.SetFilters([]netmap.Filter{
+ *generateFilter(empty, false),
+ *generateFilter(empty, false),
+ })
+ }
+ }
+
+ return m
+}
+
+func GenerateFilters(empty bool) []netmap.Filter {
+ var res []netmap.Filter
+
+ if !empty {
+ res = append(res,
+ *GenerateFilter(false),
+ *GenerateFilter(false),
+ )
+ }
+
+ return res
+}
+
+func GenerateSelector(empty bool) *netmap.Selector {
+ m := new(netmap.Selector)
+
+ if !empty {
+ m.SetCount(66)
+ m.SetAttribute("selector attribute")
+ m.SetFilter("select filter")
+ m.SetName("select name")
+ m.SetClause(1)
+ }
+
+ return m
+}
+
+func GenerateSelectors(empty bool) []netmap.Selector {
+ var res []netmap.Selector
+
+ if !empty {
+ res = append(res,
+ *GenerateSelector(false),
+ *GenerateSelector(false),
+ )
+ }
+
+ return res
+}
+
+func GenerateReplica(empty bool) *netmap.Replica {
+ m := new(netmap.Replica)
+
+ if !empty {
+ m.SetCount(42)
+ m.SetSelector("replica selector")
+ }
+
+ return m
+}
+
+func GenerateEC(empty bool) *netmap.Replica {
+ m := new(netmap.Replica)
+
+ if !empty {
+ m.SetECDataCount(4)
+ m.SetECParityCount(2)
+ }
+
+ return m
+}
+
+func GenerateReplicas(empty bool) []netmap.Replica {
+ var res []netmap.Replica
+
+ if !empty {
+ res = append(res,
+ *GenerateReplica(false),
+ *GenerateReplica(false),
+ *GenerateEC(false),
+ )
+ }
+
+ return res
+}
+
+func GeneratePlacementPolicy(empty bool) *netmap.PlacementPolicy {
+ m := new(netmap.PlacementPolicy)
+
+ if !empty {
+ m.SetContainerBackupFactor(322)
+ m.SetFilters(GenerateFilters(false))
+ m.SetSelectors(GenerateSelectors(false))
+ m.SetReplicas(GenerateReplicas(false))
+ m.SetUnique(true)
+ }
+
+ return m
+}
+
+func GenerateAttribute(empty bool) *netmap.Attribute {
+ m := new(netmap.Attribute)
+
+ if !empty {
+ m.SetKey("attribute key")
+ m.SetValue("attribute val")
+ }
+
+ return m
+}
+
+func GenerateAttributes(empty bool) []netmap.Attribute {
+ var res []netmap.Attribute
+
+ if !empty {
+ res = append(res,
+ *GenerateAttribute(false),
+ *GenerateAttribute(false),
+ )
+ }
+
+ return res
+}
+
+func GenerateNodeInfo(empty bool) *netmap.NodeInfo {
+ m := new(netmap.NodeInfo)
+
+ if !empty {
+ m.SetAddresses("node address", "node address 2")
+ m.SetPublicKey([]byte{1, 2, 3})
+ m.SetState(33)
+ m.SetAttributes(GenerateAttributes(empty))
+ }
+
+ return m
+}
+
+func GenerateLocalNodeInfoRequestBody(_ bool) *netmap.LocalNodeInfoRequestBody {
+ m := new(netmap.LocalNodeInfoRequestBody)
+
+ return m
+}
+
+func GenerateLocalNodeInfoRequest(empty bool) *netmap.LocalNodeInfoRequest {
+ m := new(netmap.LocalNodeInfoRequest)
+
+ if !empty {
+ m.SetBody(GenerateLocalNodeInfoRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateLocalNodeInfoResponseBody(empty bool) *netmap.LocalNodeInfoResponseBody {
+ m := new(netmap.LocalNodeInfoResponseBody)
+
+ if !empty {
+ m.SetNodeInfo(GenerateNodeInfo(false))
+ }
+
+ m.SetVersion(refstest.GenerateVersion(empty))
+
+ return m
+}
+
+func GenerateLocalNodeInfoResponse(empty bool) *netmap.LocalNodeInfoResponse {
+ m := new(netmap.LocalNodeInfoResponse)
+
+ if !empty {
+ m.SetBody(GenerateLocalNodeInfoResponseBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateNetworkParameter(empty bool) *netmap.NetworkParameter {
+ m := new(netmap.NetworkParameter)
+
+ if !empty {
+ m.SetKey([]byte("key"))
+ m.SetValue([]byte("value"))
+ }
+
+ return m
+}
+
+func GenerateNetworkConfig(empty bool) *netmap.NetworkConfig {
+ m := new(netmap.NetworkConfig)
+
+ if !empty {
+ m.SetParameters(
+ *GenerateNetworkParameter(empty),
+ *GenerateNetworkParameter(empty),
+ )
+ }
+
+ return m
+}
+
+func GenerateNetworkInfo(empty bool) *netmap.NetworkInfo {
+ m := new(netmap.NetworkInfo)
+
+ if !empty {
+ m.SetMagicNumber(228)
+ m.SetCurrentEpoch(666)
+ m.SetMsPerBlock(5678)
+ m.SetNetworkConfig(GenerateNetworkConfig(empty))
+ }
+
+ return m
+}
+
+func GenerateNetworkInfoRequestBody(_ bool) *netmap.NetworkInfoRequestBody {
+ m := new(netmap.NetworkInfoRequestBody)
+
+ return m
+}
+
+func GenerateNetworkInfoRequest(empty bool) *netmap.NetworkInfoRequest {
+ m := new(netmap.NetworkInfoRequest)
+
+ if !empty {
+ m.SetBody(GenerateNetworkInfoRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateNetworkInfoResponseBody(empty bool) *netmap.NetworkInfoResponseBody {
+ m := new(netmap.NetworkInfoResponseBody)
+
+ if !empty {
+ m.SetNetworkInfo(GenerateNetworkInfo(false))
+ }
+
+ return m
+}
+
+func GenerateNetworkInfoResponse(empty bool) *netmap.NetworkInfoResponse {
+ m := new(netmap.NetworkInfoResponse)
+
+ if !empty {
+ m.SetBody(GenerateNetworkInfoResponseBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateNetMap(empty bool) *netmap.NetMap {
+ m := new(netmap.NetMap)
+
+ if !empty {
+ m.SetEpoch(987)
+ m.SetNodes([]netmap.NodeInfo{
+ *GenerateNodeInfo(false),
+ *GenerateNodeInfo(false),
+ })
+ }
+
+ return m
+}
+
+func GenerateSnapshotRequestBody(_ bool) *netmap.SnapshotRequestBody {
+ return new(netmap.SnapshotRequestBody)
+}
+
+func GenerateSnapshotRequest(empty bool) *netmap.SnapshotRequest {
+ m := new(netmap.SnapshotRequest)
+
+ if !empty {
+ m.SetBody(GenerateSnapshotRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateSnapshotResponseBody(empty bool) *netmap.SnapshotResponseBody {
+ m := new(netmap.SnapshotResponseBody)
+
+ if !empty {
+ m.SetNetMap(GenerateNetMap(false))
+ }
+
+ return m
+}
+
+func GenerateSnapshotResponse(empty bool) *netmap.SnapshotResponse {
+ m := new(netmap.SnapshotResponse)
+
+ if !empty {
+ m.SetBody(GenerateSnapshotResponseBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+
+ return m
+}
diff --git a/api/netmap/types.go b/api/netmap/types.go
new file mode 100644
index 0000000..877357d
--- /dev/null
+++ b/api/netmap/types.go
@@ -0,0 +1,783 @@
+package netmap
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+)
+
+type LocalNodeInfoRequest struct {
+ body *LocalNodeInfoRequestBody
+
+ session.RequestHeaders
+}
+
+type LocalNodeInfoResponse struct {
+ body *LocalNodeInfoResponseBody
+
+ session.ResponseHeaders
+}
+
+// NetworkInfoRequest is a structure of NetworkInfo request.
+type NetworkInfoRequest struct {
+ body *NetworkInfoRequestBody
+
+ session.RequestHeaders
+}
+
+// NetworkInfoResponse is a structure of NetworkInfo response.
+type NetworkInfoResponse struct {
+ body *NetworkInfoResponseBody
+
+ session.ResponseHeaders
+}
+
+type Filter struct {
+ name string
+ key string
+ op Operation
+ value string
+ filters []Filter
+}
+
+type Selector struct {
+ name string
+ count uint32
+ clause Clause
+ attribute string
+ filter string
+}
+
+type Replica struct {
+ count uint32
+ selector string
+
+ ecDataCount uint32
+ ecParityCount uint32
+}
+
+type Operation uint32
+
+type PlacementPolicy struct {
+ replicas []Replica
+ backupFactor uint32
+ selectors []Selector
+ filters []Filter
+ unique bool
+}
+
+// Attribute of storage node.
+type Attribute struct {
+ key string
+ value string
+ parents []string
+}
+
+// NodeInfo of storage node.
+type NodeInfo struct {
+ publicKey []byte
+ addresses []string
+ attributes []Attribute
+ state NodeState
+}
+
+// NodeState of storage node.
+type NodeState uint32
+
+// Clause of placement selector.
+type Clause uint32
+
+type LocalNodeInfoRequestBody struct{}
+
+type LocalNodeInfoResponseBody struct {
+ version *refs.Version
+ nodeInfo *NodeInfo
+}
+
+const (
+ UnspecifiedState NodeState = iota
+ Online
+ Offline
+ Maintenance
+)
+
+const (
+ UnspecifiedOperation Operation = iota
+ EQ
+ NE
+ GT
+ GE
+ LT
+ LE
+ OR
+ AND
+ NOT
+ LIKE
+)
+
+const (
+ UnspecifiedClause Clause = iota
+ Same
+ Distinct
+)
+
+func (f *Filter) GetFilters() []Filter {
+ if f != nil {
+ return f.filters
+ }
+
+ return nil
+}
+
+func (f *Filter) SetFilters(filters []Filter) {
+ f.filters = filters
+}
+
+func (f *Filter) GetValue() string {
+ if f != nil {
+ return f.value
+ }
+
+ return ""
+}
+
+func (f *Filter) SetValue(value string) {
+ f.value = value
+}
+
+func (f *Filter) GetOp() Operation {
+ if f != nil {
+ return f.op
+ }
+ return UnspecifiedOperation
+}
+
+func (f *Filter) SetOp(op Operation) {
+ f.op = op
+}
+
+func (f *Filter) GetKey() string {
+ if f != nil {
+ return f.key
+ }
+
+ return ""
+}
+
+func (f *Filter) SetKey(key string) {
+ f.key = key
+}
+
+func (f *Filter) GetName() string {
+ if f != nil {
+ return f.name
+ }
+
+ return ""
+}
+
+func (f *Filter) SetName(name string) {
+ f.name = name
+}
+
+func (s *Selector) GetFilter() string {
+ if s != nil {
+ return s.filter
+ }
+
+ return ""
+}
+
+func (s *Selector) SetFilter(filter string) {
+ s.filter = filter
+}
+
+func (s *Selector) GetAttribute() string {
+ if s != nil {
+ return s.attribute
+ }
+
+ return ""
+}
+
+func (s *Selector) SetAttribute(attribute string) {
+ s.attribute = attribute
+}
+
+func (s *Selector) GetClause() Clause {
+ if s != nil {
+ return s.clause
+ }
+
+ return UnspecifiedClause
+}
+
+func (s *Selector) SetClause(clause Clause) {
+ s.clause = clause
+}
+
+func (s *Selector) GetCount() uint32 {
+ if s != nil {
+ return s.count
+ }
+
+ return 0
+}
+
+func (s *Selector) SetCount(count uint32) {
+ s.count = count
+}
+
+func (s *Selector) GetName() string {
+ if s != nil {
+ return s.name
+ }
+
+ return ""
+}
+
+func (s *Selector) SetName(name string) {
+ s.name = name
+}
+
+func (r *Replica) GetSelector() string {
+ if r != nil {
+ return r.selector
+ }
+
+ return ""
+}
+
+func (r *Replica) SetSelector(selector string) {
+ r.selector = selector
+}
+
+func (r *Replica) GetCount() uint32 {
+ if r != nil {
+ return r.count
+ }
+
+ return 0
+}
+
+func (r *Replica) SetCount(count uint32) {
+ r.count = count
+}
+
+func (r *Replica) GetECDataCount() uint32 {
+ if r != nil {
+ return r.ecDataCount
+ }
+
+ return 0
+}
+
+func (r *Replica) SetECDataCount(count uint32) {
+ r.ecDataCount = count
+}
+
+func (r *Replica) GetECParityCount() uint32 {
+ if r != nil {
+ return r.ecParityCount
+ }
+
+ return 0
+}
+
+func (r *Replica) SetECParityCount(count uint32) {
+ r.ecParityCount = count
+}
+
+func (p *PlacementPolicy) GetUnique() bool {
+ if p != nil {
+ return p.unique
+ }
+ return false
+}
+
+func (p *PlacementPolicy) SetUnique(unique bool) {
+ p.unique = unique
+}
+
+func (p *PlacementPolicy) GetFilters() []Filter {
+ if p != nil {
+ return p.filters
+ }
+
+ return nil
+}
+
+func (p *PlacementPolicy) SetFilters(filters []Filter) {
+ p.filters = filters
+}
+
+func (p *PlacementPolicy) GetSelectors() []Selector {
+ if p != nil {
+ return p.selectors
+ }
+
+ return nil
+}
+
+func (p *PlacementPolicy) SetSelectors(selectors []Selector) {
+ p.selectors = selectors
+}
+
+func (p *PlacementPolicy) GetContainerBackupFactor() uint32 {
+ if p != nil {
+ return p.backupFactor
+ }
+
+ return 0
+}
+
+func (p *PlacementPolicy) SetContainerBackupFactor(backupFactor uint32) {
+ p.backupFactor = backupFactor
+}
+
+func (p *PlacementPolicy) GetReplicas() []Replica {
+ if p == nil {
+ return nil
+ }
+
+ return p.replicas
+}
+
+func (p *PlacementPolicy) SetReplicas(replicas []Replica) {
+ p.replicas = replicas
+}
+
+func (a *Attribute) GetKey() string {
+ if a != nil {
+ return a.key
+ }
+
+ return ""
+}
+
+func (a *Attribute) SetKey(v string) {
+ a.key = v
+}
+
+func (a *Attribute) GetValue() string {
+ if a != nil {
+ return a.value
+ }
+
+ return ""
+}
+
+func (a *Attribute) SetValue(v string) {
+ a.value = v
+}
+
+func (a *Attribute) GetParents() []string {
+ if a != nil {
+ return a.parents
+ }
+
+ return nil
+}
+
+func (a *Attribute) SetParents(parent []string) {
+ a.parents = parent
+}
+
+func (ni *NodeInfo) GetPublicKey() []byte {
+ if ni != nil {
+ return ni.publicKey
+ }
+
+ return nil
+}
+
+func (ni *NodeInfo) SetPublicKey(v []byte) {
+ ni.publicKey = v
+}
+
+// GetAddress returns node's network address.
+//
+// Deprecated: use IterateAddresses.
+func (ni *NodeInfo) GetAddress() (addr string) {
+ ni.IterateAddresses(func(s string) bool {
+ addr = s
+ return true
+ })
+
+ return
+}
+
+// SetAddress sets node's network address.
+//
+// Deprecated: use SetAddresses.
+func (ni *NodeInfo) SetAddress(v string) {
+ ni.SetAddresses(v)
+}
+
+// SetAddresses sets list of network addresses of the node.
+func (ni *NodeInfo) SetAddresses(v ...string) {
+ ni.addresses = v
+}
+
+// NumberOfAddresses returns number of network addresses of the node.
+func (ni *NodeInfo) NumberOfAddresses() int {
+ if ni != nil {
+ return len(ni.addresses)
+ }
+
+ return 0
+}
+
+// IterateAddresses iterates over network addresses of the node.
+// Breaks iteration on f's true return.
+//
+// Handler should not be nil.
+func (ni *NodeInfo) IterateAddresses(f func(string) bool) {
+ if ni != nil {
+ for i := range ni.addresses {
+ if f(ni.addresses[i]) {
+ break
+ }
+ }
+ }
+}
+
+func (ni *NodeInfo) GetAttributes() []Attribute {
+ if ni != nil {
+ return ni.attributes
+ }
+
+ return nil
+}
+
+func (ni *NodeInfo) SetAttributes(v []Attribute) {
+ ni.attributes = v
+}
+
+func (ni *NodeInfo) GetState() NodeState {
+ if ni != nil {
+ return ni.state
+ }
+
+ return UnspecifiedState
+}
+
+func (ni *NodeInfo) SetState(state NodeState) {
+ ni.state = state
+}
+
+func (l *LocalNodeInfoResponseBody) GetVersion() *refs.Version {
+ if l != nil {
+ return l.version
+ }
+
+ return nil
+}
+
+func (l *LocalNodeInfoResponseBody) SetVersion(version *refs.Version) {
+ l.version = version
+}
+
+func (l *LocalNodeInfoResponseBody) GetNodeInfo() *NodeInfo {
+ if l != nil {
+ return l.nodeInfo
+ }
+
+ return nil
+}
+
+func (l *LocalNodeInfoResponseBody) SetNodeInfo(nodeInfo *NodeInfo) {
+ l.nodeInfo = nodeInfo
+}
+
+func (l *LocalNodeInfoRequest) GetBody() *LocalNodeInfoRequestBody {
+ if l != nil {
+ return l.body
+ }
+ return nil
+}
+
+func (l *LocalNodeInfoRequest) SetBody(body *LocalNodeInfoRequestBody) {
+ l.body = body
+}
+
+func (l *LocalNodeInfoResponse) GetBody() *LocalNodeInfoResponseBody {
+ if l != nil {
+ return l.body
+ }
+ return nil
+}
+
+func (l *LocalNodeInfoResponse) SetBody(body *LocalNodeInfoResponseBody) {
+ l.body = body
+}
+
+// NetworkParameter represents NeoFS network parameter.
+type NetworkParameter struct {
+ k, v []byte
+}
+
+// GetKey returns parameter key.
+func (x *NetworkParameter) GetKey() []byte {
+ if x != nil {
+ return x.k
+ }
+
+ return nil
+}
+
+// SetKey sets parameter key.
+func (x *NetworkParameter) SetKey(k []byte) {
+ x.k = k
+}
+
+// GetValue returns parameter value.
+func (x *NetworkParameter) GetValue() []byte {
+ if x != nil {
+ return x.v
+ }
+
+ return nil
+}
+
+// SetValue sets parameter value.
+func (x *NetworkParameter) SetValue(v []byte) {
+ x.v = v
+}
+
+// NetworkConfig represents NeoFS network configuration.
+type NetworkConfig struct {
+ ps []NetworkParameter
+}
+
+// NumberOfParameters returns number of network parameters.
+func (x *NetworkConfig) NumberOfParameters() int {
+ if x != nil {
+ return len(x.ps)
+ }
+
+ return 0
+}
+
+// IterateParameters iterates over network parameters.
+// Breaks iteration on f's true return.
+//
+// Handler must not be nil.
+func (x *NetworkConfig) IterateParameters(f func(*NetworkParameter) bool) {
+ if x != nil {
+ for i := range x.ps {
+ if f(&x.ps[i]) {
+ break
+ }
+ }
+ }
+}
+
+// SetParameters sets list of network parameters.
+func (x *NetworkConfig) SetParameters(v ...NetworkParameter) {
+ x.ps = v
+}
+
+// NetworkInfo groups information about
+// NeoFS network.
+type NetworkInfo struct {
+ curEpoch, magicNum uint64
+
+ msPerBlock int64
+
+ netCfg *NetworkConfig
+}
+
+// GetCurrentEpoch returns number of the current epoch.
+func (i *NetworkInfo) GetCurrentEpoch() uint64 {
+ if i != nil {
+ return i.curEpoch
+ }
+
+ return 0
+}
+
+// SetCurrentEpoch sets number of the current epoch.
+func (i *NetworkInfo) SetCurrentEpoch(epoch uint64) {
+ i.curEpoch = epoch
+}
+
+// GetMagicNumber returns magic number of the sidechain.
+func (i *NetworkInfo) GetMagicNumber() uint64 {
+ if i != nil {
+ return i.magicNum
+ }
+
+ return 0
+}
+
+// SetMagicNumber sets magic number of the sidechain.
+func (i *NetworkInfo) SetMagicNumber(magic uint64) {
+ i.magicNum = magic
+}
+
+// GetMsPerBlock returns MillisecondsPerBlock network parameter.
+func (i *NetworkInfo) GetMsPerBlock() int64 {
+ if i != nil {
+ return i.msPerBlock
+ }
+
+ return 0
+}
+
+// SetMsPerBlock sets MillisecondsPerBlock network parameter.
+func (i *NetworkInfo) SetMsPerBlock(v int64) {
+ i.msPerBlock = v
+}
+
+// GetNetworkConfig returns NeoFS network configuration.
+func (i *NetworkInfo) GetNetworkConfig() *NetworkConfig {
+ if i != nil {
+ return i.netCfg
+ }
+
+ return nil
+}
+
+// SetNetworkConfig sets NeoFS network configuration.
+func (i *NetworkInfo) SetNetworkConfig(v *NetworkConfig) {
+ i.netCfg = v
+}
+
+// NetworkInfoRequestBody is a structure of NetworkInfo request body.
+type NetworkInfoRequestBody struct{}
+
+// NetworkInfoResponseBody is a structure of NetworkInfo response body.
+type NetworkInfoResponseBody struct {
+ netInfo *NetworkInfo
+}
+
+// GetNetworkInfo returns information about the NeoFS network.
+func (i *NetworkInfoResponseBody) GetNetworkInfo() *NetworkInfo {
+ if i != nil {
+ return i.netInfo
+ }
+
+ return nil
+}
+
+// SetNetworkInfo sets information about the NeoFS network.
+func (i *NetworkInfoResponseBody) SetNetworkInfo(netInfo *NetworkInfo) {
+ i.netInfo = netInfo
+}
+
+func (l *NetworkInfoRequest) GetBody() *NetworkInfoRequestBody {
+ if l != nil {
+ return l.body
+ }
+ return nil
+}
+
+func (l *NetworkInfoRequest) SetBody(body *NetworkInfoRequestBody) {
+ l.body = body
+}
+
+func (l *NetworkInfoResponse) GetBody() *NetworkInfoResponseBody {
+ if l != nil {
+ return l.body
+ }
+ return nil
+}
+
+func (l *NetworkInfoResponse) SetBody(body *NetworkInfoResponseBody) {
+ l.body = body
+}
+
+// NetMap represents structure of NeoFS network map.
+type NetMap struct {
+ epoch uint64
+
+ nodes []NodeInfo
+}
+
+// Epoch returns revision number of the NetMap.
+func (x *NetMap) Epoch() uint64 {
+ if x != nil {
+ return x.epoch
+ }
+
+ return 0
+}
+
+// SetEpoch sets revision number of the NetMap.
+func (x *NetMap) SetEpoch(v uint64) {
+ x.epoch = v
+}
+
+// Nodes returns nodes presented in the NetMap.
+func (x *NetMap) Nodes() []NodeInfo {
+ if x != nil {
+ return x.nodes
+ }
+
+ return nil
+}
+
+// SetNodes sets nodes presented in the NetMap.
+func (x *NetMap) SetNodes(v []NodeInfo) {
+ x.nodes = v
+}
+
+// SnapshotRequestBody represents structure of Snapshot request body.
+type SnapshotRequestBody struct{}
+
+// SnapshotRequest represents structure of Snapshot request.
+type SnapshotRequest struct {
+ body *SnapshotRequestBody
+
+ session.RequestHeaders
+}
+
+func (x *SnapshotRequest) GetBody() *SnapshotRequestBody {
+ if x != nil {
+ return x.body
+ }
+
+ return nil
+}
+
+func (x *SnapshotRequest) SetBody(body *SnapshotRequestBody) {
+ x.body = body
+}
+
+// SnapshotResponseBody represents structure of Snapshot response body.
+type SnapshotResponseBody struct {
+ netMap *NetMap
+}
+
+// NetMap returns current NetMap.
+func (x *SnapshotResponseBody) NetMap() *NetMap {
+ if x != nil {
+ return x.netMap
+ }
+
+ return nil
+}
+
+// SetNetMap sets current NetMap.
+func (x *SnapshotResponseBody) SetNetMap(netMap *NetMap) {
+ x.netMap = netMap
+}
+
+// SnapshotResponse represents structure of Snapshot response.
+type SnapshotResponse struct {
+ body *SnapshotResponseBody
+
+ session.ResponseHeaders
+}
+
+func (x *SnapshotResponse) GetBody() *SnapshotResponseBody {
+ if x != nil {
+ return x.body
+ }
+
+ return nil
+}
+
+func (x *SnapshotResponse) SetBody(body *SnapshotResponseBody) {
+ x.body = body
+}
diff --git a/api/object/attributes.go b/api/object/attributes.go
new file mode 100644
index 0000000..7f4fca0
--- /dev/null
+++ b/api/object/attributes.go
@@ -0,0 +1,187 @@
+package object
+
+import (
+ "errors"
+ "fmt"
+ "strconv"
+)
+
+// SysAttributePrefix is a prefix of key to system attribute.
+const SysAttributePrefix = "__SYSTEM__"
+
+const (
+ // SysAttributeUploadID marks smaller parts of a split bigger object.
+ SysAttributeUploadID = SysAttributePrefix + "UPLOAD_ID"
+
+ // SysAttributeExpEpoch tells GC to delete object after that epoch.
+ SysAttributeExpEpoch = SysAttributePrefix + "EXPIRATION_EPOCH"
+
+ // SysAttributeTickEpoch defines what epoch must produce object
+ // notification.
+ SysAttributeTickEpoch = SysAttributePrefix + "TICK_EPOCH"
+
+ // SysAttributeTickTopic defines what topic object notification
+ // must be sent to.
+ SysAttributeTickTopic = SysAttributePrefix + "TICK_TOPIC"
+)
+
+// SysAttributePrefixNeoFS is a prefix of key to system attribute.
+// Deprecated: use SysAttributePrefix.
+const SysAttributePrefixNeoFS = "__NEOFS__"
+
+const (
+ // SysAttributeUploadIDNeoFS marks smaller parts of a split bigger object.
+ // Deprecated: use SysAttributeUploadID.
+ SysAttributeUploadIDNeoFS = SysAttributePrefixNeoFS + "UPLOAD_ID"
+
+ // SysAttributeExpEpochNeoFS tells GC to delete object after that epoch.
+ // Deprecated: use SysAttributeExpEpoch.
+ SysAttributeExpEpochNeoFS = SysAttributePrefixNeoFS + "EXPIRATION_EPOCH"
+
+ // SysAttributeTickEpochNeoFS defines what epoch must produce object
+ // notification.
+ // Deprecated: use SysAttributeTickEpoch.
+ SysAttributeTickEpochNeoFS = SysAttributePrefixNeoFS + "TICK_EPOCH"
+
+ // SysAttributeTickTopicNeoFS defines what topic object notification
+ // must be sent to.
+ // Deprecated: use SysAttributeTickTopic.
+ SysAttributeTickTopicNeoFS = SysAttributePrefixNeoFS + "TICK_TOPIC"
+)
+
+// NotificationInfo groups information about object notification
+// that can be written to object.
+//
+// Topic is an optional field.
+type NotificationInfo struct {
+ epoch uint64
+ topic string
+}
+
+// Epoch returns object notification tick
+// epoch.
+func (n NotificationInfo) Epoch() uint64 {
+ return n.epoch
+}
+
+// SetEpoch sets object notification tick
+// epoch.
+func (n *NotificationInfo) SetEpoch(epoch uint64) {
+ n.epoch = epoch
+}
+
+// Topic return optional object notification
+// topic.
+func (n NotificationInfo) Topic() string {
+ return n.topic
+}
+
+// SetTopic sets optional object notification
+// topic.
+func (n *NotificationInfo) SetTopic(topic string) {
+ n.topic = topic
+}
+
+// WriteNotificationInfo writes NotificationInfo to the Object via attributes. Object must not be nil.
+//
+// Existing notification attributes are expected to be key-unique, otherwise undefined behavior.
+func WriteNotificationInfo(o *Object, ni NotificationInfo) {
+ h := o.GetHeader()
+ if h == nil {
+ h = new(Header)
+ o.SetHeader(h)
+ }
+
+ var (
+ attrs = h.GetAttributes()
+
+ epoch = strconv.FormatUint(ni.Epoch(), 10)
+ topic = ni.Topic()
+
+ changedEpoch bool
+ changedTopic bool
+ deleteIndex = -1
+ )
+
+ for i := range attrs {
+ switch attrs[i].GetKey() {
+ case SysAttributeTickEpoch, SysAttributeTickEpochNeoFS:
+ attrs[i].SetValue(epoch)
+ changedEpoch = true
+ case SysAttributeTickTopic, SysAttributeTickTopicNeoFS:
+ changedTopic = true
+
+ if topic == "" {
+ deleteIndex = i
+ break
+ }
+
+ attrs[i].SetValue(topic)
+ }
+
+ if changedEpoch && changedTopic {
+ break
+ }
+ }
+
+ if deleteIndex != -1 {
+ // approach without allocation/waste
+ // coping works since the attributes
+ // order is not important
+ attrs[deleteIndex] = attrs[len(attrs)-1]
+ attrs = attrs[:len(attrs)-1]
+ }
+
+ if !changedEpoch {
+ index := len(attrs)
+ attrs = append(attrs, Attribute{})
+ attrs[index].SetKey(SysAttributeTickEpoch)
+ attrs[index].SetValue(epoch)
+ }
+
+ if !changedTopic && topic != "" {
+ index := len(attrs)
+ attrs = append(attrs, Attribute{})
+ attrs[index].SetKey(SysAttributeTickTopic)
+ attrs[index].SetValue(topic)
+ }
+
+ h.SetAttributes(attrs)
+}
+
+// ErrNotificationNotSet means that object does not have notification.
+var ErrNotificationNotSet = errors.New("notification for object is not set")
+
+// GetNotificationInfo looks for object notification attributes. Object must not be nil.
+// Returns ErrNotificationNotSet if no corresponding attributes
+// were found.
+//
+// Existing notification attributes are expected to be key-unique, otherwise undefined behavior.
+func GetNotificationInfo(o *Object) (*NotificationInfo, error) {
+ var (
+ foundEpoch bool
+ ni = new(NotificationInfo)
+ )
+
+ for _, attr := range o.GetHeader().GetAttributes() {
+ switch key := attr.GetKey(); key {
+ case SysAttributeTickEpoch, SysAttributeTickEpochNeoFS:
+ epoch, err := strconv.ParseUint(attr.GetValue(), 10, 64)
+ if err != nil {
+ return nil, fmt.Errorf("could not parse epoch: %w", err)
+ }
+
+ ni.SetEpoch(epoch)
+
+ foundEpoch = true
+ case SysAttributeTickTopic, SysAttributeTickTopicNeoFS:
+ ni.SetTopic(attr.GetValue())
+ }
+ }
+
+ if !foundEpoch {
+ return nil, ErrNotificationNotSet
+ }
+
+ return ni, nil
+}
diff --git a/api/object/attributes_test.go b/api/object/attributes_test.go
new file mode 100644
index 0000000..85635da
--- /dev/null
+++ b/api/object/attributes_test.go
@@ -0,0 +1,89 @@
+package object
+
+import (
+ "strconv"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestSetNotification(t *testing.T) {
+ o := new(Object)
+
+ ni := NotificationInfo{
+ epoch: 10,
+ topic: "test",
+ }
+
+ WriteNotificationInfo(o, ni)
+
+ var foundEpoch, foundTopic bool
+
+ for _, attr := range o.GetHeader().GetAttributes() {
+ switch key := attr.GetKey(); key {
+ case SysAttributeTickEpoch:
+ require.Equal(t, false, foundEpoch)
+
+ uEpoch, err := strconv.ParseUint(attr.GetValue(), 10, 64)
+ require.NoError(t, err)
+
+ require.Equal(t, ni.Epoch(), uEpoch)
+ foundEpoch = true
+ case SysAttributeTickTopic:
+ require.Equal(t, false, foundTopic)
+ require.Equal(t, ni.Topic(), attr.GetValue())
+ foundTopic = true
+ }
+ }
+
+ require.Equal(t, true, foundEpoch && foundTopic)
+}
+
+func TestGetNotification(t *testing.T) {
+ o := new(Object)
+
+ attr := []Attribute{
+ {SysAttributeTickEpoch, "10"},
+ {SysAttributeTickTopic, "test"},
+ }
+
+ h := new(Header)
+ h.SetAttributes(attr)
+
+ o.SetHeader(h)
+
+ t.Run("No error", func(t *testing.T) {
+ ni, err := GetNotificationInfo(o)
+ require.NoError(t, err)
+
+ require.Equal(t, uint64(10), ni.Epoch())
+ require.Equal(t, "test", ni.Topic())
+ })
+}
+
+func TestIntegration(t *testing.T) {
+ o := new(Object)
+
+ var (
+ ni1 = NotificationInfo{
+ epoch: 10,
+ topic: "",
+ }
+ ni2 = NotificationInfo{
+ epoch: 11,
+ topic: "test",
+ }
+ )
+
+ WriteNotificationInfo(o, ni1)
+ WriteNotificationInfo(o, ni2)
+
+ t.Run("double set", func(t *testing.T) {
+ ni, err := GetNotificationInfo(o)
+ require.NoError(t, err)
+
+ require.Equal(t, ni2.epoch, ni.Epoch())
+ require.Equal(t, ni2.topic, ni.Topic())
+ require.Equal(t, 2, len(o.GetHeader().GetAttributes()))
+ })
+}
diff --git a/api/object/bench_test.go b/api/object/bench_test.go
new file mode 100644
index 0000000..b29b1d1
--- /dev/null
+++ b/api/object/bench_test.go
@@ -0,0 +1,45 @@
+package object
+
+import (
+ "math/rand"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+)
+
+func randString(n int) string {
+ x := make([]byte, n)
+ for i := range x {
+ x[i] = byte('a' + rand.Intn('z'-'a'))
+ }
+ return string(x)
+}
+
+func BenchmarkAttributesMarshal(b *testing.B) {
+ attrs := make([]Attribute, 50)
+ for i := range attrs {
+ attrs[i].key = SysAttributePrefix + randString(10)
+ attrs[i].val = randString(10)
+ }
+ raw := AttributesToGRPC(attrs)
+ require.Equal(b, len(raw), len(attrs))
+
+ b.Run("marshal", func(b *testing.B) {
+ b.ReportAllocs()
+ for range b.N {
+ res := AttributesToGRPC(attrs)
+ if len(res) != len(raw) {
+ b.FailNow()
+ }
+ }
+ })
+ b.Run("unmarshal", func(b *testing.B) {
+ b.ReportAllocs()
+ for range b.N {
+ res, err := AttributesFromGRPC(raw)
+ if err != nil || len(res) != len(raw) {
+ b.FailNow()
+ }
+ }
+ })
+}
diff --git a/api/object/convert.go b/api/object/convert.go
new file mode 100644
index 0000000..7fb1d74
--- /dev/null
+++ b/api/object/convert.go
@@ -0,0 +1,2555 @@
+package object
+
+import (
+ "fmt"
+
+ object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ sessionGRPC "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/grpc"
+)
+
+func TypeToGRPCField(t Type) object.ObjectType {
+ return object.ObjectType(t)
+}
+
+func TypeFromGRPCField(t object.ObjectType) Type {
+ return Type(t)
+}
+
+func MatchTypeToGRPCField(t MatchType) object.MatchType {
+ return object.MatchType(t)
+}
+
+func MatchTypeFromGRPCField(t object.MatchType) MatchType {
+ return MatchType(t)
+}
+
+func (h *ShortHeader) ToGRPCMessage() grpc.Message {
+ var m *object.ShortHeader
+
+ if h != nil {
+ m = new(object.ShortHeader)
+
+ m.SetVersion(h.version.ToGRPCMessage().(*refsGRPC.Version))
+ m.SetOwnerId(h.ownerID.ToGRPCMessage().(*refsGRPC.OwnerID))
+ m.SetHomomorphicHash(h.homoHash.ToGRPCMessage().(*refsGRPC.Checksum))
+ m.SetPayloadHash(h.payloadHash.ToGRPCMessage().(*refsGRPC.Checksum))
+ m.SetObjectType(TypeToGRPCField(h.typ))
+ m.SetCreationEpoch(h.creatEpoch)
+ m.SetPayloadLength(h.payloadLen)
+ }
+
+ return m
+}
+
+func (h *ShortHeader) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.ShortHeader)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ version := v.GetVersion()
+ if version == nil {
+ h.version = nil
+ } else {
+ if h.version == nil {
+ h.version = new(refs.Version)
+ }
+
+ err = h.version.FromGRPCMessage(version)
+ if err != nil {
+ return err
+ }
+ }
+
+ ownerID := v.GetOwnerId()
+ if ownerID == nil {
+ h.ownerID = nil
+ } else {
+ if h.ownerID == nil {
+ h.ownerID = new(refs.OwnerID)
+ }
+
+ err = h.ownerID.FromGRPCMessage(ownerID)
+ if err != nil {
+ return err
+ }
+ }
+
+ homoHash := v.GetHomomorphicHash()
+ if homoHash == nil {
+ h.homoHash = nil
+ } else {
+ if h.homoHash == nil {
+ h.homoHash = new(refs.Checksum)
+ }
+
+ err = h.homoHash.FromGRPCMessage(homoHash)
+ if err != nil {
+ return err
+ }
+ }
+
+ payloadHash := v.GetPayloadHash()
+ if payloadHash == nil {
+ h.payloadHash = nil
+ } else {
+ if h.payloadHash == nil {
+ h.payloadHash = new(refs.Checksum)
+ }
+
+ err = h.payloadHash.FromGRPCMessage(payloadHash)
+ if err != nil {
+ return err
+ }
+ }
+
+ h.typ = TypeFromGRPCField(v.GetObjectType())
+ h.creatEpoch = v.GetCreationEpoch()
+ h.payloadLen = v.GetPayloadLength()
+
+ return nil
+}
+
+func (a *Attribute) ToGRPCMessage() grpc.Message {
+ var m *object.Header_Attribute
+
+ if a != nil {
+ m = new(object.Header_Attribute)
+
+ m.SetKey(a.key)
+ m.SetValue(a.val)
+ }
+
+ return m
+}
+
+func (a *Attribute) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.Header_Attribute)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ a.key = v.GetKey()
+ a.val = v.GetValue()
+
+ return nil
+}
+
+func AttributesToGRPC(xs []Attribute) (res []object.Header_Attribute) {
+ if xs != nil {
+ res = make([]object.Header_Attribute, 0, len(xs))
+
+ for i := range xs {
+ res = append(res, *xs[i].ToGRPCMessage().(*object.Header_Attribute))
+ }
+ }
+
+ return
+}
+
+func AttributesFromGRPC(xs []object.Header_Attribute) (res []Attribute, err error) {
+ if xs != nil {
+ res = make([]Attribute, len(xs))
+
+ for i := range xs {
+ err = res[i].FromGRPCMessage(&xs[i])
+ if err != nil {
+ return
+ }
+ }
+ }
+
+ return
+}
+
+func (h *SplitHeader) ToGRPCMessage() grpc.Message {
+ var m *object.Header_Split
+
+ if h != nil {
+ m = new(object.Header_Split)
+
+ m.SetParent(h.par.ToGRPCMessage().(*refsGRPC.ObjectID))
+ m.SetPrevious(h.prev.ToGRPCMessage().(*refsGRPC.ObjectID))
+ m.SetParentHeader(h.parHdr.ToGRPCMessage().(*object.Header))
+ m.SetParentSignature(h.parSig.ToGRPCMessage().(*refsGRPC.Signature))
+ m.SetChildren(refs.ObjectIDListToGRPCMessage(h.children))
+ m.SetSplitId(h.splitID)
+ }
+
+ return m
+}
+
+func (h *SplitHeader) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.Header_Split)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ par := v.GetParent()
+ if par == nil {
+ h.par = nil
+ } else {
+ if h.par == nil {
+ h.par = new(refs.ObjectID)
+ }
+
+ err = h.par.FromGRPCMessage(par)
+ if err != nil {
+ return err
+ }
+ }
+
+ prev := v.GetPrevious()
+ if prev == nil {
+ h.prev = nil
+ } else {
+ if h.prev == nil {
+ h.prev = new(refs.ObjectID)
+ }
+
+ err = h.prev.FromGRPCMessage(prev)
+ if err != nil {
+ return err
+ }
+ }
+
+ parHdr := v.GetParentHeader()
+ if parHdr == nil {
+ h.parHdr = nil
+ } else {
+ if h.parHdr == nil {
+ h.parHdr = new(Header)
+ }
+
+ err = h.parHdr.FromGRPCMessage(parHdr)
+ if err != nil {
+ return err
+ }
+ }
+
+ parSig := v.GetParentSignature()
+ if parSig == nil {
+ h.parSig = nil
+ } else {
+ if h.parSig == nil {
+ h.parSig = new(refs.Signature)
+ }
+
+ err = h.parSig.FromGRPCMessage(parSig)
+ if err != nil {
+ return err
+ }
+ }
+
+ h.children, err = refs.ObjectIDListFromGRPCMessage(v.GetChildren())
+ if err != nil {
+ return err
+ }
+
+ h.splitID = v.GetSplitId()
+
+ return nil
+}
+
+func (h *ECHeader) ToGRPCMessage() grpc.Message {
+ var m *object.Header_EC
+
+ if h != nil {
+ m = new(object.Header_EC)
+
+ m.Parent = h.Parent.ToGRPCMessage().(*refsGRPC.ObjectID)
+ m.ParentSplitId = h.ParentSplitID
+ m.ParentSplitParentId = h.ParentSplitParentID.ToGRPCMessage().(*refsGRPC.ObjectID)
+ m.ParentAttributes = AttributesToGRPC(h.ParentAttributes)
+ m.Index = h.Index
+ m.Total = h.Total
+ m.Header = h.Header
+ m.HeaderLength = h.HeaderLength
+ }
+
+ return m
+}
+
+func (h *ECHeader) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.Header_EC)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ par := v.GetParent()
+ if par == nil {
+ h.Parent = nil
+ } else {
+ if h.Parent == nil {
+ h.Parent = new(refs.ObjectID)
+ }
+
+ err = h.Parent.FromGRPCMessage(par)
+ if err != nil {
+ return err
+ }
+ }
+
+ h.ParentSplitID = v.GetParentSplitId()
+
+ parSplitParentID := v.GetParentSplitParentId()
+ if parSplitParentID == nil {
+ h.ParentSplitParentID = nil
+ } else {
+ if h.ParentSplitParentID == nil {
+ h.ParentSplitParentID = new(refs.ObjectID)
+ }
+
+ err = h.ParentSplitParentID.FromGRPCMessage(parSplitParentID)
+ if err != nil {
+ return err
+ }
+ }
+
+ if h.ParentAttributes, err = AttributesFromGRPC(v.GetParentAttributes()); err != nil {
+ return err
+ }
+
+ h.Index = v.GetIndex()
+ h.Total = v.GetTotal()
+ h.Header = v.GetHeader()
+ h.HeaderLength = v.GetHeaderLength()
+ return nil
+}
+
+func (h *Header) ToGRPCMessage() grpc.Message {
+ var m *object.Header
+
+ if h != nil {
+ m = new(object.Header)
+
+ m.SetVersion(h.version.ToGRPCMessage().(*refsGRPC.Version))
+ m.SetPayloadHash(h.payloadHash.ToGRPCMessage().(*refsGRPC.Checksum))
+ m.SetOwnerId(h.ownerID.ToGRPCMessage().(*refsGRPC.OwnerID))
+ m.SetHomomorphicHash(h.homoHash.ToGRPCMessage().(*refsGRPC.Checksum))
+ m.SetContainerId(h.cid.ToGRPCMessage().(*refsGRPC.ContainerID))
+ m.SetSessionToken(h.sessionToken.ToGRPCMessage().(*sessionGRPC.SessionToken))
+ m.SetSplit(h.split.ToGRPCMessage().(*object.Header_Split))
+ m.Ec = h.ec.ToGRPCMessage().(*object.Header_EC)
+ m.SetAttributes(AttributesToGRPC(h.attr))
+ m.SetPayloadLength(h.payloadLen)
+ m.SetCreationEpoch(h.creatEpoch)
+ m.SetObjectType(TypeToGRPCField(h.typ))
+ }
+
+ return m
+}
+
+func (h *Header) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.Header)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ if err := h.fillVersion(v); err != nil {
+ return err
+ }
+ if err := h.fillPayloadHash(v); err != nil {
+ return err
+ }
+ if err := h.fillOwnerID(v); err != nil {
+ return err
+ }
+ if err := h.fillHomomorphicHash(v); err != nil {
+ return err
+ }
+ if err := h.fillContainerID(v); err != nil {
+ return err
+ }
+ if err := h.fillSessionToken(v); err != nil {
+ return err
+ }
+ if err := h.fillSplitHeader(v); err != nil {
+ return err
+ }
+ if err := h.fillECHeader(v); err != nil {
+ return err
+ }
+
+ h.attr, err = AttributesFromGRPC(v.GetAttributes())
+ if err != nil {
+ return err
+ }
+
+ h.payloadLen = v.GetPayloadLength()
+ h.creatEpoch = v.GetCreationEpoch()
+ h.typ = TypeFromGRPCField(v.GetObjectType())
+
+ return nil
+}
+
+func (h *Header) fillVersion(v *object.Header) error {
+ version := v.GetVersion()
+ if version == nil {
+ h.version = nil
+ return nil
+ }
+
+ if h.version == nil {
+ h.version = new(refs.Version)
+ }
+ return h.version.FromGRPCMessage(version)
+}
+
+func (h *Header) fillPayloadHash(v *object.Header) error {
+ payloadHash := v.GetPayloadHash()
+ if payloadHash == nil {
+ h.payloadHash = nil
+ return nil
+ }
+
+ if h.payloadHash == nil {
+ h.payloadHash = new(refs.Checksum)
+ }
+ return h.payloadHash.FromGRPCMessage(payloadHash)
+}
+
+func (h *Header) fillOwnerID(v *object.Header) error {
+ ownerID := v.GetOwnerId()
+ if ownerID == nil {
+ h.ownerID = nil
+ return nil
+ }
+
+ if h.ownerID == nil {
+ h.ownerID = new(refs.OwnerID)
+ }
+ return h.ownerID.FromGRPCMessage(ownerID)
+}
+
+func (h *Header) fillHomomorphicHash(v *object.Header) error {
+ homoHash := v.GetHomomorphicHash()
+ if homoHash == nil {
+ h.homoHash = nil
+ return nil
+ }
+
+ if h.homoHash == nil {
+ h.homoHash = new(refs.Checksum)
+ }
+ return h.homoHash.FromGRPCMessage(homoHash)
+}
+
+func (h *Header) fillContainerID(v *object.Header) error {
+ cid := v.GetContainerId()
+ if cid == nil {
+ h.cid = nil
+ return nil
+ }
+
+ if h.cid == nil {
+ h.cid = new(refs.ContainerID)
+ }
+ return h.cid.FromGRPCMessage(cid)
+}
+
+func (h *Header) fillSessionToken(v *object.Header) error {
+ sessionToken := v.GetSessionToken()
+ if sessionToken == nil {
+ h.sessionToken = nil
+ return nil
+ }
+
+ if h.sessionToken == nil {
+ h.sessionToken = new(session.Token)
+ }
+ return h.sessionToken.FromGRPCMessage(sessionToken)
+}
+
+func (h *Header) fillSplitHeader(v *object.Header) error {
+ split := v.GetSplit()
+ if split == nil {
+ h.split = nil
+ return nil
+ }
+
+ if h.split == nil {
+ h.split = new(SplitHeader)
+ }
+ return h.split.FromGRPCMessage(split)
+}
+
+func (h *Header) fillECHeader(v *object.Header) error {
+ ec := v.GetEc()
+ if ec == nil {
+ h.ec = nil
+ return nil
+ }
+
+ if h.ec == nil {
+ h.ec = new(ECHeader)
+ }
+ return h.ec.FromGRPCMessage(ec)
+}
+
+func (h *HeaderWithSignature) ToGRPCMessage() grpc.Message {
+ var m *object.HeaderWithSignature
+
+ if h != nil {
+ m = new(object.HeaderWithSignature)
+
+ m.SetSignature(h.signature.ToGRPCMessage().(*refsGRPC.Signature))
+ m.SetHeader(h.header.ToGRPCMessage().(*object.Header))
+ }
+
+ return m
+}
+
+func (h *HeaderWithSignature) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.HeaderWithSignature)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ signature := v.GetSignature()
+ if signature == nil {
+ h.signature = nil
+ } else {
+ if h.signature == nil {
+ h.signature = new(refs.Signature)
+ }
+
+ err = h.signature.FromGRPCMessage(signature)
+ if err != nil {
+ return err
+ }
+ }
+
+ header := v.GetHeader()
+ if header == nil {
+ h.header = nil
+ } else {
+ if h.header == nil {
+ h.header = new(Header)
+ }
+
+ err = h.header.FromGRPCMessage(header)
+ }
+
+ return err
+}
+
+func (o *Object) ToGRPCMessage() grpc.Message {
+ var m *object.Object
+
+ if o != nil {
+ m = new(object.Object)
+
+ m.SetObjectId(o.objectID.ToGRPCMessage().(*refsGRPC.ObjectID))
+ m.SetSignature(o.idSig.ToGRPCMessage().(*refsGRPC.Signature))
+ m.SetHeader(o.header.ToGRPCMessage().(*object.Header))
+ m.SetPayload(o.payload)
+ }
+
+ return m
+}
+
+func (o *Object) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.Object)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ objectID := v.GetObjectId()
+ if objectID == nil {
+ o.objectID = nil
+ } else {
+ if o.objectID == nil {
+ o.objectID = new(refs.ObjectID)
+ }
+
+ err = o.objectID.FromGRPCMessage(objectID)
+ if err != nil {
+ return err
+ }
+ }
+
+ idSig := v.GetSignature()
+ if idSig == nil {
+ o.idSig = nil
+ } else {
+ if o.idSig == nil {
+ o.idSig = new(refs.Signature)
+ }
+
+ err = o.idSig.FromGRPCMessage(idSig)
+ if err != nil {
+ return err
+ }
+ }
+
+ header := v.GetHeader()
+ if header == nil {
+ o.header = nil
+ } else {
+ if o.header == nil {
+ o.header = new(Header)
+ }
+
+ err = o.header.FromGRPCMessage(header)
+ if err != nil {
+ return err
+ }
+ }
+
+ o.payload = v.GetPayload()
+
+ return nil
+}
+
+func (s *SplitInfo) ToGRPCMessage() grpc.Message {
+ var m *object.SplitInfo
+
+ if s != nil {
+ m = new(object.SplitInfo)
+
+ m.SetLastPart(s.lastPart.ToGRPCMessage().(*refsGRPC.ObjectID))
+ m.SetLink(s.link.ToGRPCMessage().(*refsGRPC.ObjectID))
+ m.SetSplitId(s.splitID)
+ }
+
+ return m
+}
+
+func (s *SplitInfo) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.SplitInfo)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ lastPart := v.GetLastPart()
+ if lastPart == nil {
+ s.lastPart = nil
+ } else {
+ if s.lastPart == nil {
+ s.lastPart = new(refs.ObjectID)
+ }
+
+ err = s.lastPart.FromGRPCMessage(lastPart)
+ if err != nil {
+ return err
+ }
+ }
+
+ link := v.GetLink()
+ if link == nil {
+ s.link = nil
+ } else {
+ if s.link == nil {
+ s.link = new(refs.ObjectID)
+ }
+
+ err = s.link.FromGRPCMessage(link)
+ if err != nil {
+ return err
+ }
+ }
+
+ s.splitID = v.GetSplitId()
+
+ return nil
+}
+
+func (s *ECInfo) ToGRPCMessage() grpc.Message {
+ var m *object.ECInfo
+
+ if s != nil {
+ m = new(object.ECInfo)
+
+ if s.Chunks != nil {
+ chunks := make([]object.ECInfo_Chunk, len(s.Chunks))
+ for i := range chunks {
+ chunks[i] = *s.Chunks[i].ToGRPCMessage().(*object.ECInfo_Chunk)
+ }
+ m.Chunks = chunks
+ }
+ }
+
+ return m
+}
+
+func (s *ECInfo) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.ECInfo)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ chunks := v.GetChunks()
+ if chunks == nil {
+ s.Chunks = nil
+ } else {
+ s.Chunks = make([]ECChunk, len(chunks))
+ for i := range chunks {
+ if err := s.Chunks[i].FromGRPCMessage(&chunks[i]); err != nil {
+ return err
+ }
+ }
+ }
+ return nil
+}
+
+func (c *ECChunk) ToGRPCMessage() grpc.Message {
+ var m *object.ECInfo_Chunk
+
+ if c != nil {
+ m = new(object.ECInfo_Chunk)
+
+ m.Total = c.Total
+ m.Index = c.Index
+ m.Id = c.ID.ToGRPCMessage().(*refsGRPC.ObjectID)
+ }
+
+ return m
+}
+
+func (c *ECChunk) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.ECInfo_Chunk)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ if err := c.ID.FromGRPCMessage(v.GetId()); err != nil {
+ return err
+ }
+ c.Index = v.Index
+ c.Total = v.Total
+
+ return nil
+}
+
+func (r *GetRequestBody) ToGRPCMessage() grpc.Message {
+ var m *object.GetRequest_Body
+
+ if r != nil {
+ m = new(object.GetRequest_Body)
+
+ m.SetAddress(r.addr.ToGRPCMessage().(*refsGRPC.Address))
+ m.SetRaw(r.raw)
+ }
+
+ return m
+}
+
+func (r *GetRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.GetRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ addr := v.GetAddress()
+ if addr == nil {
+ r.addr = nil
+ } else {
+ if r.addr == nil {
+ r.addr = new(refs.Address)
+ }
+
+ err = r.addr.FromGRPCMessage(addr)
+ if err != nil {
+ return err
+ }
+ }
+
+ r.raw = v.GetRaw()
+
+ return nil
+}
+
+func (r *GetRequest) ToGRPCMessage() grpc.Message {
+ var m *object.GetRequest
+
+ if r != nil {
+ m = new(object.GetRequest)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.GetRequest_Body))
+ r.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *GetRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.GetRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(GetRequestBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.RequestHeaders.FromMessage(v)
+}
+
+func (r *GetObjectPartInit) ToGRPCMessage() grpc.Message {
+ var m *object.GetResponse_Body_Init
+
+ if r != nil {
+ m = new(object.GetResponse_Body_Init)
+
+ m.SetObjectId(r.id.ToGRPCMessage().(*refsGRPC.ObjectID))
+ m.SetSignature(r.sig.ToGRPCMessage().(*refsGRPC.Signature))
+ m.SetHeader(r.hdr.ToGRPCMessage().(*object.Header))
+ }
+
+ return m
+}
+
+func (r *GetObjectPartInit) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.GetResponse_Body_Init)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ id := v.GetObjectId()
+ if id == nil {
+ r.id = nil
+ } else {
+ if r.id == nil {
+ r.id = new(refs.ObjectID)
+ }
+
+ err = r.id.FromGRPCMessage(id)
+ if err != nil {
+ return err
+ }
+ }
+
+ sig := v.GetSignature()
+ if sig == nil {
+ r.sig = nil
+ } else {
+ if r.sig == nil {
+ r.sig = new(refs.Signature)
+ }
+
+ err = r.sig.FromGRPCMessage(sig)
+ if err != nil {
+ return err
+ }
+ }
+
+ hdr := v.GetHeader()
+ if hdr == nil {
+ r.hdr = nil
+ } else {
+ if r.hdr == nil {
+ r.hdr = new(Header)
+ }
+
+ err = r.hdr.FromGRPCMessage(hdr)
+ }
+
+ return err
+}
+
+func (r *GetObjectPartChunk) ToGRPCMessage() grpc.Message {
+ var m *object.GetResponse_Body_Chunk
+
+ if r != nil {
+ m = new(object.GetResponse_Body_Chunk)
+
+ m.SetChunk(r.chunk)
+ }
+
+ return m
+}
+
+func (r *GetObjectPartChunk) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.GetResponse_Body_Chunk)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ r.chunk = v.GetChunk()
+
+ return nil
+}
+
+func (r *GetResponseBody) ToGRPCMessage() grpc.Message {
+ var m *object.GetResponse_Body
+
+ if r != nil {
+ m = new(object.GetResponse_Body)
+
+ switch v := r.GetObjectPart(); t := v.(type) {
+ case nil:
+ m.ObjectPart = nil
+ case *GetObjectPartInit:
+ m.SetInit(t.ToGRPCMessage().(*object.GetResponse_Body_Init))
+ case *GetObjectPartChunk:
+ m.SetChunk(t.ToGRPCMessage().(*object.GetResponse_Body_Chunk))
+ case *SplitInfo:
+ m.SetSplitInfo(t.ToGRPCMessage().(*object.SplitInfo))
+ case *ECInfo:
+ m.SetEcInfo(t.ToGRPCMessage().(*object.ECInfo))
+ default:
+ panic(fmt.Sprintf("unknown get object part %T", t))
+ }
+ }
+
+ return m
+}
+
+func (r *GetResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.GetResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ r.objPart = nil
+
+ switch pt := v.GetObjectPart().(type) {
+ case nil:
+ case *object.GetResponse_Body_Init_:
+ if pt != nil {
+ partInit := new(GetObjectPartInit)
+ r.objPart = partInit
+ err = partInit.FromGRPCMessage(pt.Init)
+ }
+ case *object.GetResponse_Body_Chunk:
+ if pt != nil {
+ partChunk := new(GetObjectPartChunk)
+ r.objPart = partChunk
+ err = partChunk.FromGRPCMessage(pt)
+ }
+ case *object.GetResponse_Body_SplitInfo:
+ if pt != nil {
+ partSplit := new(SplitInfo)
+ r.objPart = partSplit
+ err = partSplit.FromGRPCMessage(pt.SplitInfo)
+ }
+ case *object.GetResponse_Body_EcInfo:
+ if pt != nil {
+ partEC := new(ECInfo)
+ r.objPart = partEC
+ err = partEC.FromGRPCMessage(pt.EcInfo)
+ }
+ default:
+ err = fmt.Errorf("unknown get object part %T", pt)
+ }
+
+ return err
+}
+
+func (r *GetResponse) ToGRPCMessage() grpc.Message {
+ var m *object.GetResponse
+
+ if r != nil {
+ m = new(object.GetResponse)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.GetResponse_Body))
+ r.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *GetResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.GetResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(GetResponseBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.ResponseHeaders.FromMessage(v)
+}
+
+func (r *PutObjectPartInit) ToGRPCMessage() grpc.Message {
+ var m *object.PutRequest_Body_Init
+
+ if r != nil {
+ m = new(object.PutRequest_Body_Init)
+
+ m.SetObjectId(r.id.ToGRPCMessage().(*refsGRPC.ObjectID))
+ m.SetSignature(r.sig.ToGRPCMessage().(*refsGRPC.Signature))
+ m.SetHeader(r.hdr.ToGRPCMessage().(*object.Header))
+ m.SetCopiesNumber(r.copyNum)
+ }
+
+ return m
+}
+
+func (r *PutObjectPartInit) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.PutRequest_Body_Init)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ id := v.GetObjectId()
+ if id == nil {
+ r.id = nil
+ } else {
+ if r.id == nil {
+ r.id = new(refs.ObjectID)
+ }
+
+ err = r.id.FromGRPCMessage(id)
+ if err != nil {
+ return err
+ }
+ }
+
+ sig := v.GetSignature()
+ if sig == nil {
+ r.sig = nil
+ } else {
+ if r.sig == nil {
+ r.sig = new(refs.Signature)
+ }
+
+ err = r.sig.FromGRPCMessage(sig)
+ if err != nil {
+ return err
+ }
+ }
+
+ hdr := v.GetHeader()
+ if hdr == nil {
+ r.hdr = nil
+ } else {
+ if r.hdr == nil {
+ r.hdr = new(Header)
+ }
+
+ err = r.hdr.FromGRPCMessage(hdr)
+ if err != nil {
+ return err
+ }
+ }
+
+ r.copyNum = v.GetCopiesNumber()
+
+ return nil
+}
+
+func (r *PutObjectPartChunk) ToGRPCMessage() grpc.Message {
+ var m *object.PutRequest_Body_Chunk
+
+ if r != nil {
+ m = new(object.PutRequest_Body_Chunk)
+
+ m.SetChunk(r.chunk)
+ }
+
+ return m
+}
+
+func (r *PutObjectPartChunk) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.PutRequest_Body_Chunk)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ r.chunk = v.GetChunk()
+
+ return nil
+}
+
+func (r *PutRequestBody) ToGRPCMessage() grpc.Message {
+ var m *object.PutRequest_Body
+
+ if r != nil {
+ m = new(object.PutRequest_Body)
+
+ switch v := r.GetObjectPart(); t := v.(type) {
+ case nil:
+ m.ObjectPart = nil
+ case *PutObjectPartInit:
+ m.SetInit(t.ToGRPCMessage().(*object.PutRequest_Body_Init))
+ case *PutObjectPartChunk:
+ m.SetChunk(t.ToGRPCMessage().(*object.PutRequest_Body_Chunk))
+ default:
+ panic(fmt.Sprintf("unknown put object part %T", t))
+ }
+ }
+
+ return m
+}
+
+func (r *PutRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.PutRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ r.objPart = nil
+
+ switch pt := v.GetObjectPart().(type) {
+ case nil:
+ case *object.PutRequest_Body_Init_:
+ if pt != nil {
+ partInit := new(PutObjectPartInit)
+ r.objPart = partInit
+ err = partInit.FromGRPCMessage(pt.Init)
+ }
+ case *object.PutRequest_Body_Chunk:
+ if pt != nil {
+ partChunk := new(PutObjectPartChunk)
+ r.objPart = partChunk
+ err = partChunk.FromGRPCMessage(pt)
+ }
+ default:
+ err = fmt.Errorf("unknown put object part %T", pt)
+ }
+
+ return err
+}
+
+func (r *PutRequest) ToGRPCMessage() grpc.Message {
+ var m *object.PutRequest
+
+ if r != nil {
+ m = new(object.PutRequest)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.PutRequest_Body))
+ r.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *PutRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.PutRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(PutRequestBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.RequestHeaders.FromMessage(v)
+}
+
+func (r *PutResponseBody) ToGRPCMessage() grpc.Message {
+ var m *object.PutResponse_Body
+
+ if r != nil {
+ m = new(object.PutResponse_Body)
+
+ m.SetObjectId(r.id.ToGRPCMessage().(*refsGRPC.ObjectID))
+ }
+
+ return m
+}
+
+func (r *PutResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.PutResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ id := v.GetObjectId()
+ if id == nil {
+ r.id = nil
+ } else {
+ if r.id == nil {
+ r.id = new(refs.ObjectID)
+ }
+
+ err = r.id.FromGRPCMessage(id)
+ }
+
+ return err
+}
+
+func (r *PutResponse) ToGRPCMessage() grpc.Message {
+ var m *object.PutResponse
+
+ if r != nil {
+ m = new(object.PutResponse)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.PutResponse_Body))
+ r.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *PutResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.PutResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(PutResponseBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.ResponseHeaders.FromMessage(v)
+}
+
+func (r *DeleteRequestBody) ToGRPCMessage() grpc.Message {
+ var m *object.DeleteRequest_Body
+
+ if r != nil {
+ m = new(object.DeleteRequest_Body)
+
+ m.SetAddress(r.addr.ToGRPCMessage().(*refsGRPC.Address))
+ }
+
+ return m
+}
+
+func (r *DeleteRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.DeleteRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ addr := v.GetAddress()
+ if addr == nil {
+ r.addr = nil
+ } else {
+ if r.addr == nil {
+ r.addr = new(refs.Address)
+ }
+
+ err = r.addr.FromGRPCMessage(addr)
+ }
+
+ return err
+}
+
+func (r *DeleteRequest) ToGRPCMessage() grpc.Message {
+ var m *object.DeleteRequest
+
+ if r != nil {
+ m = new(object.DeleteRequest)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.DeleteRequest_Body))
+ r.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *DeleteRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.DeleteRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(DeleteRequestBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.RequestHeaders.FromMessage(v)
+}
+
+func (r *DeleteResponseBody) ToGRPCMessage() grpc.Message {
+ var m *object.DeleteResponse_Body
+
+ if r != nil {
+ m = new(object.DeleteResponse_Body)
+
+ m.SetTombstone(r.tombstone.ToGRPCMessage().(*refsGRPC.Address))
+ }
+
+ return m
+}
+
+func (r *DeleteResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.DeleteResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ tombstone := v.GetTombstone()
+ if tombstone == nil {
+ r.tombstone = nil
+ } else {
+ if r.tombstone == nil {
+ r.tombstone = new(refs.Address)
+ }
+
+ err = r.tombstone.FromGRPCMessage(tombstone)
+ }
+
+ return err
+}
+
+func (r *DeleteResponse) ToGRPCMessage() grpc.Message {
+ var m *object.DeleteResponse
+
+ if r != nil {
+ m = new(object.DeleteResponse)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.DeleteResponse_Body))
+ r.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *DeleteResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.DeleteResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(DeleteResponseBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.ResponseHeaders.FromMessage(v)
+}
+
+func (r *HeadRequestBody) ToGRPCMessage() grpc.Message {
+ var m *object.HeadRequest_Body
+
+ if r != nil {
+ m = new(object.HeadRequest_Body)
+
+ m.SetAddress(r.addr.ToGRPCMessage().(*refsGRPC.Address))
+ m.SetRaw(r.raw)
+ m.SetMainOnly(r.mainOnly)
+ }
+
+ return m
+}
+
+func (r *HeadRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.HeadRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ addr := v.GetAddress()
+ if addr == nil {
+ r.addr = nil
+ } else {
+ if r.addr == nil {
+ r.addr = new(refs.Address)
+ }
+
+ err = r.addr.FromGRPCMessage(addr)
+ if err != nil {
+ return err
+ }
+ }
+
+ r.raw = v.GetRaw()
+ r.mainOnly = v.GetMainOnly()
+
+ return nil
+}
+
+func (r *HeadRequest) ToGRPCMessage() grpc.Message {
+ var m *object.HeadRequest
+
+ if r != nil {
+ m = new(object.HeadRequest)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.HeadRequest_Body))
+ r.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *HeadRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.HeadRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(HeadRequestBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.RequestHeaders.FromMessage(v)
+}
+
+func (r *HeadResponseBody) ToGRPCMessage() grpc.Message {
+ var m *object.HeadResponse_Body
+
+ if r != nil {
+ m = new(object.HeadResponse_Body)
+
+ switch v := r.hdrPart.(type) {
+ case nil:
+ m.Head = nil
+ case *HeaderWithSignature:
+ m.SetHeader(v.ToGRPCMessage().(*object.HeaderWithSignature))
+ case *ShortHeader:
+ m.SetShortHeader(v.ToGRPCMessage().(*object.ShortHeader))
+ case *SplitInfo:
+ m.SetSplitInfo(v.ToGRPCMessage().(*object.SplitInfo))
+ case *ECInfo:
+ m.SetEcInfo(v.ToGRPCMessage().(*object.ECInfo))
+ default:
+ panic(fmt.Sprintf("unknown head part %T", v))
+ }
+ }
+
+ return m
+}
+
+func (r *HeadResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.HeadResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ r.hdrPart = nil
+
+ switch pt := v.GetHead().(type) {
+ case nil:
+ case *object.HeadResponse_Body_Header:
+ if pt != nil {
+ partHdr := new(HeaderWithSignature)
+ r.hdrPart = partHdr
+ err = partHdr.FromGRPCMessage(pt.Header)
+ }
+ case *object.HeadResponse_Body_ShortHeader:
+ if pt != nil {
+ partShort := new(ShortHeader)
+ r.hdrPart = partShort
+ err = partShort.FromGRPCMessage(pt.ShortHeader)
+ }
+ case *object.HeadResponse_Body_SplitInfo:
+ if pt != nil {
+ partSplit := new(SplitInfo)
+ r.hdrPart = partSplit
+ err = partSplit.FromGRPCMessage(pt.SplitInfo)
+ }
+ case *object.HeadResponse_Body_EcInfo:
+ if pt != nil {
+ partEC := new(ECInfo)
+ r.hdrPart = partEC
+ err = partEC.FromGRPCMessage(pt.EcInfo)
+ }
+ default:
+ err = fmt.Errorf("unknown head part %T", pt)
+ }
+
+ return err
+}
+
+func (r *HeadResponse) ToGRPCMessage() grpc.Message {
+ var m *object.HeadResponse
+
+ if r != nil {
+ m = new(object.HeadResponse)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.HeadResponse_Body))
+ r.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *HeadResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.HeadResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(HeadResponseBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.ResponseHeaders.FromMessage(v)
+}
+
+func (f *SearchFilter) ToGRPCMessage() grpc.Message {
+ var m *object.SearchRequest_Body_Filter
+
+ if f != nil {
+ m = new(object.SearchRequest_Body_Filter)
+
+ m.SetKey(f.key)
+ m.SetValue(f.val)
+ m.SetMatchType(MatchTypeToGRPCField(f.matchType))
+ }
+
+ return m
+}
+
+func (f *SearchFilter) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.SearchRequest_Body_Filter)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ f.key = v.GetKey()
+ f.val = v.GetValue()
+ f.matchType = MatchTypeFromGRPCField(v.GetMatchType())
+
+ return nil
+}
+
+func SearchFiltersToGRPC(fs []SearchFilter) (res []object.SearchRequest_Body_Filter) {
+ if fs != nil {
+ res = make([]object.SearchRequest_Body_Filter, 0, len(fs))
+
+ for i := range fs {
+ res = append(res, *fs[i].ToGRPCMessage().(*object.SearchRequest_Body_Filter))
+ }
+ }
+
+ return
+}
+
+func SearchFiltersFromGRPC(fs []object.SearchRequest_Body_Filter) (res []SearchFilter, err error) {
+ if fs != nil {
+ res = make([]SearchFilter, len(fs))
+
+ for i := range fs {
+ err = res[i].FromGRPCMessage(&fs[i])
+ if err != nil {
+ return
+ }
+ }
+ }
+
+ return
+}
+
+func (r *SearchRequestBody) ToGRPCMessage() grpc.Message {
+ var m *object.SearchRequest_Body
+
+ if r != nil {
+ m = new(object.SearchRequest_Body)
+
+ m.SetContainerId(r.cid.ToGRPCMessage().(*refsGRPC.ContainerID))
+ m.SetFilters(SearchFiltersToGRPC(r.filters))
+ m.SetVersion(r.version)
+ }
+
+ return m
+}
+
+func (r *SearchRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.SearchRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ cid := v.GetContainerId()
+ if cid == nil {
+ r.cid = nil
+ } else {
+ if r.cid == nil {
+ r.cid = new(refs.ContainerID)
+ }
+
+ err = r.cid.FromGRPCMessage(cid)
+ if err != nil {
+ return err
+ }
+ }
+
+ r.filters, err = SearchFiltersFromGRPC(v.GetFilters())
+ if err != nil {
+ return err
+ }
+
+ r.version = v.GetVersion()
+
+ return nil
+}
+
+func (r *SearchRequest) ToGRPCMessage() grpc.Message {
+ var m *object.SearchRequest
+
+ if r != nil {
+ m = new(object.SearchRequest)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.SearchRequest_Body))
+ r.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *SearchRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.SearchRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(SearchRequestBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.RequestHeaders.FromMessage(v)
+}
+
+func (r *SearchResponseBody) ToGRPCMessage() grpc.Message {
+ var m *object.SearchResponse_Body
+
+ if r != nil {
+ m = new(object.SearchResponse_Body)
+
+ m.SetIdList(refs.ObjectIDListToGRPCMessage(r.idList))
+ }
+
+ return m
+}
+
+func (r *SearchResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.SearchResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ r.idList, err = refs.ObjectIDListFromGRPCMessage(v.GetIdList())
+
+ return err
+}
+
+func (r *SearchResponse) ToGRPCMessage() grpc.Message {
+ var m *object.SearchResponse
+
+ if r != nil {
+ m = new(object.SearchResponse)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.SearchResponse_Body))
+ r.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *SearchResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.SearchResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(SearchResponseBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.ResponseHeaders.FromMessage(v)
+}
+
+func (r *Range) ToGRPCMessage() grpc.Message {
+ var m *object.Range
+
+ if r != nil {
+ m = new(object.Range)
+
+ m.SetLength(r.len)
+ m.SetOffset(r.off)
+ }
+
+ return m
+}
+
+func (r *Range) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.Range)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ r.len = v.GetLength()
+ r.off = v.GetOffset()
+
+ return nil
+}
+
+func RangesToGRPC(rs []Range) (res []object.Range) {
+ if rs != nil {
+ res = make([]object.Range, 0, len(rs))
+
+ for i := range rs {
+ res = append(res, *rs[i].ToGRPCMessage().(*object.Range))
+ }
+ }
+
+ return
+}
+
+func RangesFromGRPC(rs []object.Range) (res []Range, err error) {
+ if rs != nil {
+ res = make([]Range, len(rs))
+
+ for i := range rs {
+ err = res[i].FromGRPCMessage(&rs[i])
+ if err != nil {
+ return
+ }
+ }
+ }
+
+ return
+}
+
+func (r *GetRangeRequestBody) ToGRPCMessage() grpc.Message {
+ var m *object.GetRangeRequest_Body
+
+ if r != nil {
+ m = new(object.GetRangeRequest_Body)
+
+ m.SetAddress(r.addr.ToGRPCMessage().(*refsGRPC.Address))
+ m.SetRange(r.rng.ToGRPCMessage().(*object.Range))
+ m.SetRaw(r.raw)
+ }
+
+ return m
+}
+
+func (r *GetRangeRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.GetRangeRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ addr := v.GetAddress()
+ if addr == nil {
+ r.addr = nil
+ } else {
+ if r.addr == nil {
+ r.addr = new(refs.Address)
+ }
+
+ err = r.addr.FromGRPCMessage(addr)
+ if err != nil {
+ return err
+ }
+ }
+
+ rng := v.GetRange()
+ if rng == nil {
+ r.rng = nil
+ } else {
+ if r.rng == nil {
+ r.rng = new(Range)
+ }
+
+ err = r.rng.FromGRPCMessage(rng)
+ if err != nil {
+ return err
+ }
+ }
+
+ r.raw = v.GetRaw()
+
+ return nil
+}
+
+func (r *GetRangeRequest) ToGRPCMessage() grpc.Message {
+ var m *object.GetRangeRequest
+
+ if r != nil {
+ m = new(object.GetRangeRequest)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.GetRangeRequest_Body))
+ r.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *GetRangeRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.GetRangeRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(GetRangeRequestBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.RequestHeaders.FromMessage(v)
+}
+
+func (r *GetRangePartChunk) ToGRPCMessage() grpc.Message {
+ var m *object.GetRangeResponse_Body_Chunk
+
+ if r != nil {
+ m = new(object.GetRangeResponse_Body_Chunk)
+
+ m.SetChunk(r.chunk)
+ }
+
+ return m
+}
+
+func (r *GetRangePartChunk) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.GetRangeResponse_Body_Chunk)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ r.chunk = v.GetChunk()
+
+ return nil
+}
+
+func (r *GetRangeResponseBody) ToGRPCMessage() grpc.Message {
+ var m *object.GetRangeResponse_Body
+
+ if r != nil {
+ m = new(object.GetRangeResponse_Body)
+
+ switch v := r.rngPart.(type) {
+ case nil:
+ m.RangePart = nil
+ case *GetRangePartChunk:
+ m.SetChunk(v.ToGRPCMessage().(*object.GetRangeResponse_Body_Chunk))
+ case *SplitInfo:
+ m.SetSplitInfo(v.ToGRPCMessage().(*object.SplitInfo))
+ case *ECInfo:
+ m.SetEcInfo(v.ToGRPCMessage().(*object.ECInfo))
+ default:
+ panic(fmt.Sprintf("unknown get range part %T", v))
+ }
+ }
+
+ return m
+}
+
+func (r *GetRangeResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.GetRangeResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ r.rngPart = nil
+
+ switch pt := v.GetRangePart().(type) {
+ case nil:
+ case *object.GetRangeResponse_Body_Chunk:
+ if pt != nil {
+ partChunk := new(GetRangePartChunk)
+ r.rngPart = partChunk
+ err = partChunk.FromGRPCMessage(pt)
+ }
+ case *object.GetRangeResponse_Body_SplitInfo:
+ if pt != nil {
+ partSplit := new(SplitInfo)
+ r.rngPart = partSplit
+ err = partSplit.FromGRPCMessage(pt.SplitInfo)
+ }
+ case *object.GetRangeResponse_Body_EcInfo:
+ if pt != nil {
+ partEC := new(ECInfo)
+ r.rngPart = partEC
+ err = partEC.FromGRPCMessage(pt.EcInfo)
+ }
+ default:
+ err = fmt.Errorf("unknown get range part %T", pt)
+ }
+
+ return err
+}
+
+func (r *GetRangeResponse) ToGRPCMessage() grpc.Message {
+ var m *object.GetRangeResponse
+
+ if r != nil {
+ m = new(object.GetRangeResponse)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.GetRangeResponse_Body))
+ r.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *GetRangeResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.GetRangeResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(GetRangeResponseBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.ResponseHeaders.FromMessage(v)
+}
+
+func (r *GetRangeHashRequestBody) ToGRPCMessage() grpc.Message {
+ var m *object.GetRangeHashRequest_Body
+
+ if r != nil {
+ m = new(object.GetRangeHashRequest_Body)
+
+ m.SetAddress(r.addr.ToGRPCMessage().(*refsGRPC.Address))
+ m.SetRanges(RangesToGRPC(r.rngs))
+ m.SetType(refs.ChecksumTypeToGRPC(r.typ))
+ m.SetSalt(r.salt)
+ }
+
+ return m
+}
+
+func (r *GetRangeHashRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.GetRangeHashRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ addr := v.GetAddress()
+ if addr == nil {
+ r.addr = nil
+ } else {
+ if r.addr == nil {
+ r.addr = new(refs.Address)
+ }
+
+ err = r.addr.FromGRPCMessage(addr)
+ if err != nil {
+ return err
+ }
+ }
+
+ r.rngs, err = RangesFromGRPC(v.GetRanges())
+ if err != nil {
+ return err
+ }
+
+ r.typ = refs.ChecksumTypeFromGRPC(v.GetType())
+ r.salt = v.GetSalt()
+
+ return nil
+}
+
+func (r *GetRangeHashRequest) ToGRPCMessage() grpc.Message {
+ var m *object.GetRangeHashRequest
+
+ if r != nil {
+ m = new(object.GetRangeHashRequest)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.GetRangeHashRequest_Body))
+ r.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *GetRangeHashRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.GetRangeHashRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(GetRangeHashRequestBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.RequestHeaders.FromMessage(v)
+}
+
+func (r *GetRangeHashResponseBody) ToGRPCMessage() grpc.Message {
+ var m *object.GetRangeHashResponse_Body
+
+ if r != nil {
+ m = new(object.GetRangeHashResponse_Body)
+
+ m.SetType(refs.ChecksumTypeToGRPC(r.typ))
+ m.SetHashList(r.hashList)
+ }
+
+ return m
+}
+
+func (r *GetRangeHashResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.GetRangeHashResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ r.typ = refs.ChecksumTypeFromGRPC(v.GetType())
+ r.hashList = v.GetHashList()
+
+ return nil
+}
+
+func (r *GetRangeHashResponse) ToGRPCMessage() grpc.Message {
+ var m *object.GetRangeHashResponse
+
+ if r != nil {
+ m = new(object.GetRangeHashResponse)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.GetRangeHashResponse_Body))
+ r.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *GetRangeHashResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.GetRangeHashResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(GetRangeHashResponseBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.ResponseHeaders.FromMessage(v)
+}
+
+func (r *PutSingleRequestBody) ToGRPCMessage() grpc.Message {
+ var m *object.PutSingleRequest_Body
+
+ if r != nil {
+ m = new(object.PutSingleRequest_Body)
+ m.SetObject(r.GetObject().ToGRPCMessage().(*object.Object))
+ m.SetCopiesNumber(r.GetCopiesNumber())
+ }
+
+ return m
+}
+
+func (r *PutSingleRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.PutSingleRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ if v.GetObject() == nil {
+ r.object = nil
+ } else {
+ if r.object == nil {
+ r.object = new(Object)
+ }
+
+ err := r.object.FromGRPCMessage(v.GetObject())
+ if err != nil {
+ return err
+ }
+ }
+
+ r.copyNum = v.GetCopiesNumber()
+
+ return nil
+}
+
+func (r *PutSingleRequest) ToGRPCMessage() grpc.Message {
+ var m *object.PutSingleRequest
+
+ if r != nil {
+ m = new(object.PutSingleRequest)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.PutSingleRequest_Body))
+ r.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *PutSingleRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.PutSingleRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(PutSingleRequestBody)
+ }
+
+ err := r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.RequestHeaders.FromMessage(v)
+}
+
+func (r *PutSingleResponseBody) ToGRPCMessage() grpc.Message {
+ var b *object.PutSingleResponse_Body
+ if r != nil {
+ b = new(object.PutSingleResponse_Body)
+ }
+ return b
+}
+
+func (r *PutSingleResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.PutSingleResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ return nil
+}
+
+func (r *PutSingleResponse) ToGRPCMessage() grpc.Message {
+ var m *object.PutSingleResponse
+
+ if r != nil {
+ m = new(object.PutSingleResponse)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.PutSingleResponse_Body))
+ r.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *PutSingleResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.PutSingleResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(PutSingleResponseBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.ResponseHeaders.FromMessage(v)
+}
+
+func (r *PatchRequestBodyPatch) ToGRPCMessage() grpc.Message {
+ var m *object.PatchRequest_Body_Patch
+
+ if r != nil {
+ m = new(object.PatchRequest_Body_Patch)
+
+ m.SetSourceRange(r.GetRange().ToGRPCMessage().(*object.Range))
+ m.SetChunk(r.GetChunk())
+ }
+
+ return m
+}
+
+func (r *PatchRequestBodyPatch) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.PatchRequest_Body_Patch)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ srcRange := v.GetSourceRange()
+ if srcRange == nil {
+ r.Range = nil
+ } else {
+ if r.Range == nil {
+ r.Range = new(Range)
+ }
+
+ err = r.Range.FromGRPCMessage(srcRange)
+ if err != nil {
+ return err
+ }
+ }
+
+ r.Chunk = v.GetChunk()
+
+ return nil
+}
+
+func (r *PatchRequestBody) ToGRPCMessage() grpc.Message {
+ var m *object.PatchRequest_Body
+
+ if r != nil {
+ m = new(object.PatchRequest_Body)
+
+ m.SetAddress(r.address.ToGRPCMessage().(*refsGRPC.Address))
+ m.SetNewAttributes(AttributesToGRPC(r.newAttributes))
+ m.SetReplaceAttributes(r.replaceAttributes)
+ m.SetPatch(r.patch.ToGRPCMessage().(*object.PatchRequest_Body_Patch))
+ }
+
+ return m
+}
+
+func (r *PatchRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.PatchRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ addr := v.GetAddress()
+ if addr == nil {
+ r.address = nil
+ } else {
+ if r.address == nil {
+ r.address = new(refs.Address)
+ }
+
+ err = r.address.FromGRPCMessage(addr)
+ if err != nil {
+ return err
+ }
+ }
+
+ r.newAttributes, err = AttributesFromGRPC(v.GetNewAttributes())
+ if err != nil {
+ return err
+ }
+
+ r.replaceAttributes = v.GetReplaceAttributes()
+
+ patch := v.GetPatch()
+ if patch == nil {
+ r.patch = nil
+ } else {
+ if r.patch == nil {
+ r.patch = new(PatchRequestBodyPatch)
+ }
+
+ err = r.patch.FromGRPCMessage(patch)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func (r *PatchRequest) ToGRPCMessage() grpc.Message {
+ var m *object.PatchRequest
+
+ if r != nil {
+ m = new(object.PatchRequest)
+
+ m.SetBody(r.body.ToGRPCMessage().(*object.PatchRequest_Body))
+ r.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *PatchRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.PatchRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.body = nil
+ } else {
+ if r.body == nil {
+ r.body = new(PatchRequestBody)
+ }
+
+ err = r.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.RequestHeaders.FromMessage(v)
+}
+
+func (r *PatchResponseBody) ToGRPCMessage() grpc.Message {
+ var m *object.PatchResponse_Body
+
+ if r != nil {
+ m = new(object.PatchResponse_Body)
+
+ m.SetObjectId(r.ObjectID.ToGRPCMessage().(*refsGRPC.ObjectID))
+ }
+
+ return m
+}
+
+func (r *PatchResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.PatchResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ objID := v.GetObjectId()
+ if objID == nil {
+ r.ObjectID = nil
+ } else {
+ if r.ObjectID == nil {
+ r.ObjectID = new(refs.ObjectID)
+ }
+
+ err = r.ObjectID.FromGRPCMessage(objID)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func (r *PatchResponse) ToGRPCMessage() grpc.Message {
+ var m *object.PatchResponse
+
+ if r != nil {
+ m = new(object.PatchResponse)
+
+ m.SetBody(r.Body.ToGRPCMessage().(*object.PatchResponse_Body))
+ r.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (r *PatchResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*object.PatchResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ r.Body = nil
+ } else {
+ if r.Body == nil {
+ r.Body = new(PatchResponseBody)
+ }
+
+ err = r.Body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return r.ResponseHeaders.FromMessage(v)
+}
diff --git a/api/object/filters.go b/api/object/filters.go
new file mode 100644
index 0000000..9fe024d
--- /dev/null
+++ b/api/object/filters.go
@@ -0,0 +1,58 @@
+package object
+
+// ReservedFilterPrefix is a prefix of key to object header value or property.
+const ReservedFilterPrefix = "$Object:"
+
+const (
+ // FilterHeaderVersion is a filter key to "version" field of the object header.
+ FilterHeaderVersion = ReservedFilterPrefix + "version"
+
+ // FilterHeaderObjectID is a filter key to "object_id" field of the object.
+ FilterHeaderObjectID = ReservedFilterPrefix + "objectID"
+
+ // FilterHeaderContainerID is a filter key to "container_id" field of the object header.
+ FilterHeaderContainerID = ReservedFilterPrefix + "containerID"
+
+ // FilterHeaderOwnerID is a filter key to "owner_id" field of the object header.
+ FilterHeaderOwnerID = ReservedFilterPrefix + "ownerID"
+
+ // FilterHeaderCreationEpoch is a filter key to "creation_epoch" field of the object header.
+ FilterHeaderCreationEpoch = ReservedFilterPrefix + "creationEpoch"
+
+ // FilterHeaderPayloadLength is a filter key to "payload_length" field of the object header.
+ FilterHeaderPayloadLength = ReservedFilterPrefix + "payloadLength"
+
+ // FilterHeaderPayloadHash is a filter key to "payload_hash" field of the object header.
+ FilterHeaderPayloadHash = ReservedFilterPrefix + "payloadHash"
+
+ // FilterHeaderObjectType is a filter key to "object_type" field of the object header.
+ FilterHeaderObjectType = ReservedFilterPrefix + "objectType"
+
+ // FilterHeaderHomomorphicHash is a filter key to "homomorphic_hash" field of the object header.
+ FilterHeaderHomomorphicHash = ReservedFilterPrefix + "homomorphicHash"
+
+ // FilterHeaderParent is a filter key to "split.parent" field of the object header.
+ FilterHeaderParent = ReservedFilterPrefix + "split.parent"
+
+ // FilterHeaderSplitID is a filter key to "split.splitID" field of the object header.
+ FilterHeaderSplitID = ReservedFilterPrefix + "split.splitID"
+
+ // FilterHeaderECParent is a filter key to "ec.parent" field of the object header.
+ FilterHeaderECParent = ReservedFilterPrefix + "ec.parent"
+)
+
+const (
+ // FilterPropertyRoot is a filter key to check if regular object is on top of split hierarchy.
+ FilterPropertyRoot = ReservedFilterPrefix + "ROOT"
+
+ // FilterPropertyPhy is a filter key to check if an object physically stored on a node.
+ FilterPropertyPhy = ReservedFilterPrefix + "PHY"
+)
+
+const (
+ // BooleanPropertyValueTrue is a true value for boolean property filters.
+ BooleanPropertyValueTrue = "true"
+
+ // BooleanPropertyValueFalse is a false value for boolean property filters.
+ BooleanPropertyValueFalse = ""
+)
diff --git a/api/object/grpc/service_frostfs.pb.go b/api/object/grpc/service_frostfs.pb.go
new file mode 100644
index 0000000..a195f86
--- /dev/null
+++ b/api/object/grpc/service_frostfs.pb.go
@@ -0,0 +1,9389 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package object
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ grpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ grpc1 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/grpc"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+ strconv "strconv"
+)
+
+type GetRequest_Body struct {
+ Address *grpc.Address `json:"address"`
+ Raw bool `json:"raw"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetRequest_Body)(nil)
+ _ json.Marshaler = (*GetRequest_Body)(nil)
+ _ json.Unmarshaler = (*GetRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Address)
+ size += proto.BoolSize(2, x.Raw)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Address != nil {
+ x.Address.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Raw {
+ mm.AppendBool(2, x.Raw)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Address
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Address")
+ }
+ x.Address = new(grpc.Address)
+ if err := x.Address.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Raw
+ data, ok := fc.Bool()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Raw")
+ }
+ x.Raw = data
+ }
+ }
+ return nil
+}
+func (x *GetRequest_Body) GetAddress() *grpc.Address {
+ if x != nil {
+ return x.Address
+ }
+ return nil
+}
+func (x *GetRequest_Body) SetAddress(v *grpc.Address) {
+ x.Address = v
+}
+func (x *GetRequest_Body) GetRaw() bool {
+ if x != nil {
+ return x.Raw
+ }
+ return false
+}
+func (x *GetRequest_Body) SetRaw(v bool) {
+ x.Raw = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"address\":"
+ out.RawString(prefix)
+ x.Address.MarshalEasyJSON(out)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"raw\":"
+ out.RawString(prefix)
+ out.Bool(x.Raw)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "address":
+ {
+ var f *grpc.Address
+ f = new(grpc.Address)
+ f.UnmarshalEasyJSON(in)
+ x.Address = f
+ }
+ case "raw":
+ {
+ var f bool
+ f = in.Bool()
+ x.Raw = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type GetRequest struct {
+ Body *GetRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetRequest)(nil)
+ _ json.Marshaler = (*GetRequest)(nil)
+ _ json.Unmarshaler = (*GetRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *GetRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *GetRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(GetRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *GetRequest) GetBody() *GetRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *GetRequest) SetBody(v *GetRequest_Body) {
+ x.Body = v
+}
+func (x *GetRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *GetRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *GetRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *GetRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *GetRequest_Body
+ f = new(GetRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type GetResponse_Body_Init struct {
+ ObjectId *grpc.ObjectID `json:"objectId"`
+ Signature *grpc.Signature `json:"signature"`
+ Header *Header `json:"header"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetResponse_Body_Init)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetResponse_Body_Init)(nil)
+ _ json.Marshaler = (*GetResponse_Body_Init)(nil)
+ _ json.Unmarshaler = (*GetResponse_Body_Init)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetResponse_Body_Init) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.ObjectId)
+ size += proto.NestedStructureSize(2, x.Signature)
+ size += proto.NestedStructureSize(3, x.Header)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetResponse_Body_Init) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetResponse_Body_Init) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.ObjectId != nil {
+ x.ObjectId.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Signature != nil {
+ x.Signature.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.Header != nil {
+ x.Header.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetResponse_Body_Init) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetResponse_Body_Init")
+ }
+ switch fc.FieldNum {
+ case 1: // ObjectId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ObjectId")
+ }
+ x.ObjectId = new(grpc.ObjectID)
+ if err := x.ObjectId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Signature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Signature")
+ }
+ x.Signature = new(grpc.Signature)
+ if err := x.Signature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // Header
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Header")
+ }
+ x.Header = new(Header)
+ if err := x.Header.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *GetResponse_Body_Init) GetObjectId() *grpc.ObjectID {
+ if x != nil {
+ return x.ObjectId
+ }
+ return nil
+}
+func (x *GetResponse_Body_Init) SetObjectId(v *grpc.ObjectID) {
+ x.ObjectId = v
+}
+func (x *GetResponse_Body_Init) GetSignature() *grpc.Signature {
+ if x != nil {
+ return x.Signature
+ }
+ return nil
+}
+func (x *GetResponse_Body_Init) SetSignature(v *grpc.Signature) {
+ x.Signature = v
+}
+func (x *GetResponse_Body_Init) GetHeader() *Header {
+ if x != nil {
+ return x.Header
+ }
+ return nil
+}
+func (x *GetResponse_Body_Init) SetHeader(v *Header) {
+ x.Header = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetResponse_Body_Init) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetResponse_Body_Init) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"objectId\":"
+ out.RawString(prefix)
+ x.ObjectId.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"header\":"
+ out.RawString(prefix)
+ x.Header.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetResponse_Body_Init) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetResponse_Body_Init) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "objectId":
+ {
+ var f *grpc.ObjectID
+ f = new(grpc.ObjectID)
+ f.UnmarshalEasyJSON(in)
+ x.ObjectId = f
+ }
+ case "signature":
+ {
+ var f *grpc.Signature
+ f = new(grpc.Signature)
+ f.UnmarshalEasyJSON(in)
+ x.Signature = f
+ }
+ case "header":
+ {
+ var f *Header
+ f = new(Header)
+ f.UnmarshalEasyJSON(in)
+ x.Header = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type GetResponse_Body struct {
+ ObjectPart isGetResponse_Body_ObjectPart
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetResponse_Body)(nil)
+ _ json.Marshaler = (*GetResponse_Body)(nil)
+ _ json.Unmarshaler = (*GetResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ if inner, ok := x.ObjectPart.(*GetResponse_Body_Init_); ok {
+ size += proto.NestedStructureSize(1, inner.Init)
+ }
+ if inner, ok := x.ObjectPart.(*GetResponse_Body_Chunk); ok {
+ size += proto.BytesSize(2, inner.Chunk)
+ }
+ if inner, ok := x.ObjectPart.(*GetResponse_Body_SplitInfo); ok {
+ size += proto.NestedStructureSize(3, inner.SplitInfo)
+ }
+ if inner, ok := x.ObjectPart.(*GetResponse_Body_EcInfo); ok {
+ size += proto.NestedStructureSize(4, inner.EcInfo)
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if inner, ok := x.ObjectPart.(*GetResponse_Body_Init_); ok {
+ if inner.Init != nil {
+ inner.Init.EmitProtobuf(mm.AppendMessage(1))
+ }
+ }
+ if inner, ok := x.ObjectPart.(*GetResponse_Body_Chunk); ok {
+ if len(inner.Chunk) != 0 {
+ mm.AppendBytes(2, inner.Chunk)
+ }
+ }
+ if inner, ok := x.ObjectPart.(*GetResponse_Body_SplitInfo); ok {
+ if inner.SplitInfo != nil {
+ inner.SplitInfo.EmitProtobuf(mm.AppendMessage(3))
+ }
+ }
+ if inner, ok := x.ObjectPart.(*GetResponse_Body_EcInfo); ok {
+ if inner.EcInfo != nil {
+ inner.EcInfo.EmitProtobuf(mm.AppendMessage(4))
+ }
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Init
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Init")
+ }
+ oneofField := &GetResponse_Body_Init_{Init: new(GetResponse_Body_Init)}
+ if err := oneofField.Init.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ x.ObjectPart = oneofField
+ case 2: // Chunk
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Chunk")
+ }
+ x.ObjectPart = &GetResponse_Body_Chunk{Chunk: data}
+ case 3: // SplitInfo
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "SplitInfo")
+ }
+ oneofField := &GetResponse_Body_SplitInfo{SplitInfo: new(SplitInfo)}
+ if err := oneofField.SplitInfo.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ x.ObjectPart = oneofField
+ case 4: // EcInfo
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "EcInfo")
+ }
+ oneofField := &GetResponse_Body_EcInfo{EcInfo: new(ECInfo)}
+ if err := oneofField.EcInfo.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ x.ObjectPart = oneofField
+ }
+ }
+ return nil
+}
+func (x *GetResponse_Body) GetObjectPart() isGetResponse_Body_ObjectPart {
+ if x != nil {
+ return x.ObjectPart
+ }
+ return nil
+}
+func (x *GetResponse_Body) SetObjectPart(v isGetResponse_Body_ObjectPart) {
+ x.ObjectPart = v
+}
+func (x *GetResponse_Body) GetInit() *GetResponse_Body_Init {
+ if xx, ok := x.GetObjectPart().(*GetResponse_Body_Init_); ok {
+ return xx.Init
+ }
+ return nil
+}
+func (x *GetResponse_Body) SetInit(v *GetResponse_Body_Init) {
+ x.ObjectPart = &GetResponse_Body_Init_{Init: v}
+}
+func (x *GetResponse_Body) GetChunk() []byte {
+ if xx, ok := x.GetObjectPart().(*GetResponse_Body_Chunk); ok {
+ return xx.Chunk
+ }
+ return nil
+}
+func (x *GetResponse_Body) SetChunk(v *GetResponse_Body_Chunk) {
+ x.ObjectPart = v
+}
+func (x *GetResponse_Body_Chunk) GetChunk() []byte {
+ if x != nil {
+ return x.Chunk
+ }
+ return nil
+}
+func (x *GetResponse_Body_Chunk) SetChunk(v []byte) {
+ x.Chunk = v
+}
+func (x *GetResponse_Body) GetSplitInfo() *SplitInfo {
+ if xx, ok := x.GetObjectPart().(*GetResponse_Body_SplitInfo); ok {
+ return xx.SplitInfo
+ }
+ return nil
+}
+func (x *GetResponse_Body) SetSplitInfo(v *SplitInfo) {
+ x.ObjectPart = &GetResponse_Body_SplitInfo{SplitInfo: v}
+}
+func (x *GetResponse_Body) GetEcInfo() *ECInfo {
+ if xx, ok := x.GetObjectPart().(*GetResponse_Body_EcInfo); ok {
+ return xx.EcInfo
+ }
+ return nil
+}
+func (x *GetResponse_Body) SetEcInfo(v *ECInfo) {
+ x.ObjectPart = &GetResponse_Body_EcInfo{EcInfo: v}
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ switch xx := x.ObjectPart.(type) {
+ case *GetResponse_Body_Init_:
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"init\":"
+ out.RawString(prefix)
+ xx.Init.MarshalEasyJSON(out)
+ }
+ case *GetResponse_Body_Chunk:
+ {
+ 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 !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"splitInfo\":"
+ out.RawString(prefix)
+ xx.SplitInfo.MarshalEasyJSON(out)
+ }
+ case *GetResponse_Body_EcInfo:
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"ecInfo\":"
+ out.RawString(prefix)
+ xx.EcInfo.MarshalEasyJSON(out)
+ }
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "init":
+ xx := new(GetResponse_Body_Init_)
+ x.ObjectPart = xx
+ {
+ var f *GetResponse_Body_Init
+ f = new(GetResponse_Body_Init)
+ f.UnmarshalEasyJSON(in)
+ xx.Init = f
+ }
+ case "chunk":
+ xx := new(GetResponse_Body_Chunk)
+ x.ObjectPart = xx
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ xx.Chunk = f
+ }
+ case "splitInfo":
+ xx := new(GetResponse_Body_SplitInfo)
+ x.ObjectPart = xx
+ {
+ var f *SplitInfo
+ f = new(SplitInfo)
+ f.UnmarshalEasyJSON(in)
+ xx.SplitInfo = f
+ }
+ case "ecInfo":
+ xx := new(GetResponse_Body_EcInfo)
+ x.ObjectPart = xx
+ {
+ var f *ECInfo
+ f = new(ECInfo)
+ f.UnmarshalEasyJSON(in)
+ xx.EcInfo = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type isGetResponse_Body_ObjectPart interface {
+ isGetResponse_Body_ObjectPart()
+}
+
+type GetResponse_Body_Init_ struct {
+ Init *GetResponse_Body_Init
+}
+
+type GetResponse_Body_Chunk struct {
+ Chunk []byte
+}
+
+type GetResponse_Body_SplitInfo struct {
+ SplitInfo *SplitInfo
+}
+
+type GetResponse_Body_EcInfo struct {
+ EcInfo *ECInfo
+}
+
+func (*GetResponse_Body_Init_) isGetResponse_Body_ObjectPart() {}
+
+func (*GetResponse_Body_Chunk) isGetResponse_Body_ObjectPart() {}
+
+func (*GetResponse_Body_SplitInfo) isGetResponse_Body_ObjectPart() {}
+
+func (*GetResponse_Body_EcInfo) isGetResponse_Body_ObjectPart() {}
+
+type GetResponse struct {
+ Body *GetResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetResponse)(nil)
+ _ json.Marshaler = (*GetResponse)(nil)
+ _ json.Unmarshaler = (*GetResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *GetResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *GetResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(GetResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *GetResponse) GetBody() *GetResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *GetResponse) SetBody(v *GetResponse_Body) {
+ x.Body = v
+}
+func (x *GetResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *GetResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *GetResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *GetResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *GetResponse_Body
+ f = new(GetResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PutRequest_Body_Init struct {
+ ObjectId *grpc.ObjectID `json:"objectId"`
+ Signature *grpc.Signature `json:"signature"`
+ Header *Header `json:"header"`
+ CopiesNumber []uint32 `json:"copiesNumber"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PutRequest_Body_Init)(nil)
+ _ encoding.ProtoUnmarshaler = (*PutRequest_Body_Init)(nil)
+ _ json.Marshaler = (*PutRequest_Body_Init)(nil)
+ _ json.Unmarshaler = (*PutRequest_Body_Init)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PutRequest_Body_Init) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ var n int
+ size += proto.NestedStructureSize(1, x.ObjectId)
+ size += proto.NestedStructureSize(2, x.Signature)
+ size += proto.NestedStructureSize(3, x.Header)
+ n, _ = proto.RepeatedUInt32Size(4, x.CopiesNumber)
+ size += n
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PutRequest_Body_Init) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PutRequest_Body_Init) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.ObjectId != nil {
+ x.ObjectId.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Signature != nil {
+ x.Signature.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.Header != nil {
+ x.Header.EmitProtobuf(mm.AppendMessage(3))
+ }
+ if len(x.CopiesNumber) != 0 {
+ mm.AppendUint32s(4, x.CopiesNumber)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PutRequest_Body_Init) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PutRequest_Body_Init")
+ }
+ switch fc.FieldNum {
+ case 1: // ObjectId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ObjectId")
+ }
+ x.ObjectId = new(grpc.ObjectID)
+ if err := x.ObjectId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Signature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Signature")
+ }
+ x.Signature = new(grpc.Signature)
+ if err := x.Signature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // Header
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Header")
+ }
+ x.Header = new(Header)
+ if err := x.Header.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 4: // CopiesNumber
+ data, ok := fc.UnpackUint32s(nil)
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "CopiesNumber")
+ }
+ x.CopiesNumber = data
+ }
+ }
+ return nil
+}
+func (x *PutRequest_Body_Init) GetObjectId() *grpc.ObjectID {
+ if x != nil {
+ return x.ObjectId
+ }
+ return nil
+}
+func (x *PutRequest_Body_Init) SetObjectId(v *grpc.ObjectID) {
+ x.ObjectId = v
+}
+func (x *PutRequest_Body_Init) GetSignature() *grpc.Signature {
+ if x != nil {
+ return x.Signature
+ }
+ return nil
+}
+func (x *PutRequest_Body_Init) SetSignature(v *grpc.Signature) {
+ x.Signature = v
+}
+func (x *PutRequest_Body_Init) GetHeader() *Header {
+ if x != nil {
+ return x.Header
+ }
+ return nil
+}
+func (x *PutRequest_Body_Init) SetHeader(v *Header) {
+ x.Header = v
+}
+func (x *PutRequest_Body_Init) GetCopiesNumber() []uint32 {
+ if x != nil {
+ return x.CopiesNumber
+ }
+ return nil
+}
+func (x *PutRequest_Body_Init) SetCopiesNumber(v []uint32) {
+ x.CopiesNumber = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PutRequest_Body_Init) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PutRequest_Body_Init) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"objectId\":"
+ out.RawString(prefix)
+ x.ObjectId.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"header\":"
+ out.RawString(prefix)
+ x.Header.MarshalEasyJSON(out)
+ }
+ {
+ 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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PutRequest_Body_Init) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PutRequest_Body_Init) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "objectId":
+ {
+ var f *grpc.ObjectID
+ f = new(grpc.ObjectID)
+ f.UnmarshalEasyJSON(in)
+ x.ObjectId = f
+ }
+ case "signature":
+ {
+ var f *grpc.Signature
+ f = new(grpc.Signature)
+ f.UnmarshalEasyJSON(in)
+ x.Signature = f
+ }
+ case "header":
+ {
+ var f *Header
+ f = new(Header)
+ f.UnmarshalEasyJSON(in)
+ x.Header = f
+ }
+ case "copiesNumber":
+ {
+ var f uint32
+ var list []uint32
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.CopiesNumber = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PutRequest_Body struct {
+ ObjectPart isPutRequest_Body_ObjectPart
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PutRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*PutRequest_Body)(nil)
+ _ json.Marshaler = (*PutRequest_Body)(nil)
+ _ json.Unmarshaler = (*PutRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PutRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ if inner, ok := x.ObjectPart.(*PutRequest_Body_Init_); ok {
+ size += proto.NestedStructureSize(1, inner.Init)
+ }
+ if inner, ok := x.ObjectPart.(*PutRequest_Body_Chunk); ok {
+ size += proto.BytesSize(2, inner.Chunk)
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PutRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PutRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if inner, ok := x.ObjectPart.(*PutRequest_Body_Init_); ok {
+ if inner.Init != nil {
+ inner.Init.EmitProtobuf(mm.AppendMessage(1))
+ }
+ }
+ if inner, ok := x.ObjectPart.(*PutRequest_Body_Chunk); ok {
+ if len(inner.Chunk) != 0 {
+ mm.AppendBytes(2, inner.Chunk)
+ }
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PutRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PutRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Init
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Init")
+ }
+ oneofField := &PutRequest_Body_Init_{Init: new(PutRequest_Body_Init)}
+ if err := oneofField.Init.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ x.ObjectPart = oneofField
+ case 2: // Chunk
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Chunk")
+ }
+ x.ObjectPart = &PutRequest_Body_Chunk{Chunk: data}
+ }
+ }
+ return nil
+}
+func (x *PutRequest_Body) GetObjectPart() isPutRequest_Body_ObjectPart {
+ if x != nil {
+ return x.ObjectPart
+ }
+ return nil
+}
+func (x *PutRequest_Body) SetObjectPart(v isPutRequest_Body_ObjectPart) {
+ x.ObjectPart = v
+}
+func (x *PutRequest_Body) GetInit() *PutRequest_Body_Init {
+ if xx, ok := x.GetObjectPart().(*PutRequest_Body_Init_); ok {
+ return xx.Init
+ }
+ return nil
+}
+func (x *PutRequest_Body) SetInit(v *PutRequest_Body_Init) {
+ x.ObjectPart = &PutRequest_Body_Init_{Init: v}
+}
+func (x *PutRequest_Body) GetChunk() []byte {
+ if xx, ok := x.GetObjectPart().(*PutRequest_Body_Chunk); ok {
+ return xx.Chunk
+ }
+ return nil
+}
+func (x *PutRequest_Body) SetChunk(v *PutRequest_Body_Chunk) {
+ x.ObjectPart = v
+}
+func (x *PutRequest_Body_Chunk) GetChunk() []byte {
+ if x != nil {
+ return x.Chunk
+ }
+ return nil
+}
+func (x *PutRequest_Body_Chunk) SetChunk(v []byte) {
+ x.Chunk = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PutRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PutRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ switch xx := x.ObjectPart.(type) {
+ case *PutRequest_Body_Init_:
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"init\":"
+ out.RawString(prefix)
+ xx.Init.MarshalEasyJSON(out)
+ }
+ case *PutRequest_Body_Chunk:
+ {
+ 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("")
+ }
+ }
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PutRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PutRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "init":
+ xx := new(PutRequest_Body_Init_)
+ x.ObjectPart = xx
+ {
+ var f *PutRequest_Body_Init
+ f = new(PutRequest_Body_Init)
+ f.UnmarshalEasyJSON(in)
+ xx.Init = f
+ }
+ case "chunk":
+ xx := new(PutRequest_Body_Chunk)
+ x.ObjectPart = xx
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ xx.Chunk = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type isPutRequest_Body_ObjectPart interface {
+ isPutRequest_Body_ObjectPart()
+}
+
+type PutRequest_Body_Init_ struct {
+ Init *PutRequest_Body_Init
+}
+
+type PutRequest_Body_Chunk struct {
+ Chunk []byte
+}
+
+func (*PutRequest_Body_Init_) isPutRequest_Body_ObjectPart() {}
+
+func (*PutRequest_Body_Chunk) isPutRequest_Body_ObjectPart() {}
+
+type PutRequest struct {
+ Body *PutRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PutRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*PutRequest)(nil)
+ _ json.Marshaler = (*PutRequest)(nil)
+ _ json.Unmarshaler = (*PutRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PutRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *PutRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *PutRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PutRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PutRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PutRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PutRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(PutRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *PutRequest) GetBody() *PutRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *PutRequest) SetBody(v *PutRequest_Body) {
+ x.Body = v
+}
+func (x *PutRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *PutRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *PutRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *PutRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PutRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PutRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PutRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PutRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *PutRequest_Body
+ f = new(PutRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PutResponse_Body struct {
+ ObjectId *grpc.ObjectID `json:"objectId"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PutResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*PutResponse_Body)(nil)
+ _ json.Marshaler = (*PutResponse_Body)(nil)
+ _ json.Unmarshaler = (*PutResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PutResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.ObjectId)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PutResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PutResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.ObjectId != nil {
+ x.ObjectId.EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PutResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PutResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // ObjectId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ObjectId")
+ }
+ x.ObjectId = new(grpc.ObjectID)
+ if err := x.ObjectId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *PutResponse_Body) GetObjectId() *grpc.ObjectID {
+ if x != nil {
+ return x.ObjectId
+ }
+ return nil
+}
+func (x *PutResponse_Body) SetObjectId(v *grpc.ObjectID) {
+ x.ObjectId = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PutResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PutResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"objectId\":"
+ out.RawString(prefix)
+ x.ObjectId.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PutResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PutResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "objectId":
+ {
+ var f *grpc.ObjectID
+ f = new(grpc.ObjectID)
+ f.UnmarshalEasyJSON(in)
+ x.ObjectId = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PutResponse struct {
+ Body *PutResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PutResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*PutResponse)(nil)
+ _ json.Marshaler = (*PutResponse)(nil)
+ _ json.Unmarshaler = (*PutResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PutResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *PutResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *PutResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PutResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PutResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PutResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PutResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(PutResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *PutResponse) GetBody() *PutResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *PutResponse) SetBody(v *PutResponse_Body) {
+ x.Body = v
+}
+func (x *PutResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *PutResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *PutResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *PutResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PutResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PutResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PutResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PutResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *PutResponse_Body
+ f = new(PutResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type DeleteRequest_Body struct {
+ Address *grpc.Address `json:"address"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*DeleteRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*DeleteRequest_Body)(nil)
+ _ json.Marshaler = (*DeleteRequest_Body)(nil)
+ _ json.Unmarshaler = (*DeleteRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *DeleteRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Address)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *DeleteRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *DeleteRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Address != nil {
+ x.Address.EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *DeleteRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "DeleteRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Address
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Address")
+ }
+ x.Address = new(grpc.Address)
+ if err := x.Address.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *DeleteRequest_Body) GetAddress() *grpc.Address {
+ if x != nil {
+ return x.Address
+ }
+ return nil
+}
+func (x *DeleteRequest_Body) SetAddress(v *grpc.Address) {
+ x.Address = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *DeleteRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *DeleteRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"address\":"
+ out.RawString(prefix)
+ x.Address.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *DeleteRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *DeleteRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "address":
+ {
+ var f *grpc.Address
+ f = new(grpc.Address)
+ f.UnmarshalEasyJSON(in)
+ x.Address = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type DeleteRequest struct {
+ Body *DeleteRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*DeleteRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*DeleteRequest)(nil)
+ _ json.Marshaler = (*DeleteRequest)(nil)
+ _ json.Unmarshaler = (*DeleteRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *DeleteRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *DeleteRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *DeleteRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *DeleteRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *DeleteRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *DeleteRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "DeleteRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(DeleteRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *DeleteRequest) GetBody() *DeleteRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *DeleteRequest) SetBody(v *DeleteRequest_Body) {
+ x.Body = v
+}
+func (x *DeleteRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *DeleteRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *DeleteRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *DeleteRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *DeleteRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *DeleteRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *DeleteRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *DeleteRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *DeleteRequest_Body
+ f = new(DeleteRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type DeleteResponse_Body struct {
+ Tombstone *grpc.Address `json:"tombstone"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*DeleteResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*DeleteResponse_Body)(nil)
+ _ json.Marshaler = (*DeleteResponse_Body)(nil)
+ _ json.Unmarshaler = (*DeleteResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *DeleteResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Tombstone)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *DeleteResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *DeleteResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Tombstone != nil {
+ x.Tombstone.EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *DeleteResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "DeleteResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Tombstone
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Tombstone")
+ }
+ x.Tombstone = new(grpc.Address)
+ if err := x.Tombstone.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *DeleteResponse_Body) GetTombstone() *grpc.Address {
+ if x != nil {
+ return x.Tombstone
+ }
+ return nil
+}
+func (x *DeleteResponse_Body) SetTombstone(v *grpc.Address) {
+ x.Tombstone = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *DeleteResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *DeleteResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"tombstone\":"
+ out.RawString(prefix)
+ x.Tombstone.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *DeleteResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *DeleteResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "tombstone":
+ {
+ var f *grpc.Address
+ f = new(grpc.Address)
+ f.UnmarshalEasyJSON(in)
+ x.Tombstone = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type DeleteResponse struct {
+ Body *DeleteResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*DeleteResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*DeleteResponse)(nil)
+ _ json.Marshaler = (*DeleteResponse)(nil)
+ _ json.Unmarshaler = (*DeleteResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *DeleteResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *DeleteResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *DeleteResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *DeleteResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *DeleteResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *DeleteResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "DeleteResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(DeleteResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *DeleteResponse) GetBody() *DeleteResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *DeleteResponse) SetBody(v *DeleteResponse_Body) {
+ x.Body = v
+}
+func (x *DeleteResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *DeleteResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *DeleteResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *DeleteResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *DeleteResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *DeleteResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *DeleteResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *DeleteResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *DeleteResponse_Body
+ f = new(DeleteResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type HeadRequest_Body struct {
+ Address *grpc.Address `json:"address"`
+ MainOnly bool `json:"mainOnly"`
+ Raw bool `json:"raw"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*HeadRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*HeadRequest_Body)(nil)
+ _ json.Marshaler = (*HeadRequest_Body)(nil)
+ _ json.Unmarshaler = (*HeadRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *HeadRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Address)
+ size += proto.BoolSize(2, x.MainOnly)
+ size += proto.BoolSize(3, x.Raw)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *HeadRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *HeadRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Address != nil {
+ x.Address.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MainOnly {
+ mm.AppendBool(2, x.MainOnly)
+ }
+ if x.Raw {
+ mm.AppendBool(3, x.Raw)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *HeadRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "HeadRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Address
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Address")
+ }
+ x.Address = new(grpc.Address)
+ if err := x.Address.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MainOnly
+ data, ok := fc.Bool()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MainOnly")
+ }
+ x.MainOnly = data
+ case 3: // Raw
+ data, ok := fc.Bool()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Raw")
+ }
+ x.Raw = data
+ }
+ }
+ return nil
+}
+func (x *HeadRequest_Body) GetAddress() *grpc.Address {
+ if x != nil {
+ return x.Address
+ }
+ return nil
+}
+func (x *HeadRequest_Body) SetAddress(v *grpc.Address) {
+ x.Address = v
+}
+func (x *HeadRequest_Body) GetMainOnly() bool {
+ if x != nil {
+ return x.MainOnly
+ }
+ return false
+}
+func (x *HeadRequest_Body) SetMainOnly(v bool) {
+ x.MainOnly = v
+}
+func (x *HeadRequest_Body) GetRaw() bool {
+ if x != nil {
+ return x.Raw
+ }
+ return false
+}
+func (x *HeadRequest_Body) SetRaw(v bool) {
+ x.Raw = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *HeadRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *HeadRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"address\":"
+ out.RawString(prefix)
+ x.Address.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"raw\":"
+ out.RawString(prefix)
+ out.Bool(x.Raw)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *HeadRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *HeadRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "address":
+ {
+ var f *grpc.Address
+ f = new(grpc.Address)
+ f.UnmarshalEasyJSON(in)
+ x.Address = f
+ }
+ case "mainOnly":
+ {
+ var f bool
+ f = in.Bool()
+ x.MainOnly = f
+ }
+ case "raw":
+ {
+ var f bool
+ f = in.Bool()
+ x.Raw = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type HeadRequest struct {
+ Body *HeadRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*HeadRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*HeadRequest)(nil)
+ _ json.Marshaler = (*HeadRequest)(nil)
+ _ json.Unmarshaler = (*HeadRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *HeadRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *HeadRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *HeadRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *HeadRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *HeadRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *HeadRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "HeadRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(HeadRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *HeadRequest) GetBody() *HeadRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *HeadRequest) SetBody(v *HeadRequest_Body) {
+ x.Body = v
+}
+func (x *HeadRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *HeadRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *HeadRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *HeadRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *HeadRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *HeadRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *HeadRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *HeadRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *HeadRequest_Body
+ f = new(HeadRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type HeaderWithSignature struct {
+ Header *Header `json:"header"`
+ Signature *grpc.Signature `json:"signature"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*HeaderWithSignature)(nil)
+ _ encoding.ProtoUnmarshaler = (*HeaderWithSignature)(nil)
+ _ json.Marshaler = (*HeaderWithSignature)(nil)
+ _ json.Unmarshaler = (*HeaderWithSignature)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *HeaderWithSignature) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Header)
+ size += proto.NestedStructureSize(2, x.Signature)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *HeaderWithSignature) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *HeaderWithSignature) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Header != nil {
+ x.Header.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Signature != nil {
+ x.Signature.EmitProtobuf(mm.AppendMessage(2))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *HeaderWithSignature) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "HeaderWithSignature")
+ }
+ switch fc.FieldNum {
+ case 1: // Header
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Header")
+ }
+ x.Header = new(Header)
+ if err := x.Header.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Signature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Signature")
+ }
+ x.Signature = new(grpc.Signature)
+ if err := x.Signature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *HeaderWithSignature) GetHeader() *Header {
+ if x != nil {
+ return x.Header
+ }
+ return nil
+}
+func (x *HeaderWithSignature) SetHeader(v *Header) {
+ x.Header = v
+}
+func (x *HeaderWithSignature) GetSignature() *grpc.Signature {
+ if x != nil {
+ return x.Signature
+ }
+ return nil
+}
+func (x *HeaderWithSignature) SetSignature(v *grpc.Signature) {
+ x.Signature = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *HeaderWithSignature) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *HeaderWithSignature) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"header\":"
+ out.RawString(prefix)
+ x.Header.MarshalEasyJSON(out)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"signature\":"
+ out.RawString(prefix)
+ x.Signature.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *HeaderWithSignature) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *HeaderWithSignature) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "header":
+ {
+ var f *Header
+ f = new(Header)
+ f.UnmarshalEasyJSON(in)
+ x.Header = f
+ }
+ case "signature":
+ {
+ var f *grpc.Signature
+ f = new(grpc.Signature)
+ f.UnmarshalEasyJSON(in)
+ x.Signature = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type HeadResponse_Body struct {
+ Head isHeadResponse_Body_Head
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*HeadResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*HeadResponse_Body)(nil)
+ _ json.Marshaler = (*HeadResponse_Body)(nil)
+ _ json.Unmarshaler = (*HeadResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *HeadResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ if inner, ok := x.Head.(*HeadResponse_Body_Header); ok {
+ size += proto.NestedStructureSize(1, inner.Header)
+ }
+ if inner, ok := x.Head.(*HeadResponse_Body_ShortHeader); ok {
+ size += proto.NestedStructureSize(2, inner.ShortHeader)
+ }
+ if inner, ok := x.Head.(*HeadResponse_Body_SplitInfo); ok {
+ size += proto.NestedStructureSize(3, inner.SplitInfo)
+ }
+ if inner, ok := x.Head.(*HeadResponse_Body_EcInfo); ok {
+ size += proto.NestedStructureSize(4, inner.EcInfo)
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *HeadResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *HeadResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if inner, ok := x.Head.(*HeadResponse_Body_Header); ok {
+ if inner.Header != nil {
+ inner.Header.EmitProtobuf(mm.AppendMessage(1))
+ }
+ }
+ if inner, ok := x.Head.(*HeadResponse_Body_ShortHeader); ok {
+ if inner.ShortHeader != nil {
+ inner.ShortHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ }
+ if inner, ok := x.Head.(*HeadResponse_Body_SplitInfo); ok {
+ if inner.SplitInfo != nil {
+ inner.SplitInfo.EmitProtobuf(mm.AppendMessage(3))
+ }
+ }
+ if inner, ok := x.Head.(*HeadResponse_Body_EcInfo); ok {
+ if inner.EcInfo != nil {
+ inner.EcInfo.EmitProtobuf(mm.AppendMessage(4))
+ }
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *HeadResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "HeadResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Header
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Header")
+ }
+ oneofField := &HeadResponse_Body_Header{Header: new(HeaderWithSignature)}
+ if err := oneofField.Header.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ x.Head = oneofField
+ case 2: // ShortHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ShortHeader")
+ }
+ oneofField := &HeadResponse_Body_ShortHeader{ShortHeader: new(ShortHeader)}
+ if err := oneofField.ShortHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ x.Head = oneofField
+ case 3: // SplitInfo
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "SplitInfo")
+ }
+ oneofField := &HeadResponse_Body_SplitInfo{SplitInfo: new(SplitInfo)}
+ if err := oneofField.SplitInfo.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ x.Head = oneofField
+ case 4: // EcInfo
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "EcInfo")
+ }
+ oneofField := &HeadResponse_Body_EcInfo{EcInfo: new(ECInfo)}
+ if err := oneofField.EcInfo.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ x.Head = oneofField
+ }
+ }
+ return nil
+}
+func (x *HeadResponse_Body) GetHead() isHeadResponse_Body_Head {
+ if x != nil {
+ return x.Head
+ }
+ return nil
+}
+func (x *HeadResponse_Body) SetHead(v isHeadResponse_Body_Head) {
+ x.Head = v
+}
+func (x *HeadResponse_Body) GetHeader() *HeaderWithSignature {
+ if xx, ok := x.GetHead().(*HeadResponse_Body_Header); ok {
+ return xx.Header
+ }
+ return nil
+}
+func (x *HeadResponse_Body) SetHeader(v *HeaderWithSignature) {
+ x.Head = &HeadResponse_Body_Header{Header: v}
+}
+func (x *HeadResponse_Body) GetShortHeader() *ShortHeader {
+ if xx, ok := x.GetHead().(*HeadResponse_Body_ShortHeader); ok {
+ return xx.ShortHeader
+ }
+ return nil
+}
+func (x *HeadResponse_Body) SetShortHeader(v *ShortHeader) {
+ x.Head = &HeadResponse_Body_ShortHeader{ShortHeader: v}
+}
+func (x *HeadResponse_Body) GetSplitInfo() *SplitInfo {
+ if xx, ok := x.GetHead().(*HeadResponse_Body_SplitInfo); ok {
+ return xx.SplitInfo
+ }
+ return nil
+}
+func (x *HeadResponse_Body) SetSplitInfo(v *SplitInfo) {
+ x.Head = &HeadResponse_Body_SplitInfo{SplitInfo: v}
+}
+func (x *HeadResponse_Body) GetEcInfo() *ECInfo {
+ if xx, ok := x.GetHead().(*HeadResponse_Body_EcInfo); ok {
+ return xx.EcInfo
+ }
+ return nil
+}
+func (x *HeadResponse_Body) SetEcInfo(v *ECInfo) {
+ x.Head = &HeadResponse_Body_EcInfo{EcInfo: v}
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *HeadResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *HeadResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ switch xx := x.Head.(type) {
+ case *HeadResponse_Body_Header:
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"header\":"
+ out.RawString(prefix)
+ xx.Header.MarshalEasyJSON(out)
+ }
+ case *HeadResponse_Body_ShortHeader:
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"shortHeader\":"
+ out.RawString(prefix)
+ xx.ShortHeader.MarshalEasyJSON(out)
+ }
+ case *HeadResponse_Body_SplitInfo:
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"splitInfo\":"
+ out.RawString(prefix)
+ xx.SplitInfo.MarshalEasyJSON(out)
+ }
+ case *HeadResponse_Body_EcInfo:
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"ecInfo\":"
+ out.RawString(prefix)
+ xx.EcInfo.MarshalEasyJSON(out)
+ }
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *HeadResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *HeadResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "header":
+ xx := new(HeadResponse_Body_Header)
+ x.Head = xx
+ {
+ var f *HeaderWithSignature
+ f = new(HeaderWithSignature)
+ f.UnmarshalEasyJSON(in)
+ xx.Header = f
+ }
+ case "shortHeader":
+ xx := new(HeadResponse_Body_ShortHeader)
+ x.Head = xx
+ {
+ var f *ShortHeader
+ f = new(ShortHeader)
+ f.UnmarshalEasyJSON(in)
+ xx.ShortHeader = f
+ }
+ case "splitInfo":
+ xx := new(HeadResponse_Body_SplitInfo)
+ x.Head = xx
+ {
+ var f *SplitInfo
+ f = new(SplitInfo)
+ f.UnmarshalEasyJSON(in)
+ xx.SplitInfo = f
+ }
+ case "ecInfo":
+ xx := new(HeadResponse_Body_EcInfo)
+ x.Head = xx
+ {
+ var f *ECInfo
+ f = new(ECInfo)
+ f.UnmarshalEasyJSON(in)
+ xx.EcInfo = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type isHeadResponse_Body_Head interface {
+ isHeadResponse_Body_Head()
+}
+
+type HeadResponse_Body_Header struct {
+ Header *HeaderWithSignature
+}
+
+type HeadResponse_Body_ShortHeader struct {
+ ShortHeader *ShortHeader
+}
+
+type HeadResponse_Body_SplitInfo struct {
+ SplitInfo *SplitInfo
+}
+
+type HeadResponse_Body_EcInfo struct {
+ EcInfo *ECInfo
+}
+
+func (*HeadResponse_Body_Header) isHeadResponse_Body_Head() {}
+
+func (*HeadResponse_Body_ShortHeader) isHeadResponse_Body_Head() {}
+
+func (*HeadResponse_Body_SplitInfo) isHeadResponse_Body_Head() {}
+
+func (*HeadResponse_Body_EcInfo) isHeadResponse_Body_Head() {}
+
+type HeadResponse struct {
+ Body *HeadResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*HeadResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*HeadResponse)(nil)
+ _ json.Marshaler = (*HeadResponse)(nil)
+ _ json.Unmarshaler = (*HeadResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *HeadResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *HeadResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *HeadResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *HeadResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *HeadResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *HeadResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "HeadResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(HeadResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *HeadResponse) GetBody() *HeadResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *HeadResponse) SetBody(v *HeadResponse_Body) {
+ x.Body = v
+}
+func (x *HeadResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *HeadResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *HeadResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *HeadResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *HeadResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *HeadResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *HeadResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *HeadResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *HeadResponse_Body
+ f = new(HeadResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type SearchRequest_Body_Filter struct {
+ MatchType MatchType `json:"matchType"`
+ Key string `json:"key"`
+ Value string `json:"value"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*SearchRequest_Body_Filter)(nil)
+ _ encoding.ProtoUnmarshaler = (*SearchRequest_Body_Filter)(nil)
+ _ json.Marshaler = (*SearchRequest_Body_Filter)(nil)
+ _ json.Unmarshaler = (*SearchRequest_Body_Filter)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *SearchRequest_Body_Filter) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.EnumSize(1, int32(x.MatchType))
+ size += proto.StringSize(2, x.Key)
+ size += proto.StringSize(3, x.Value)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *SearchRequest_Body_Filter) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *SearchRequest_Body_Filter) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if int32(x.MatchType) != 0 {
+ mm.AppendInt32(1, int32(x.MatchType))
+ }
+ if len(x.Key) != 0 {
+ mm.AppendString(2, x.Key)
+ }
+ if len(x.Value) != 0 {
+ mm.AppendString(3, x.Value)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *SearchRequest_Body_Filter) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "SearchRequest_Body_Filter")
+ }
+ switch fc.FieldNum {
+ case 1: // MatchType
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MatchType")
+ }
+ x.MatchType = MatchType(data)
+ case 2: // Key
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Key")
+ }
+ x.Key = data
+ case 3: // Value
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Value")
+ }
+ x.Value = data
+ }
+ }
+ return nil
+}
+func (x *SearchRequest_Body_Filter) GetMatchType() MatchType {
+ if x != nil {
+ return x.MatchType
+ }
+ return 0
+}
+func (x *SearchRequest_Body_Filter) SetMatchType(v MatchType) {
+ x.MatchType = v
+}
+func (x *SearchRequest_Body_Filter) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+func (x *SearchRequest_Body_Filter) SetKey(v string) {
+ x.Key = v
+}
+func (x *SearchRequest_Body_Filter) GetValue() string {
+ if x != nil {
+ return x.Value
+ }
+ return ""
+}
+func (x *SearchRequest_Body_Filter) SetValue(v string) {
+ x.Value = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *SearchRequest_Body_Filter) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *SearchRequest_Body_Filter) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"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)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *SearchRequest_Body_Filter) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *SearchRequest_Body_Filter) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "matchType":
+ {
+ var f MatchType
+ var parsedValue MatchType
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := MatchType_value[v]; ok {
+ parsedValue = MatchType(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = MatchType(vv)
+ case float64:
+ parsedValue = MatchType(v)
+ }
+ f = parsedValue
+ x.MatchType = f
+ }
+ case "key":
+ {
+ var f string
+ f = in.String()
+ x.Key = f
+ }
+ case "value":
+ {
+ var f string
+ f = in.String()
+ x.Value = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type SearchRequest_Body struct {
+ ContainerId *grpc.ContainerID `json:"containerId"`
+ Version uint32 `json:"version"`
+ Filters []SearchRequest_Body_Filter `json:"filters"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*SearchRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*SearchRequest_Body)(nil)
+ _ json.Marshaler = (*SearchRequest_Body)(nil)
+ _ json.Unmarshaler = (*SearchRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *SearchRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.ContainerId)
+ size += proto.UInt32Size(2, x.Version)
+ for i := range x.Filters {
+ size += proto.NestedStructureSizeUnchecked(3, &x.Filters[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *SearchRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *SearchRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.ContainerId != nil {
+ x.ContainerId.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Version != 0 {
+ mm.AppendUint32(2, x.Version)
+ }
+ for i := range x.Filters {
+ x.Filters[i].EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *SearchRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "SearchRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // ContainerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ContainerId")
+ }
+ x.ContainerId = new(grpc.ContainerID)
+ if err := x.ContainerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Version
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Version")
+ }
+ x.Version = data
+ case 3: // Filters
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Filters")
+ }
+ x.Filters = append(x.Filters, SearchRequest_Body_Filter{})
+ ff := &x.Filters[len(x.Filters)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *SearchRequest_Body) GetContainerId() *grpc.ContainerID {
+ if x != nil {
+ return x.ContainerId
+ }
+ return nil
+}
+func (x *SearchRequest_Body) SetContainerId(v *grpc.ContainerID) {
+ x.ContainerId = v
+}
+func (x *SearchRequest_Body) GetVersion() uint32 {
+ if x != nil {
+ return x.Version
+ }
+ return 0
+}
+func (x *SearchRequest_Body) SetVersion(v uint32) {
+ x.Version = v
+}
+func (x *SearchRequest_Body) GetFilters() []SearchRequest_Body_Filter {
+ if x != nil {
+ return x.Filters
+ }
+ return nil
+}
+func (x *SearchRequest_Body) SetFilters(v []SearchRequest_Body_Filter) {
+ x.Filters = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *SearchRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *SearchRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"containerId\":"
+ out.RawString(prefix)
+ x.ContainerId.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *SearchRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *SearchRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "containerId":
+ {
+ var f *grpc.ContainerID
+ f = new(grpc.ContainerID)
+ f.UnmarshalEasyJSON(in)
+ x.ContainerId = f
+ }
+ case "version":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.Version = f
+ }
+ case "filters":
+ {
+ var f SearchRequest_Body_Filter
+ var list []SearchRequest_Body_Filter
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = SearchRequest_Body_Filter{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Filters = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type SearchRequest struct {
+ Body *SearchRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*SearchRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*SearchRequest)(nil)
+ _ json.Marshaler = (*SearchRequest)(nil)
+ _ json.Unmarshaler = (*SearchRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *SearchRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *SearchRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *SearchRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *SearchRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *SearchRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *SearchRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "SearchRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(SearchRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *SearchRequest) GetBody() *SearchRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *SearchRequest) SetBody(v *SearchRequest_Body) {
+ x.Body = v
+}
+func (x *SearchRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *SearchRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *SearchRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *SearchRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *SearchRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *SearchRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *SearchRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *SearchRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *SearchRequest_Body
+ f = new(SearchRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type SearchResponse_Body struct {
+ IdList []grpc.ObjectID `json:"idList"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*SearchResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*SearchResponse_Body)(nil)
+ _ json.Marshaler = (*SearchResponse_Body)(nil)
+ _ json.Unmarshaler = (*SearchResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *SearchResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ for i := range x.IdList {
+ size += proto.NestedStructureSizeUnchecked(1, &x.IdList[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *SearchResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *SearchResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ for i := range x.IdList {
+ x.IdList[i].EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *SearchResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "SearchResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // IdList
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "IdList")
+ }
+ x.IdList = append(x.IdList, grpc.ObjectID{})
+ ff := &x.IdList[len(x.IdList)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *SearchResponse_Body) GetIdList() []grpc.ObjectID {
+ if x != nil {
+ return x.IdList
+ }
+ return nil
+}
+func (x *SearchResponse_Body) SetIdList(v []grpc.ObjectID) {
+ x.IdList = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *SearchResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *SearchResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *SearchResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *SearchResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "idList":
+ {
+ var f grpc.ObjectID
+ var list []grpc.ObjectID
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = grpc.ObjectID{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.IdList = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type SearchResponse struct {
+ Body *SearchResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*SearchResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*SearchResponse)(nil)
+ _ json.Marshaler = (*SearchResponse)(nil)
+ _ json.Unmarshaler = (*SearchResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *SearchResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *SearchResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *SearchResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *SearchResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *SearchResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *SearchResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "SearchResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(SearchResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *SearchResponse) GetBody() *SearchResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *SearchResponse) SetBody(v *SearchResponse_Body) {
+ x.Body = v
+}
+func (x *SearchResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *SearchResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *SearchResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *SearchResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *SearchResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *SearchResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *SearchResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *SearchResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *SearchResponse_Body
+ f = new(SearchResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Range struct {
+ Offset uint64 `json:"offset"`
+ Length uint64 `json:"length"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Range)(nil)
+ _ encoding.ProtoUnmarshaler = (*Range)(nil)
+ _ json.Marshaler = (*Range)(nil)
+ _ json.Unmarshaler = (*Range)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Range) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.UInt64Size(1, x.Offset)
+ size += proto.UInt64Size(2, x.Length)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Range) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Range) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Offset != 0 {
+ mm.AppendUint64(1, x.Offset)
+ }
+ if x.Length != 0 {
+ mm.AppendUint64(2, x.Length)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Range) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Range")
+ }
+ switch fc.FieldNum {
+ case 1: // Offset
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Offset")
+ }
+ x.Offset = data
+ case 2: // Length
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Length")
+ }
+ x.Length = data
+ }
+ }
+ return nil
+}
+func (x *Range) GetOffset() uint64 {
+ if x != nil {
+ return x.Offset
+ }
+ return 0
+}
+func (x *Range) SetOffset(v uint64) {
+ x.Offset = v
+}
+func (x *Range) GetLength() uint64 {
+ if x != nil {
+ return x.Length
+ }
+ return 0
+}
+func (x *Range) SetLength(v uint64) {
+ x.Length = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Range) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Range) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"length\":"
+ out.RawString(prefix)
+ out.RawByte('"')
+ out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Length, 10)
+ out.RawByte('"')
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Range) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Range) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "offset":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.Offset = f
+ }
+ case "length":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.Length = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type GetRangeRequest_Body struct {
+ Address *grpc.Address `json:"address"`
+ Range *Range `json:"range"`
+ Raw bool `json:"raw"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetRangeRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetRangeRequest_Body)(nil)
+ _ json.Marshaler = (*GetRangeRequest_Body)(nil)
+ _ json.Unmarshaler = (*GetRangeRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetRangeRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Address)
+ size += proto.NestedStructureSize(2, x.Range)
+ size += proto.BoolSize(3, x.Raw)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetRangeRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetRangeRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Address != nil {
+ x.Address.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Range != nil {
+ x.Range.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.Raw {
+ mm.AppendBool(3, x.Raw)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetRangeRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetRangeRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Address
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Address")
+ }
+ x.Address = new(grpc.Address)
+ if err := x.Address.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Range
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Range")
+ }
+ x.Range = new(Range)
+ if err := x.Range.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // Raw
+ data, ok := fc.Bool()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Raw")
+ }
+ x.Raw = data
+ }
+ }
+ return nil
+}
+func (x *GetRangeRequest_Body) GetAddress() *grpc.Address {
+ if x != nil {
+ return x.Address
+ }
+ return nil
+}
+func (x *GetRangeRequest_Body) SetAddress(v *grpc.Address) {
+ x.Address = v
+}
+func (x *GetRangeRequest_Body) GetRange() *Range {
+ if x != nil {
+ return x.Range
+ }
+ return nil
+}
+func (x *GetRangeRequest_Body) SetRange(v *Range) {
+ x.Range = v
+}
+func (x *GetRangeRequest_Body) GetRaw() bool {
+ if x != nil {
+ return x.Raw
+ }
+ return false
+}
+func (x *GetRangeRequest_Body) SetRaw(v bool) {
+ x.Raw = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetRangeRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetRangeRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"address\":"
+ out.RawString(prefix)
+ x.Address.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"raw\":"
+ out.RawString(prefix)
+ out.Bool(x.Raw)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetRangeRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetRangeRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "address":
+ {
+ var f *grpc.Address
+ f = new(grpc.Address)
+ f.UnmarshalEasyJSON(in)
+ x.Address = f
+ }
+ case "range":
+ {
+ var f *Range
+ f = new(Range)
+ f.UnmarshalEasyJSON(in)
+ x.Range = f
+ }
+ case "raw":
+ {
+ var f bool
+ f = in.Bool()
+ x.Raw = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type GetRangeRequest struct {
+ Body *GetRangeRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetRangeRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetRangeRequest)(nil)
+ _ json.Marshaler = (*GetRangeRequest)(nil)
+ _ json.Unmarshaler = (*GetRangeRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetRangeRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *GetRangeRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *GetRangeRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetRangeRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetRangeRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetRangeRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetRangeRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(GetRangeRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *GetRangeRequest) GetBody() *GetRangeRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *GetRangeRequest) SetBody(v *GetRangeRequest_Body) {
+ x.Body = v
+}
+func (x *GetRangeRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *GetRangeRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *GetRangeRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *GetRangeRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetRangeRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetRangeRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetRangeRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetRangeRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *GetRangeRequest_Body
+ f = new(GetRangeRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type GetRangeResponse_Body struct {
+ RangePart isGetRangeResponse_Body_RangePart
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetRangeResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetRangeResponse_Body)(nil)
+ _ json.Marshaler = (*GetRangeResponse_Body)(nil)
+ _ json.Unmarshaler = (*GetRangeResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetRangeResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ if inner, ok := x.RangePart.(*GetRangeResponse_Body_Chunk); ok {
+ size += proto.BytesSize(1, inner.Chunk)
+ }
+ if inner, ok := x.RangePart.(*GetRangeResponse_Body_SplitInfo); ok {
+ size += proto.NestedStructureSize(2, inner.SplitInfo)
+ }
+ if inner, ok := x.RangePart.(*GetRangeResponse_Body_EcInfo); ok {
+ size += proto.NestedStructureSize(3, inner.EcInfo)
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetRangeResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetRangeResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if inner, ok := x.RangePart.(*GetRangeResponse_Body_Chunk); ok {
+ if len(inner.Chunk) != 0 {
+ mm.AppendBytes(1, inner.Chunk)
+ }
+ }
+ if inner, ok := x.RangePart.(*GetRangeResponse_Body_SplitInfo); ok {
+ if inner.SplitInfo != nil {
+ inner.SplitInfo.EmitProtobuf(mm.AppendMessage(2))
+ }
+ }
+ if inner, ok := x.RangePart.(*GetRangeResponse_Body_EcInfo); ok {
+ if inner.EcInfo != nil {
+ inner.EcInfo.EmitProtobuf(mm.AppendMessage(3))
+ }
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetRangeResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetRangeResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Chunk
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Chunk")
+ }
+ x.RangePart = &GetRangeResponse_Body_Chunk{Chunk: data}
+ case 2: // SplitInfo
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "SplitInfo")
+ }
+ oneofField := &GetRangeResponse_Body_SplitInfo{SplitInfo: new(SplitInfo)}
+ if err := oneofField.SplitInfo.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ x.RangePart = oneofField
+ case 3: // EcInfo
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "EcInfo")
+ }
+ oneofField := &GetRangeResponse_Body_EcInfo{EcInfo: new(ECInfo)}
+ if err := oneofField.EcInfo.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ x.RangePart = oneofField
+ }
+ }
+ return nil
+}
+func (x *GetRangeResponse_Body) GetRangePart() isGetRangeResponse_Body_RangePart {
+ if x != nil {
+ return x.RangePart
+ }
+ return nil
+}
+func (x *GetRangeResponse_Body) SetRangePart(v isGetRangeResponse_Body_RangePart) {
+ x.RangePart = v
+}
+func (x *GetRangeResponse_Body) GetChunk() []byte {
+ if xx, ok := x.GetRangePart().(*GetRangeResponse_Body_Chunk); ok {
+ return xx.Chunk
+ }
+ return nil
+}
+func (x *GetRangeResponse_Body) SetChunk(v *GetRangeResponse_Body_Chunk) {
+ x.RangePart = v
+}
+func (x *GetRangeResponse_Body_Chunk) GetChunk() []byte {
+ if x != nil {
+ return x.Chunk
+ }
+ return nil
+}
+func (x *GetRangeResponse_Body_Chunk) SetChunk(v []byte) {
+ x.Chunk = v
+}
+func (x *GetRangeResponse_Body) GetSplitInfo() *SplitInfo {
+ if xx, ok := x.GetRangePart().(*GetRangeResponse_Body_SplitInfo); ok {
+ return xx.SplitInfo
+ }
+ return nil
+}
+func (x *GetRangeResponse_Body) SetSplitInfo(v *SplitInfo) {
+ x.RangePart = &GetRangeResponse_Body_SplitInfo{SplitInfo: v}
+}
+func (x *GetRangeResponse_Body) GetEcInfo() *ECInfo {
+ if xx, ok := x.GetRangePart().(*GetRangeResponse_Body_EcInfo); ok {
+ return xx.EcInfo
+ }
+ return nil
+}
+func (x *GetRangeResponse_Body) SetEcInfo(v *ECInfo) {
+ x.RangePart = &GetRangeResponse_Body_EcInfo{EcInfo: v}
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetRangeResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetRangeResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ switch xx := x.RangePart.(type) {
+ case *GetRangeResponse_Body_Chunk:
+ {
+ 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 !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"splitInfo\":"
+ out.RawString(prefix)
+ xx.SplitInfo.MarshalEasyJSON(out)
+ }
+ case *GetRangeResponse_Body_EcInfo:
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"ecInfo\":"
+ out.RawString(prefix)
+ xx.EcInfo.MarshalEasyJSON(out)
+ }
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetRangeResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetRangeResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "chunk":
+ xx := new(GetRangeResponse_Body_Chunk)
+ x.RangePart = xx
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ xx.Chunk = f
+ }
+ case "splitInfo":
+ xx := new(GetRangeResponse_Body_SplitInfo)
+ x.RangePart = xx
+ {
+ var f *SplitInfo
+ f = new(SplitInfo)
+ f.UnmarshalEasyJSON(in)
+ xx.SplitInfo = f
+ }
+ case "ecInfo":
+ xx := new(GetRangeResponse_Body_EcInfo)
+ x.RangePart = xx
+ {
+ var f *ECInfo
+ f = new(ECInfo)
+ f.UnmarshalEasyJSON(in)
+ xx.EcInfo = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type isGetRangeResponse_Body_RangePart interface {
+ isGetRangeResponse_Body_RangePart()
+}
+
+type GetRangeResponse_Body_Chunk struct {
+ Chunk []byte
+}
+
+type GetRangeResponse_Body_SplitInfo struct {
+ SplitInfo *SplitInfo
+}
+
+type GetRangeResponse_Body_EcInfo struct {
+ EcInfo *ECInfo
+}
+
+func (*GetRangeResponse_Body_Chunk) isGetRangeResponse_Body_RangePart() {}
+
+func (*GetRangeResponse_Body_SplitInfo) isGetRangeResponse_Body_RangePart() {}
+
+func (*GetRangeResponse_Body_EcInfo) isGetRangeResponse_Body_RangePart() {}
+
+type GetRangeResponse struct {
+ Body *GetRangeResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetRangeResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetRangeResponse)(nil)
+ _ json.Marshaler = (*GetRangeResponse)(nil)
+ _ json.Unmarshaler = (*GetRangeResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetRangeResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *GetRangeResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *GetRangeResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetRangeResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetRangeResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetRangeResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetRangeResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(GetRangeResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *GetRangeResponse) GetBody() *GetRangeResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *GetRangeResponse) SetBody(v *GetRangeResponse_Body) {
+ x.Body = v
+}
+func (x *GetRangeResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *GetRangeResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *GetRangeResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *GetRangeResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetRangeResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetRangeResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetRangeResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetRangeResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *GetRangeResponse_Body
+ f = new(GetRangeResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type GetRangeHashRequest_Body struct {
+ Address *grpc.Address `json:"address"`
+ Ranges []Range `json:"ranges"`
+ Salt []byte `json:"salt"`
+ Type grpc.ChecksumType `json:"type"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetRangeHashRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetRangeHashRequest_Body)(nil)
+ _ json.Marshaler = (*GetRangeHashRequest_Body)(nil)
+ _ json.Unmarshaler = (*GetRangeHashRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetRangeHashRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Address)
+ for i := range x.Ranges {
+ size += proto.NestedStructureSizeUnchecked(2, &x.Ranges[i])
+ }
+ size += proto.BytesSize(3, x.Salt)
+ size += proto.EnumSize(4, int32(x.Type))
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetRangeHashRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetRangeHashRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Address != nil {
+ x.Address.EmitProtobuf(mm.AppendMessage(1))
+ }
+ for i := range x.Ranges {
+ x.Ranges[i].EmitProtobuf(mm.AppendMessage(2))
+ }
+ if len(x.Salt) != 0 {
+ mm.AppendBytes(3, x.Salt)
+ }
+ if int32(x.Type) != 0 {
+ mm.AppendInt32(4, int32(x.Type))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetRangeHashRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetRangeHashRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Address
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Address")
+ }
+ x.Address = new(grpc.Address)
+ if err := x.Address.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Ranges
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Ranges")
+ }
+ x.Ranges = append(x.Ranges, Range{})
+ ff := &x.Ranges[len(x.Ranges)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // Salt
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Salt")
+ }
+ x.Salt = data
+ case 4: // Type
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Type")
+ }
+ x.Type = grpc.ChecksumType(data)
+ }
+ }
+ return nil
+}
+func (x *GetRangeHashRequest_Body) GetAddress() *grpc.Address {
+ if x != nil {
+ return x.Address
+ }
+ return nil
+}
+func (x *GetRangeHashRequest_Body) SetAddress(v *grpc.Address) {
+ x.Address = v
+}
+func (x *GetRangeHashRequest_Body) GetRanges() []Range {
+ if x != nil {
+ return x.Ranges
+ }
+ return nil
+}
+func (x *GetRangeHashRequest_Body) SetRanges(v []Range) {
+ x.Ranges = v
+}
+func (x *GetRangeHashRequest_Body) GetSalt() []byte {
+ if x != nil {
+ return x.Salt
+ }
+ return nil
+}
+func (x *GetRangeHashRequest_Body) SetSalt(v []byte) {
+ x.Salt = v
+}
+func (x *GetRangeHashRequest_Body) GetType() grpc.ChecksumType {
+ if x != nil {
+ return x.Type
+ }
+ return 0
+}
+func (x *GetRangeHashRequest_Body) SetType(v grpc.ChecksumType) {
+ x.Type = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetRangeHashRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetRangeHashRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"address\":"
+ out.RawString(prefix)
+ x.Address.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"salt\":"
+ out.RawString(prefix)
+ if x.Salt != nil {
+ out.Base64Bytes(x.Salt)
+ } else {
+ out.String("")
+ }
+ }
+ {
+ 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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetRangeHashRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetRangeHashRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "address":
+ {
+ var f *grpc.Address
+ f = new(grpc.Address)
+ f.UnmarshalEasyJSON(in)
+ x.Address = f
+ }
+ case "ranges":
+ {
+ var f Range
+ var list []Range
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = Range{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Ranges = list
+ in.Delim(']')
+ }
+ case "salt":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Salt = f
+ }
+ case "type":
+ {
+ var f grpc.ChecksumType
+ var parsedValue grpc.ChecksumType
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := grpc.ChecksumType_value[v]; ok {
+ parsedValue = grpc.ChecksumType(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = grpc.ChecksumType(vv)
+ case float64:
+ parsedValue = grpc.ChecksumType(v)
+ }
+ f = parsedValue
+ x.Type = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type GetRangeHashRequest struct {
+ Body *GetRangeHashRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetRangeHashRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetRangeHashRequest)(nil)
+ _ json.Marshaler = (*GetRangeHashRequest)(nil)
+ _ json.Unmarshaler = (*GetRangeHashRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetRangeHashRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *GetRangeHashRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *GetRangeHashRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetRangeHashRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetRangeHashRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetRangeHashRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetRangeHashRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(GetRangeHashRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *GetRangeHashRequest) GetBody() *GetRangeHashRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *GetRangeHashRequest) SetBody(v *GetRangeHashRequest_Body) {
+ x.Body = v
+}
+func (x *GetRangeHashRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *GetRangeHashRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *GetRangeHashRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *GetRangeHashRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetRangeHashRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetRangeHashRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetRangeHashRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetRangeHashRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *GetRangeHashRequest_Body
+ f = new(GetRangeHashRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type GetRangeHashResponse_Body struct {
+ Type grpc.ChecksumType `json:"type"`
+ HashList [][]byte `json:"hashList"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetRangeHashResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetRangeHashResponse_Body)(nil)
+ _ json.Marshaler = (*GetRangeHashResponse_Body)(nil)
+ _ json.Unmarshaler = (*GetRangeHashResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetRangeHashResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.EnumSize(1, int32(x.Type))
+ size += proto.RepeatedBytesSize(2, x.HashList)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetRangeHashResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetRangeHashResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if int32(x.Type) != 0 {
+ mm.AppendInt32(1, int32(x.Type))
+ }
+ for j := range x.HashList {
+ mm.AppendBytes(2, x.HashList[j])
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetRangeHashResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetRangeHashResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Type
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Type")
+ }
+ x.Type = grpc.ChecksumType(data)
+ case 2: // HashList
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "HashList")
+ }
+ x.HashList = append(x.HashList, data)
+ }
+ }
+ return nil
+}
+func (x *GetRangeHashResponse_Body) GetType() grpc.ChecksumType {
+ if x != nil {
+ return x.Type
+ }
+ return 0
+}
+func (x *GetRangeHashResponse_Body) SetType(v grpc.ChecksumType) {
+ x.Type = v
+}
+func (x *GetRangeHashResponse_Body) GetHashList() [][]byte {
+ if x != nil {
+ return x.HashList
+ }
+ return nil
+}
+func (x *GetRangeHashResponse_Body) SetHashList(v [][]byte) {
+ x.HashList = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetRangeHashResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetRangeHashResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetRangeHashResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetRangeHashResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "type":
+ {
+ var f grpc.ChecksumType
+ var parsedValue grpc.ChecksumType
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := grpc.ChecksumType_value[v]; ok {
+ parsedValue = grpc.ChecksumType(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = grpc.ChecksumType(vv)
+ case float64:
+ parsedValue = grpc.ChecksumType(v)
+ }
+ f = parsedValue
+ x.Type = f
+ }
+ case "hashList":
+ {
+ var f []byte
+ var list [][]byte
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.HashList = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type GetRangeHashResponse struct {
+ Body *GetRangeHashResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*GetRangeHashResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*GetRangeHashResponse)(nil)
+ _ json.Marshaler = (*GetRangeHashResponse)(nil)
+ _ json.Unmarshaler = (*GetRangeHashResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *GetRangeHashResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *GetRangeHashResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *GetRangeHashResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *GetRangeHashResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *GetRangeHashResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *GetRangeHashResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "GetRangeHashResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(GetRangeHashResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *GetRangeHashResponse) GetBody() *GetRangeHashResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *GetRangeHashResponse) SetBody(v *GetRangeHashResponse_Body) {
+ x.Body = v
+}
+func (x *GetRangeHashResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *GetRangeHashResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *GetRangeHashResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *GetRangeHashResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *GetRangeHashResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *GetRangeHashResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *GetRangeHashResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *GetRangeHashResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *GetRangeHashResponse_Body
+ f = new(GetRangeHashResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PutSingleRequest_Body struct {
+ Object *Object `json:"object"`
+ CopiesNumber []uint32 `json:"copiesNumber"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PutSingleRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*PutSingleRequest_Body)(nil)
+ _ json.Marshaler = (*PutSingleRequest_Body)(nil)
+ _ json.Unmarshaler = (*PutSingleRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PutSingleRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ var n int
+ size += proto.NestedStructureSize(1, x.Object)
+ n, _ = proto.RepeatedUInt32Size(2, x.CopiesNumber)
+ size += n
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PutSingleRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PutSingleRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Object != nil {
+ x.Object.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if len(x.CopiesNumber) != 0 {
+ mm.AppendUint32s(2, x.CopiesNumber)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PutSingleRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PutSingleRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Object
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Object")
+ }
+ x.Object = new(Object)
+ if err := x.Object.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // CopiesNumber
+ data, ok := fc.UnpackUint32s(nil)
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "CopiesNumber")
+ }
+ x.CopiesNumber = data
+ }
+ }
+ return nil
+}
+func (x *PutSingleRequest_Body) GetObject() *Object {
+ if x != nil {
+ return x.Object
+ }
+ return nil
+}
+func (x *PutSingleRequest_Body) SetObject(v *Object) {
+ x.Object = v
+}
+func (x *PutSingleRequest_Body) GetCopiesNumber() []uint32 {
+ if x != nil {
+ return x.CopiesNumber
+ }
+ return nil
+}
+func (x *PutSingleRequest_Body) SetCopiesNumber(v []uint32) {
+ x.CopiesNumber = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PutSingleRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PutSingleRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"object\":"
+ out.RawString(prefix)
+ x.Object.MarshalEasyJSON(out)
+ }
+ {
+ 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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PutSingleRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PutSingleRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "object":
+ {
+ var f *Object
+ f = new(Object)
+ f.UnmarshalEasyJSON(in)
+ x.Object = f
+ }
+ case "copiesNumber":
+ {
+ var f uint32
+ var list []uint32
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.CopiesNumber = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PutSingleRequest struct {
+ Body *PutSingleRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PutSingleRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*PutSingleRequest)(nil)
+ _ json.Marshaler = (*PutSingleRequest)(nil)
+ _ json.Unmarshaler = (*PutSingleRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PutSingleRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *PutSingleRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *PutSingleRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PutSingleRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PutSingleRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PutSingleRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PutSingleRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(PutSingleRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *PutSingleRequest) GetBody() *PutSingleRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *PutSingleRequest) SetBody(v *PutSingleRequest_Body) {
+ x.Body = v
+}
+func (x *PutSingleRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *PutSingleRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *PutSingleRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *PutSingleRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PutSingleRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PutSingleRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PutSingleRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PutSingleRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *PutSingleRequest_Body
+ f = new(PutSingleRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PutSingleResponse_Body struct {
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PutSingleResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*PutSingleResponse_Body)(nil)
+ _ json.Marshaler = (*PutSingleResponse_Body)(nil)
+ _ json.Unmarshaler = (*PutSingleResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PutSingleResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PutSingleResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PutSingleResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PutSingleResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PutSingleResponse_Body")
+ }
+ switch fc.FieldNum {
+ }
+ }
+ return nil
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PutSingleResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PutSingleResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ out.RawByte('{')
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PutSingleResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PutSingleResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PutSingleResponse struct {
+ Body *PutSingleResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PutSingleResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*PutSingleResponse)(nil)
+ _ json.Marshaler = (*PutSingleResponse)(nil)
+ _ json.Unmarshaler = (*PutSingleResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PutSingleResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *PutSingleResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *PutSingleResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PutSingleResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PutSingleResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PutSingleResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PutSingleResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(PutSingleResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *PutSingleResponse) GetBody() *PutSingleResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *PutSingleResponse) SetBody(v *PutSingleResponse_Body) {
+ x.Body = v
+}
+func (x *PutSingleResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *PutSingleResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *PutSingleResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *PutSingleResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PutSingleResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PutSingleResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PutSingleResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PutSingleResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *PutSingleResponse_Body
+ f = new(PutSingleResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PatchRequest_Body_Patch struct {
+ SourceRange *Range `json:"sourceRange"`
+ Chunk []byte `json:"chunk"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PatchRequest_Body_Patch)(nil)
+ _ encoding.ProtoUnmarshaler = (*PatchRequest_Body_Patch)(nil)
+ _ json.Marshaler = (*PatchRequest_Body_Patch)(nil)
+ _ json.Unmarshaler = (*PatchRequest_Body_Patch)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PatchRequest_Body_Patch) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.SourceRange)
+ size += proto.BytesSize(2, x.Chunk)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PatchRequest_Body_Patch) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PatchRequest_Body_Patch) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.SourceRange != nil {
+ x.SourceRange.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if len(x.Chunk) != 0 {
+ mm.AppendBytes(2, x.Chunk)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PatchRequest_Body_Patch) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PatchRequest_Body_Patch")
+ }
+ switch fc.FieldNum {
+ case 1: // SourceRange
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "SourceRange")
+ }
+ x.SourceRange = new(Range)
+ if err := x.SourceRange.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Chunk
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Chunk")
+ }
+ x.Chunk = data
+ }
+ }
+ return nil
+}
+func (x *PatchRequest_Body_Patch) GetSourceRange() *Range {
+ if x != nil {
+ return x.SourceRange
+ }
+ return nil
+}
+func (x *PatchRequest_Body_Patch) SetSourceRange(v *Range) {
+ x.SourceRange = v
+}
+func (x *PatchRequest_Body_Patch) GetChunk() []byte {
+ if x != nil {
+ return x.Chunk
+ }
+ return nil
+}
+func (x *PatchRequest_Body_Patch) SetChunk(v []byte) {
+ x.Chunk = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PatchRequest_Body_Patch) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PatchRequest_Body_Patch) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"sourceRange\":"
+ out.RawString(prefix)
+ x.SourceRange.MarshalEasyJSON(out)
+ }
+ {
+ 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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PatchRequest_Body_Patch) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PatchRequest_Body_Patch) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "sourceRange":
+ {
+ var f *Range
+ f = new(Range)
+ f.UnmarshalEasyJSON(in)
+ x.SourceRange = f
+ }
+ case "chunk":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Chunk = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PatchRequest_Body struct {
+ Address *grpc.Address `json:"address"`
+ NewAttributes []Header_Attribute `json:"newAttributes"`
+ ReplaceAttributes bool `json:"replaceAttributes"`
+ Patch *PatchRequest_Body_Patch `json:"patch"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PatchRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*PatchRequest_Body)(nil)
+ _ json.Marshaler = (*PatchRequest_Body)(nil)
+ _ json.Unmarshaler = (*PatchRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PatchRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Address)
+ for i := range x.NewAttributes {
+ size += proto.NestedStructureSizeUnchecked(2, &x.NewAttributes[i])
+ }
+ size += proto.BoolSize(3, x.ReplaceAttributes)
+ size += proto.NestedStructureSize(4, x.Patch)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PatchRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PatchRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Address != nil {
+ x.Address.EmitProtobuf(mm.AppendMessage(1))
+ }
+ for i := range x.NewAttributes {
+ x.NewAttributes[i].EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.ReplaceAttributes {
+ mm.AppendBool(3, x.ReplaceAttributes)
+ }
+ if x.Patch != nil {
+ x.Patch.EmitProtobuf(mm.AppendMessage(4))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PatchRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PatchRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Address
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Address")
+ }
+ x.Address = new(grpc.Address)
+ if err := x.Address.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // NewAttributes
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "NewAttributes")
+ }
+ x.NewAttributes = append(x.NewAttributes, Header_Attribute{})
+ ff := &x.NewAttributes[len(x.NewAttributes)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // ReplaceAttributes
+ data, ok := fc.Bool()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ReplaceAttributes")
+ }
+ x.ReplaceAttributes = data
+ case 4: // Patch
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Patch")
+ }
+ x.Patch = new(PatchRequest_Body_Patch)
+ if err := x.Patch.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *PatchRequest_Body) GetAddress() *grpc.Address {
+ if x != nil {
+ return x.Address
+ }
+ return nil
+}
+func (x *PatchRequest_Body) SetAddress(v *grpc.Address) {
+ x.Address = v
+}
+func (x *PatchRequest_Body) GetNewAttributes() []Header_Attribute {
+ if x != nil {
+ return x.NewAttributes
+ }
+ return nil
+}
+func (x *PatchRequest_Body) SetNewAttributes(v []Header_Attribute) {
+ x.NewAttributes = v
+}
+func (x *PatchRequest_Body) GetReplaceAttributes() bool {
+ if x != nil {
+ return x.ReplaceAttributes
+ }
+ return false
+}
+func (x *PatchRequest_Body) SetReplaceAttributes(v bool) {
+ x.ReplaceAttributes = v
+}
+func (x *PatchRequest_Body) GetPatch() *PatchRequest_Body_Patch {
+ if x != nil {
+ return x.Patch
+ }
+ return nil
+}
+func (x *PatchRequest_Body) SetPatch(v *PatchRequest_Body_Patch) {
+ x.Patch = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PatchRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PatchRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"address\":"
+ out.RawString(prefix)
+ x.Address.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"replaceAttributes\":"
+ out.RawString(prefix)
+ out.Bool(x.ReplaceAttributes)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"patch\":"
+ out.RawString(prefix)
+ x.Patch.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PatchRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PatchRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "address":
+ {
+ var f *grpc.Address
+ f = new(grpc.Address)
+ f.UnmarshalEasyJSON(in)
+ x.Address = f
+ }
+ case "newAttributes":
+ {
+ var f Header_Attribute
+ var list []Header_Attribute
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = Header_Attribute{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.NewAttributes = list
+ in.Delim(']')
+ }
+ case "replaceAttributes":
+ {
+ var f bool
+ f = in.Bool()
+ x.ReplaceAttributes = f
+ }
+ case "patch":
+ {
+ var f *PatchRequest_Body_Patch
+ f = new(PatchRequest_Body_Patch)
+ f.UnmarshalEasyJSON(in)
+ x.Patch = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PatchRequest struct {
+ Body *PatchRequest_Body `json:"body"`
+ MetaHeader *grpc1.RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PatchRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*PatchRequest)(nil)
+ _ json.Marshaler = (*PatchRequest)(nil)
+ _ json.Unmarshaler = (*PatchRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PatchRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *PatchRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *PatchRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PatchRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PatchRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PatchRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PatchRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(PatchRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *PatchRequest) GetBody() *PatchRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *PatchRequest) SetBody(v *PatchRequest_Body) {
+ x.Body = v
+}
+func (x *PatchRequest) GetMetaHeader() *grpc1.RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *PatchRequest) SetMetaHeader(v *grpc1.RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *PatchRequest) GetVerifyHeader() *grpc1.RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *PatchRequest) SetVerifyHeader(v *grpc1.RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PatchRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PatchRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PatchRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PatchRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *PatchRequest_Body
+ f = new(PatchRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.RequestMetaHeader
+ f = new(grpc1.RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.RequestVerificationHeader
+ f = new(grpc1.RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PatchResponse_Body struct {
+ ObjectId *grpc.ObjectID `json:"objectId"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PatchResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*PatchResponse_Body)(nil)
+ _ json.Marshaler = (*PatchResponse_Body)(nil)
+ _ json.Unmarshaler = (*PatchResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PatchResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.ObjectId)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PatchResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PatchResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.ObjectId != nil {
+ x.ObjectId.EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PatchResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PatchResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // ObjectId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ObjectId")
+ }
+ x.ObjectId = new(grpc.ObjectID)
+ if err := x.ObjectId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *PatchResponse_Body) GetObjectId() *grpc.ObjectID {
+ if x != nil {
+ return x.ObjectId
+ }
+ return nil
+}
+func (x *PatchResponse_Body) SetObjectId(v *grpc.ObjectID) {
+ x.ObjectId = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PatchResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PatchResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"objectId\":"
+ out.RawString(prefix)
+ x.ObjectId.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PatchResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PatchResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "objectId":
+ {
+ var f *grpc.ObjectID
+ f = new(grpc.ObjectID)
+ f.UnmarshalEasyJSON(in)
+ x.ObjectId = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type PatchResponse struct {
+ Body *PatchResponse_Body `json:"body"`
+ MetaHeader *grpc1.ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *grpc1.ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*PatchResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*PatchResponse)(nil)
+ _ json.Marshaler = (*PatchResponse)(nil)
+ _ json.Unmarshaler = (*PatchResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *PatchResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *PatchResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *PatchResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *PatchResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *PatchResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *PatchResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "PatchResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(PatchResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(grpc1.ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(grpc1.ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *PatchResponse) GetBody() *PatchResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *PatchResponse) SetBody(v *PatchResponse_Body) {
+ x.Body = v
+}
+func (x *PatchResponse) GetMetaHeader() *grpc1.ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *PatchResponse) SetMetaHeader(v *grpc1.ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *PatchResponse) GetVerifyHeader() *grpc1.ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *PatchResponse) SetVerifyHeader(v *grpc1.ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *PatchResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *PatchResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *PatchResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *PatchResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *PatchResponse_Body
+ f = new(PatchResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *grpc1.ResponseMetaHeader
+ f = new(grpc1.ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *grpc1.ResponseVerificationHeader
+ f = new(grpc1.ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/object/grpc/service_frostfs_fuzz.go b/api/object/grpc/service_frostfs_fuzz.go
new file mode 100644
index 0000000..f58ee01
--- /dev/null
+++ b/api/object/grpc/service_frostfs_fuzz.go
@@ -0,0 +1,387 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package object
+
+func DoFuzzProtoGetRequest(data []byte) int {
+ msg := new(GetRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONGetRequest(data []byte) int {
+ msg := new(GetRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoGetResponse(data []byte) int {
+ msg := new(GetResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONGetResponse(data []byte) int {
+ msg := new(GetResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoPutRequest(data []byte) int {
+ msg := new(PutRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONPutRequest(data []byte) int {
+ msg := new(PutRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoPutResponse(data []byte) int {
+ msg := new(PutResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONPutResponse(data []byte) int {
+ msg := new(PutResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoDeleteRequest(data []byte) int {
+ msg := new(DeleteRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONDeleteRequest(data []byte) int {
+ msg := new(DeleteRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoDeleteResponse(data []byte) int {
+ msg := new(DeleteResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONDeleteResponse(data []byte) int {
+ msg := new(DeleteResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoHeadRequest(data []byte) int {
+ msg := new(HeadRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONHeadRequest(data []byte) int {
+ msg := new(HeadRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoHeaderWithSignature(data []byte) int {
+ msg := new(HeaderWithSignature)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONHeaderWithSignature(data []byte) int {
+ msg := new(HeaderWithSignature)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoHeadResponse(data []byte) int {
+ msg := new(HeadResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONHeadResponse(data []byte) int {
+ msg := new(HeadResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoSearchRequest(data []byte) int {
+ msg := new(SearchRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONSearchRequest(data []byte) int {
+ msg := new(SearchRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoSearchResponse(data []byte) int {
+ msg := new(SearchResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONSearchResponse(data []byte) int {
+ msg := new(SearchResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoRange(data []byte) int {
+ msg := new(Range)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONRange(data []byte) int {
+ msg := new(Range)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoGetRangeRequest(data []byte) int {
+ msg := new(GetRangeRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONGetRangeRequest(data []byte) int {
+ msg := new(GetRangeRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoGetRangeResponse(data []byte) int {
+ msg := new(GetRangeResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONGetRangeResponse(data []byte) int {
+ msg := new(GetRangeResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoGetRangeHashRequest(data []byte) int {
+ msg := new(GetRangeHashRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONGetRangeHashRequest(data []byte) int {
+ msg := new(GetRangeHashRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoGetRangeHashResponse(data []byte) int {
+ msg := new(GetRangeHashResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONGetRangeHashResponse(data []byte) int {
+ msg := new(GetRangeHashResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoPutSingleRequest(data []byte) int {
+ msg := new(PutSingleRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONPutSingleRequest(data []byte) int {
+ msg := new(PutSingleRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoPutSingleResponse(data []byte) int {
+ msg := new(PutSingleResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONPutSingleResponse(data []byte) int {
+ msg := new(PutSingleResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoPatchRequest(data []byte) int {
+ msg := new(PatchRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONPatchRequest(data []byte) int {
+ msg := new(PatchRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoPatchResponse(data []byte) int {
+ msg := new(PatchResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONPatchResponse(data []byte) int {
+ msg := new(PatchResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/object/grpc/service_frostfs_test.go b/api/object/grpc/service_frostfs_test.go
new file mode 100644
index 0000000..cb4baeb
--- /dev/null
+++ b/api/object/grpc/service_frostfs_test.go
@@ -0,0 +1,211 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package object
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoGetRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoGetRequest(data)
+ })
+}
+func FuzzJSONGetRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONGetRequest(data)
+ })
+}
+func FuzzProtoGetResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoGetResponse(data)
+ })
+}
+func FuzzJSONGetResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONGetResponse(data)
+ })
+}
+func FuzzProtoPutRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoPutRequest(data)
+ })
+}
+func FuzzJSONPutRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONPutRequest(data)
+ })
+}
+func FuzzProtoPutResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoPutResponse(data)
+ })
+}
+func FuzzJSONPutResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONPutResponse(data)
+ })
+}
+func FuzzProtoDeleteRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoDeleteRequest(data)
+ })
+}
+func FuzzJSONDeleteRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONDeleteRequest(data)
+ })
+}
+func FuzzProtoDeleteResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoDeleteResponse(data)
+ })
+}
+func FuzzJSONDeleteResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONDeleteResponse(data)
+ })
+}
+func FuzzProtoHeadRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoHeadRequest(data)
+ })
+}
+func FuzzJSONHeadRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONHeadRequest(data)
+ })
+}
+func FuzzProtoHeaderWithSignature(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoHeaderWithSignature(data)
+ })
+}
+func FuzzJSONHeaderWithSignature(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONHeaderWithSignature(data)
+ })
+}
+func FuzzProtoHeadResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoHeadResponse(data)
+ })
+}
+func FuzzJSONHeadResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONHeadResponse(data)
+ })
+}
+func FuzzProtoSearchRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoSearchRequest(data)
+ })
+}
+func FuzzJSONSearchRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONSearchRequest(data)
+ })
+}
+func FuzzProtoSearchResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoSearchResponse(data)
+ })
+}
+func FuzzJSONSearchResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONSearchResponse(data)
+ })
+}
+func FuzzProtoRange(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoRange(data)
+ })
+}
+func FuzzJSONRange(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONRange(data)
+ })
+}
+func FuzzProtoGetRangeRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoGetRangeRequest(data)
+ })
+}
+func FuzzJSONGetRangeRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONGetRangeRequest(data)
+ })
+}
+func FuzzProtoGetRangeResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoGetRangeResponse(data)
+ })
+}
+func FuzzJSONGetRangeResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONGetRangeResponse(data)
+ })
+}
+func FuzzProtoGetRangeHashRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoGetRangeHashRequest(data)
+ })
+}
+func FuzzJSONGetRangeHashRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONGetRangeHashRequest(data)
+ })
+}
+func FuzzProtoGetRangeHashResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoGetRangeHashResponse(data)
+ })
+}
+func FuzzJSONGetRangeHashResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONGetRangeHashResponse(data)
+ })
+}
+func FuzzProtoPutSingleRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoPutSingleRequest(data)
+ })
+}
+func FuzzJSONPutSingleRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONPutSingleRequest(data)
+ })
+}
+func FuzzProtoPutSingleResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoPutSingleResponse(data)
+ })
+}
+func FuzzJSONPutSingleResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONPutSingleResponse(data)
+ })
+}
+func FuzzProtoPatchRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoPatchRequest(data)
+ })
+}
+func FuzzJSONPatchRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONPatchRequest(data)
+ })
+}
+func FuzzProtoPatchResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoPatchResponse(data)
+ })
+}
+func FuzzJSONPatchResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONPatchResponse(data)
+ })
+}
diff --git a/api/object/grpc/service_grpc.pb.go b/api/object/grpc/service_grpc.pb.go
new file mode 100644
index 0000000..eb53afe
--- /dev/null
+++ b/api/object/grpc/service_grpc.pb.go
@@ -0,0 +1,1159 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.3.0
+// - protoc v5.27.2
+// source: api/object/grpc/service.proto
+
+package object
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+const (
+ ObjectService_Get_FullMethodName = "/neo.fs.v2.object.ObjectService/Get"
+ ObjectService_Put_FullMethodName = "/neo.fs.v2.object.ObjectService/Put"
+ ObjectService_Delete_FullMethodName = "/neo.fs.v2.object.ObjectService/Delete"
+ ObjectService_Head_FullMethodName = "/neo.fs.v2.object.ObjectService/Head"
+ ObjectService_Search_FullMethodName = "/neo.fs.v2.object.ObjectService/Search"
+ ObjectService_GetRange_FullMethodName = "/neo.fs.v2.object.ObjectService/GetRange"
+ ObjectService_GetRangeHash_FullMethodName = "/neo.fs.v2.object.ObjectService/GetRangeHash"
+ ObjectService_PutSingle_FullMethodName = "/neo.fs.v2.object.ObjectService/PutSingle"
+ ObjectService_Patch_FullMethodName = "/neo.fs.v2.object.ObjectService/Patch"
+)
+
+// ObjectServiceClient is the client API for ObjectService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type ObjectServiceClient interface {
+ // Receive full object structure, including Headers and payload. Response uses
+ // gRPC stream. First response message carries the object with the requested
+ // address. Chunk messages are parts of the object's payload if it is needed.
+ // All messages, except the first one, carry payload chunks. The requested
+ // object can be restored by concatenation of object message payload and all
+ // chunks keeping the receiving order.
+ //
+ // Extended headers can change `Get` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH ] \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requsted version of Network Map for object placement
+ // calculation.
+ // * [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
+ // (`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
+ // Will try older versions (starting from `__SYSTEM__NETMAP_EPOCH`
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) if specified or the latest one
+ // otherwise) of Network Map to find an object until the depth limit is
+ // reached.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // object has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // read access to the object is denied;
+ // - **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
+ // object not found in container;
+ // - **OBJECT_ALREADY_REMOVED** (2052, SECTION_OBJECT): \
+ // the requested object has been marked as deleted;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ Get(ctx context.Context, in *GetRequest, opts ...grpc.CallOption) (ObjectService_GetClient, error)
+ // Put the object into container. Request uses gRPC stream. First message
+ // SHOULD be of PutHeader type. `ContainerID` and `OwnerID` of an object
+ // SHOULD be set. Session token SHOULD be obtained before `PUT` operation (see
+ // session package). Chunk messages are considered by server as a part of an
+ // object payload. All messages, except first one, SHOULD be payload chunks.
+ // Chunk messages SHOULD be sent in the direct order of fragmentation.
+ //
+ // Extended headers can change `Put` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requsted version of Network Map for object placement
+ // calculation.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // object has been successfully saved in the container;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // write access to the container is denied;
+ // - **LOCKED** (2050, SECTION_OBJECT): \
+ // placement of an object of type TOMBSTONE that includes at least one
+ // locked object is prohibited;
+ // - **LOCK_NON_REGULAR_OBJECT** (2051, SECTION_OBJECT): \
+ // placement of an object of type LOCK that includes at least one object of
+ // type other than REGULAR is prohibited;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object storage container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_NOT_FOUND** (4096, SECTION_SESSION): \
+ // (for trusted object preparation) session private key does not exist or
+ // has
+ // been deleted;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ Put(ctx context.Context, opts ...grpc.CallOption) (ObjectService_PutClient, error)
+ // Delete the object from a container. There is no immediate removal
+ // guarantee. Object will be marked for removal and deleted eventually.
+ //
+ // Extended headers can change `Delete` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH ] \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requested version of Network Map for object placement
+ // calculation.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // object has been successfully marked to be removed from the container;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // delete access to the object is denied;
+ // - **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
+ // the object could not be deleted because it has not been \
+ // found within the container;
+ // - **LOCKED** (2050, SECTION_OBJECT): \
+ // deleting a locked object is prohibited;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*DeleteResponse, error)
+ // Returns the object Headers without data payload. By default full header is
+ // returned. If `main_only` request field is set, the short header with only
+ // the very minimal information will be returned instead.
+ //
+ // Extended headers can change `Head` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH ] \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requested version of Network Map for object placement
+ // calculation.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // object header has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // access to operation HEAD of the object is denied;
+ // - **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
+ // object not found in container;
+ // - **OBJECT_ALREADY_REMOVED** (2052, SECTION_OBJECT): \
+ // the requested object has been marked as deleted;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ Head(ctx context.Context, in *HeadRequest, opts ...grpc.CallOption) (*HeadResponse, error)
+ // Search objects in container. Search query allows to match by Object
+ // Header's filed values. Please see the corresponding FrostFS Technical
+ // Specification section for more details.
+ //
+ // Extended headers can change `Search` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH ] \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requested version of Network Map for object placement
+ // calculation.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // objects have been successfully selected;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // access to operation SEARCH of the object is denied;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // search container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ Search(ctx context.Context, in *SearchRequest, opts ...grpc.CallOption) (ObjectService_SearchClient, error)
+ // Get byte range of data payload. Range is set as an (offset, length) tuple.
+ // Like in `Get` method, the response uses gRPC stream. Requested range can be
+ // restored by concatenation of all received payload chunks keeping the
+ // receiving order.
+ //
+ // Extended headers can change `GetRange` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH ] \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requested version of Network Map for object placement
+ // calculation.
+ // * [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
+ // (`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
+ // Will try older versions of Network Map to find an object until the depth
+ // limit is reached.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // data range of the object payload has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // access to operation RANGE of the object is denied;
+ // - **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
+ // object not found in container;
+ // - **OBJECT_ALREADY_REMOVED** (2052, SECTION_OBJECT): \
+ // the requested object has been marked as deleted.
+ // - **OUT_OF_RANGE** (2053, SECTION_OBJECT): \
+ // the requested range is out of bounds;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ GetRange(ctx context.Context, in *GetRangeRequest, opts ...grpc.CallOption) (ObjectService_GetRangeClient, error)
+ // Returns homomorphic or regular hash of object's payload range after
+ // applying XOR operation with the provided `salt`. Ranges are set of (offset,
+ // length) tuples. Hashes order in response corresponds to the ranges order in
+ // the request. Note that hash is calculated for XORed data.
+ //
+ // Extended headers can change `GetRangeHash` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH ] \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requested version of Network Map for object placement
+ // calculation.
+ // * [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
+ // (`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
+ // Will try older versions of Network Map to find an object until the depth
+ // limit is reached.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // data range of the object payload has been successfully hashed;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // access to operation RANGEHASH of the object is denied;
+ // - **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
+ // object not found in container;
+ // - **OUT_OF_RANGE** (2053, SECTION_OBJECT): \
+ // the requested range is out of bounds;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ GetRangeHash(ctx context.Context, in *GetRangeHashRequest, opts ...grpc.CallOption) (*GetRangeHashResponse, error)
+ // Put the prepared object into container.
+ // `ContainerID`, `ObjectID`, `OwnerID`, `PayloadHash` and `PayloadLength` of
+ // an object MUST be set.
+ //
+ // Extended headers can change `Put` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requested version of Network Map for object placement
+ // calculation.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // object has been successfully saved in the container;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // write access to the container is denied;
+ // - **LOCKED** (2050, SECTION_OBJECT): \
+ // placement of an object of type TOMBSTONE that includes at least one
+ // locked object is prohibited;
+ // - **LOCK_NON_REGULAR_OBJECT** (2051, SECTION_OBJECT): \
+ // placement of an object of type LOCK that includes at least one object of
+ // type other than REGULAR is prohibited;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object storage container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_NOT_FOUND** (4096, SECTION_SESSION): \
+ // (for trusted object preparation) session private key does not exist or
+ // has
+ // been deleted;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ PutSingle(ctx context.Context, in *PutSingleRequest, opts ...grpc.CallOption) (*PutSingleResponse, error)
+ // Patch the object. Request uses gRPC stream. First message must set
+ // the address of the object that is going to get patched. If the object's
+ // attributes are patched, then these attrubutes must be set only within the
+ // first stream message.
+ //
+ // If the patch request is performed by NOT the object's owner but if the
+ // actor has the permission to perform the patch, then `OwnerID` of the object
+ // is changed. In this case the object's owner loses the object's ownership
+ // after the patch request is successfully done.
+ //
+ // As objects are content-addressable the patching causes new object ID
+ // generation for the patched object. This object id is set witihn
+ // `PatchResponse`. But the object id may remain unchanged in such cases:
+ // 1. The chunk of the applying patch contains the same value as the object's
+ // payload within the same range;
+ // 2. The patch that reverts the changes applied by preceding patch;
+ // 3. The application of the same patches for the object a few times.
+ //
+ // Extended headers can change `Patch` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requsted version of Network Map for object placement
+ // calculation.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // object has been successfully patched and saved in the container;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // write access to the container is denied;
+ // - **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
+ // object not found in container;
+ // - **OBJECT_ALREADY_REMOVED** (2052, SECTION_OBJECT): \
+ // the requested object has been marked as deleted.
+ // - **OUT_OF_RANGE** (2053, SECTION_OBJECT): \
+ // the requested range is out of bounds;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object storage container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_NOT_FOUND** (4096, SECTION_SESSION): \
+ // (for trusted object preparation) session private key does not exist or
+ // has been deleted;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ Patch(ctx context.Context, opts ...grpc.CallOption) (ObjectService_PatchClient, error)
+}
+
+type objectServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewObjectServiceClient(cc grpc.ClientConnInterface) ObjectServiceClient {
+ return &objectServiceClient{cc}
+}
+
+func (c *objectServiceClient) Get(ctx context.Context, in *GetRequest, opts ...grpc.CallOption) (ObjectService_GetClient, error) {
+ stream, err := c.cc.NewStream(ctx, &ObjectService_ServiceDesc.Streams[0], ObjectService_Get_FullMethodName, opts...)
+ if err != nil {
+ return nil, err
+ }
+ x := &objectServiceGetClient{stream}
+ if err := x.ClientStream.SendMsg(in); err != nil {
+ return nil, err
+ }
+ if err := x.ClientStream.CloseSend(); err != nil {
+ return nil, err
+ }
+ return x, nil
+}
+
+type ObjectService_GetClient interface {
+ Recv() (*GetResponse, error)
+ grpc.ClientStream
+}
+
+type objectServiceGetClient struct {
+ grpc.ClientStream
+}
+
+func (x *objectServiceGetClient) Recv() (*GetResponse, error) {
+ m := new(GetResponse)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
+}
+
+func (c *objectServiceClient) Put(ctx context.Context, opts ...grpc.CallOption) (ObjectService_PutClient, error) {
+ stream, err := c.cc.NewStream(ctx, &ObjectService_ServiceDesc.Streams[1], ObjectService_Put_FullMethodName, opts...)
+ if err != nil {
+ return nil, err
+ }
+ x := &objectServicePutClient{stream}
+ return x, nil
+}
+
+type ObjectService_PutClient interface {
+ Send(*PutRequest) error
+ CloseAndRecv() (*PutResponse, error)
+ grpc.ClientStream
+}
+
+type objectServicePutClient struct {
+ grpc.ClientStream
+}
+
+func (x *objectServicePutClient) Send(m *PutRequest) error {
+ return x.ClientStream.SendMsg(m)
+}
+
+func (x *objectServicePutClient) CloseAndRecv() (*PutResponse, error) {
+ if err := x.ClientStream.CloseSend(); err != nil {
+ return nil, err
+ }
+ m := new(PutResponse)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
+}
+
+func (c *objectServiceClient) Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*DeleteResponse, error) {
+ out := new(DeleteResponse)
+ err := c.cc.Invoke(ctx, ObjectService_Delete_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *objectServiceClient) Head(ctx context.Context, in *HeadRequest, opts ...grpc.CallOption) (*HeadResponse, error) {
+ out := new(HeadResponse)
+ err := c.cc.Invoke(ctx, ObjectService_Head_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *objectServiceClient) Search(ctx context.Context, in *SearchRequest, opts ...grpc.CallOption) (ObjectService_SearchClient, error) {
+ stream, err := c.cc.NewStream(ctx, &ObjectService_ServiceDesc.Streams[2], ObjectService_Search_FullMethodName, opts...)
+ if err != nil {
+ return nil, err
+ }
+ x := &objectServiceSearchClient{stream}
+ if err := x.ClientStream.SendMsg(in); err != nil {
+ return nil, err
+ }
+ if err := x.ClientStream.CloseSend(); err != nil {
+ return nil, err
+ }
+ return x, nil
+}
+
+type ObjectService_SearchClient interface {
+ Recv() (*SearchResponse, error)
+ grpc.ClientStream
+}
+
+type objectServiceSearchClient struct {
+ grpc.ClientStream
+}
+
+func (x *objectServiceSearchClient) Recv() (*SearchResponse, error) {
+ m := new(SearchResponse)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
+}
+
+func (c *objectServiceClient) GetRange(ctx context.Context, in *GetRangeRequest, opts ...grpc.CallOption) (ObjectService_GetRangeClient, error) {
+ stream, err := c.cc.NewStream(ctx, &ObjectService_ServiceDesc.Streams[3], ObjectService_GetRange_FullMethodName, opts...)
+ if err != nil {
+ return nil, err
+ }
+ x := &objectServiceGetRangeClient{stream}
+ if err := x.ClientStream.SendMsg(in); err != nil {
+ return nil, err
+ }
+ if err := x.ClientStream.CloseSend(); err != nil {
+ return nil, err
+ }
+ return x, nil
+}
+
+type ObjectService_GetRangeClient interface {
+ Recv() (*GetRangeResponse, error)
+ grpc.ClientStream
+}
+
+type objectServiceGetRangeClient struct {
+ grpc.ClientStream
+}
+
+func (x *objectServiceGetRangeClient) Recv() (*GetRangeResponse, error) {
+ m := new(GetRangeResponse)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
+}
+
+func (c *objectServiceClient) GetRangeHash(ctx context.Context, in *GetRangeHashRequest, opts ...grpc.CallOption) (*GetRangeHashResponse, error) {
+ out := new(GetRangeHashResponse)
+ err := c.cc.Invoke(ctx, ObjectService_GetRangeHash_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *objectServiceClient) PutSingle(ctx context.Context, in *PutSingleRequest, opts ...grpc.CallOption) (*PutSingleResponse, error) {
+ out := new(PutSingleResponse)
+ err := c.cc.Invoke(ctx, ObjectService_PutSingle_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *objectServiceClient) Patch(ctx context.Context, opts ...grpc.CallOption) (ObjectService_PatchClient, error) {
+ stream, err := c.cc.NewStream(ctx, &ObjectService_ServiceDesc.Streams[4], ObjectService_Patch_FullMethodName, opts...)
+ if err != nil {
+ return nil, err
+ }
+ x := &objectServicePatchClient{stream}
+ return x, nil
+}
+
+type ObjectService_PatchClient interface {
+ Send(*PatchRequest) error
+ CloseAndRecv() (*PatchResponse, error)
+ grpc.ClientStream
+}
+
+type objectServicePatchClient struct {
+ grpc.ClientStream
+}
+
+func (x *objectServicePatchClient) Send(m *PatchRequest) error {
+ return x.ClientStream.SendMsg(m)
+}
+
+func (x *objectServicePatchClient) CloseAndRecv() (*PatchResponse, error) {
+ if err := x.ClientStream.CloseSend(); err != nil {
+ return nil, err
+ }
+ m := new(PatchResponse)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
+}
+
+// ObjectServiceServer is the server API for ObjectService service.
+// All implementations should embed UnimplementedObjectServiceServer
+// for forward compatibility
+type ObjectServiceServer interface {
+ // Receive full object structure, including Headers and payload. Response uses
+ // gRPC stream. First response message carries the object with the requested
+ // address. Chunk messages are parts of the object's payload if it is needed.
+ // All messages, except the first one, carry payload chunks. The requested
+ // object can be restored by concatenation of object message payload and all
+ // chunks keeping the receiving order.
+ //
+ // Extended headers can change `Get` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH ] \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requsted version of Network Map for object placement
+ // calculation.
+ // * [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
+ // (`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
+ // Will try older versions (starting from `__SYSTEM__NETMAP_EPOCH`
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) if specified or the latest one
+ // otherwise) of Network Map to find an object until the depth limit is
+ // reached.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // object has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // read access to the object is denied;
+ // - **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
+ // object not found in container;
+ // - **OBJECT_ALREADY_REMOVED** (2052, SECTION_OBJECT): \
+ // the requested object has been marked as deleted;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ Get(*GetRequest, ObjectService_GetServer) error
+ // Put the object into container. Request uses gRPC stream. First message
+ // SHOULD be of PutHeader type. `ContainerID` and `OwnerID` of an object
+ // SHOULD be set. Session token SHOULD be obtained before `PUT` operation (see
+ // session package). Chunk messages are considered by server as a part of an
+ // object payload. All messages, except first one, SHOULD be payload chunks.
+ // Chunk messages SHOULD be sent in the direct order of fragmentation.
+ //
+ // Extended headers can change `Put` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requsted version of Network Map for object placement
+ // calculation.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // object has been successfully saved in the container;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // write access to the container is denied;
+ // - **LOCKED** (2050, SECTION_OBJECT): \
+ // placement of an object of type TOMBSTONE that includes at least one
+ // locked object is prohibited;
+ // - **LOCK_NON_REGULAR_OBJECT** (2051, SECTION_OBJECT): \
+ // placement of an object of type LOCK that includes at least one object of
+ // type other than REGULAR is prohibited;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object storage container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_NOT_FOUND** (4096, SECTION_SESSION): \
+ // (for trusted object preparation) session private key does not exist or
+ // has
+ // been deleted;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ Put(ObjectService_PutServer) error
+ // Delete the object from a container. There is no immediate removal
+ // guarantee. Object will be marked for removal and deleted eventually.
+ //
+ // Extended headers can change `Delete` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH ] \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requested version of Network Map for object placement
+ // calculation.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // object has been successfully marked to be removed from the container;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // delete access to the object is denied;
+ // - **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
+ // the object could not be deleted because it has not been \
+ // found within the container;
+ // - **LOCKED** (2050, SECTION_OBJECT): \
+ // deleting a locked object is prohibited;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ Delete(context.Context, *DeleteRequest) (*DeleteResponse, error)
+ // Returns the object Headers without data payload. By default full header is
+ // returned. If `main_only` request field is set, the short header with only
+ // the very minimal information will be returned instead.
+ //
+ // Extended headers can change `Head` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH ] \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requested version of Network Map for object placement
+ // calculation.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // object header has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // access to operation HEAD of the object is denied;
+ // - **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
+ // object not found in container;
+ // - **OBJECT_ALREADY_REMOVED** (2052, SECTION_OBJECT): \
+ // the requested object has been marked as deleted;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ Head(context.Context, *HeadRequest) (*HeadResponse, error)
+ // Search objects in container. Search query allows to match by Object
+ // Header's filed values. Please see the corresponding FrostFS Technical
+ // Specification section for more details.
+ //
+ // Extended headers can change `Search` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH ] \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requested version of Network Map for object placement
+ // calculation.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // objects have been successfully selected;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // access to operation SEARCH of the object is denied;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // search container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ Search(*SearchRequest, ObjectService_SearchServer) error
+ // Get byte range of data payload. Range is set as an (offset, length) tuple.
+ // Like in `Get` method, the response uses gRPC stream. Requested range can be
+ // restored by concatenation of all received payload chunks keeping the
+ // receiving order.
+ //
+ // Extended headers can change `GetRange` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH ] \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requested version of Network Map for object placement
+ // calculation.
+ // * [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
+ // (`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
+ // Will try older versions of Network Map to find an object until the depth
+ // limit is reached.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // data range of the object payload has been successfully read;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // access to operation RANGE of the object is denied;
+ // - **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
+ // object not found in container;
+ // - **OBJECT_ALREADY_REMOVED** (2052, SECTION_OBJECT): \
+ // the requested object has been marked as deleted.
+ // - **OUT_OF_RANGE** (2053, SECTION_OBJECT): \
+ // the requested range is out of bounds;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ GetRange(*GetRangeRequest, ObjectService_GetRangeServer) error
+ // Returns homomorphic or regular hash of object's payload range after
+ // applying XOR operation with the provided `salt`. Ranges are set of (offset,
+ // length) tuples. Hashes order in response corresponds to the ranges order in
+ // the request. Note that hash is calculated for XORed data.
+ //
+ // Extended headers can change `GetRangeHash` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH ] \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requested version of Network Map for object placement
+ // calculation.
+ // * [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
+ // (`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
+ // Will try older versions of Network Map to find an object until the depth
+ // limit is reached.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // data range of the object payload has been successfully hashed;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // access to operation RANGEHASH of the object is denied;
+ // - **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
+ // object not found in container;
+ // - **OUT_OF_RANGE** (2053, SECTION_OBJECT): \
+ // the requested range is out of bounds;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ GetRangeHash(context.Context, *GetRangeHashRequest) (*GetRangeHashResponse, error)
+ // Put the prepared object into container.
+ // `ContainerID`, `ObjectID`, `OwnerID`, `PayloadHash` and `PayloadLength` of
+ // an object MUST be set.
+ //
+ // Extended headers can change `Put` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requested version of Network Map for object placement
+ // calculation.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // object has been successfully saved in the container;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // write access to the container is denied;
+ // - **LOCKED** (2050, SECTION_OBJECT): \
+ // placement of an object of type TOMBSTONE that includes at least one
+ // locked object is prohibited;
+ // - **LOCK_NON_REGULAR_OBJECT** (2051, SECTION_OBJECT): \
+ // placement of an object of type LOCK that includes at least one object of
+ // type other than REGULAR is prohibited;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object storage container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_NOT_FOUND** (4096, SECTION_SESSION): \
+ // (for trusted object preparation) session private key does not exist or
+ // has
+ // been deleted;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ PutSingle(context.Context, *PutSingleRequest) (*PutSingleResponse, error)
+ // Patch the object. Request uses gRPC stream. First message must set
+ // the address of the object that is going to get patched. If the object's
+ // attributes are patched, then these attrubutes must be set only within the
+ // first stream message.
+ //
+ // If the patch request is performed by NOT the object's owner but if the
+ // actor has the permission to perform the patch, then `OwnerID` of the object
+ // is changed. In this case the object's owner loses the object's ownership
+ // after the patch request is successfully done.
+ //
+ // As objects are content-addressable the patching causes new object ID
+ // generation for the patched object. This object id is set witihn
+ // `PatchResponse`. But the object id may remain unchanged in such cases:
+ // 1. The chunk of the applying patch contains the same value as the object's
+ // payload within the same range;
+ // 2. The patch that reverts the changes applied by preceding patch;
+ // 3. The application of the same patches for the object a few times.
+ //
+ // Extended headers can change `Patch` behaviour:
+ // * [ __SYSTEM__NETMAP_EPOCH \
+ // (`__NEOFS__NETMAP_EPOCH` is deprecated) \
+ // Will use the requsted version of Network Map for object placement
+ // calculation.
+ //
+ // Please refer to detailed `XHeader` description.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS): \
+ // object has been successfully patched and saved in the container;
+ // - Common failures (SECTION_FAILURE_COMMON);
+ // - **ACCESS_DENIED** (2048, SECTION_OBJECT): \
+ // write access to the container is denied;
+ // - **OBJECT_NOT_FOUND** (2049, SECTION_OBJECT): \
+ // object not found in container;
+ // - **OBJECT_ALREADY_REMOVED** (2052, SECTION_OBJECT): \
+ // the requested object has been marked as deleted.
+ // - **OUT_OF_RANGE** (2053, SECTION_OBJECT): \
+ // the requested range is out of bounds;
+ // - **CONTAINER_NOT_FOUND** (3072, SECTION_CONTAINER): \
+ // object storage container not found;
+ // - **CONTAINER_ACCESS_DENIED** (3074, SECTION_CONTAINER): \
+ // access to container is denied;
+ // - **TOKEN_NOT_FOUND** (4096, SECTION_SESSION): \
+ // (for trusted object preparation) session private key does not exist or
+ // has been deleted;
+ // - **TOKEN_EXPIRED** (4097, SECTION_SESSION): \
+ // provided session token has expired.
+ Patch(ObjectService_PatchServer) error
+}
+
+// UnimplementedObjectServiceServer should be embedded to have forward compatible implementations.
+type UnimplementedObjectServiceServer struct {
+}
+
+func (UnimplementedObjectServiceServer) Get(*GetRequest, ObjectService_GetServer) error {
+ return status.Errorf(codes.Unimplemented, "method Get not implemented")
+}
+func (UnimplementedObjectServiceServer) Put(ObjectService_PutServer) error {
+ return status.Errorf(codes.Unimplemented, "method Put not implemented")
+}
+func (UnimplementedObjectServiceServer) Delete(context.Context, *DeleteRequest) (*DeleteResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented")
+}
+func (UnimplementedObjectServiceServer) Head(context.Context, *HeadRequest) (*HeadResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Head not implemented")
+}
+func (UnimplementedObjectServiceServer) Search(*SearchRequest, ObjectService_SearchServer) error {
+ return status.Errorf(codes.Unimplemented, "method Search not implemented")
+}
+func (UnimplementedObjectServiceServer) GetRange(*GetRangeRequest, ObjectService_GetRangeServer) error {
+ return status.Errorf(codes.Unimplemented, "method GetRange not implemented")
+}
+func (UnimplementedObjectServiceServer) GetRangeHash(context.Context, *GetRangeHashRequest) (*GetRangeHashResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetRangeHash not implemented")
+}
+func (UnimplementedObjectServiceServer) PutSingle(context.Context, *PutSingleRequest) (*PutSingleResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method PutSingle not implemented")
+}
+func (UnimplementedObjectServiceServer) Patch(ObjectService_PatchServer) error {
+ return status.Errorf(codes.Unimplemented, "method Patch not implemented")
+}
+
+// UnsafeObjectServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to ObjectServiceServer will
+// result in compilation errors.
+type UnsafeObjectServiceServer interface {
+ mustEmbedUnimplementedObjectServiceServer()
+}
+
+func RegisterObjectServiceServer(s grpc.ServiceRegistrar, srv ObjectServiceServer) {
+ s.RegisterService(&ObjectService_ServiceDesc, srv)
+}
+
+func _ObjectService_Get_Handler(srv interface{}, stream grpc.ServerStream) error {
+ m := new(GetRequest)
+ if err := stream.RecvMsg(m); err != nil {
+ return err
+ }
+ return srv.(ObjectServiceServer).Get(m, &objectServiceGetServer{stream})
+}
+
+type ObjectService_GetServer interface {
+ Send(*GetResponse) error
+ grpc.ServerStream
+}
+
+type objectServiceGetServer struct {
+ grpc.ServerStream
+}
+
+func (x *objectServiceGetServer) Send(m *GetResponse) error {
+ return x.ServerStream.SendMsg(m)
+}
+
+func _ObjectService_Put_Handler(srv interface{}, stream grpc.ServerStream) error {
+ return srv.(ObjectServiceServer).Put(&objectServicePutServer{stream})
+}
+
+type ObjectService_PutServer interface {
+ SendAndClose(*PutResponse) error
+ Recv() (*PutRequest, error)
+ grpc.ServerStream
+}
+
+type objectServicePutServer struct {
+ grpc.ServerStream
+}
+
+func (x *objectServicePutServer) SendAndClose(m *PutResponse) error {
+ return x.ServerStream.SendMsg(m)
+}
+
+func (x *objectServicePutServer) Recv() (*PutRequest, error) {
+ m := new(PutRequest)
+ if err := x.ServerStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
+}
+
+func _ObjectService_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(DeleteRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ObjectServiceServer).Delete(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: ObjectService_Delete_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ObjectServiceServer).Delete(ctx, req.(*DeleteRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _ObjectService_Head_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(HeadRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ObjectServiceServer).Head(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: ObjectService_Head_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ObjectServiceServer).Head(ctx, req.(*HeadRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _ObjectService_Search_Handler(srv interface{}, stream grpc.ServerStream) error {
+ m := new(SearchRequest)
+ if err := stream.RecvMsg(m); err != nil {
+ return err
+ }
+ return srv.(ObjectServiceServer).Search(m, &objectServiceSearchServer{stream})
+}
+
+type ObjectService_SearchServer interface {
+ Send(*SearchResponse) error
+ grpc.ServerStream
+}
+
+type objectServiceSearchServer struct {
+ grpc.ServerStream
+}
+
+func (x *objectServiceSearchServer) Send(m *SearchResponse) error {
+ return x.ServerStream.SendMsg(m)
+}
+
+func _ObjectService_GetRange_Handler(srv interface{}, stream grpc.ServerStream) error {
+ m := new(GetRangeRequest)
+ if err := stream.RecvMsg(m); err != nil {
+ return err
+ }
+ return srv.(ObjectServiceServer).GetRange(m, &objectServiceGetRangeServer{stream})
+}
+
+type ObjectService_GetRangeServer interface {
+ Send(*GetRangeResponse) error
+ grpc.ServerStream
+}
+
+type objectServiceGetRangeServer struct {
+ grpc.ServerStream
+}
+
+func (x *objectServiceGetRangeServer) Send(m *GetRangeResponse) error {
+ return x.ServerStream.SendMsg(m)
+}
+
+func _ObjectService_GetRangeHash_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetRangeHashRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ObjectServiceServer).GetRangeHash(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: ObjectService_GetRangeHash_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ObjectServiceServer).GetRangeHash(ctx, req.(*GetRangeHashRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _ObjectService_PutSingle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(PutSingleRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ObjectServiceServer).PutSingle(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: ObjectService_PutSingle_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ObjectServiceServer).PutSingle(ctx, req.(*PutSingleRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _ObjectService_Patch_Handler(srv interface{}, stream grpc.ServerStream) error {
+ return srv.(ObjectServiceServer).Patch(&objectServicePatchServer{stream})
+}
+
+type ObjectService_PatchServer interface {
+ SendAndClose(*PatchResponse) error
+ Recv() (*PatchRequest, error)
+ grpc.ServerStream
+}
+
+type objectServicePatchServer struct {
+ grpc.ServerStream
+}
+
+func (x *objectServicePatchServer) SendAndClose(m *PatchResponse) error {
+ return x.ServerStream.SendMsg(m)
+}
+
+func (x *objectServicePatchServer) Recv() (*PatchRequest, error) {
+ m := new(PatchRequest)
+ if err := x.ServerStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
+}
+
+// ObjectService_ServiceDesc is the grpc.ServiceDesc for ObjectService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var ObjectService_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "neo.fs.v2.object.ObjectService",
+ HandlerType: (*ObjectServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Delete",
+ Handler: _ObjectService_Delete_Handler,
+ },
+ {
+ MethodName: "Head",
+ Handler: _ObjectService_Head_Handler,
+ },
+ {
+ MethodName: "GetRangeHash",
+ Handler: _ObjectService_GetRangeHash_Handler,
+ },
+ {
+ MethodName: "PutSingle",
+ Handler: _ObjectService_PutSingle_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{
+ {
+ StreamName: "Get",
+ Handler: _ObjectService_Get_Handler,
+ ServerStreams: true,
+ },
+ {
+ StreamName: "Put",
+ Handler: _ObjectService_Put_Handler,
+ ClientStreams: true,
+ },
+ {
+ StreamName: "Search",
+ Handler: _ObjectService_Search_Handler,
+ ServerStreams: true,
+ },
+ {
+ StreamName: "GetRange",
+ Handler: _ObjectService_GetRange_Handler,
+ ServerStreams: true,
+ },
+ {
+ StreamName: "Patch",
+ Handler: _ObjectService_Patch_Handler,
+ ClientStreams: true,
+ },
+ },
+ Metadata: "api/object/grpc/service.proto",
+}
diff --git a/api/object/grpc/types_frostfs.pb.go b/api/object/grpc/types_frostfs.pb.go
new file mode 100644
index 0000000..6c9925c
--- /dev/null
+++ b/api/object/grpc/types_frostfs.pb.go
@@ -0,0 +1,2992 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package object
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ grpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ grpc1 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/grpc"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+ strconv "strconv"
+)
+
+type ObjectType int32
+
+const (
+ ObjectType_REGULAR ObjectType = 0
+ ObjectType_TOMBSTONE ObjectType = 1
+ ObjectType_LOCK ObjectType = 3
+)
+
+var (
+ ObjectType_name = map[int32]string{
+ 0: "REGULAR",
+ 1: "TOMBSTONE",
+ 3: "LOCK",
+ }
+ ObjectType_value = map[string]int32{
+ "REGULAR": 0,
+ "TOMBSTONE": 1,
+ "LOCK": 3,
+ }
+)
+
+func (x ObjectType) String() string {
+ if v, ok := ObjectType_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *ObjectType) FromString(s string) bool {
+ if v, ok := ObjectType_value[s]; ok {
+ *x = ObjectType(v)
+ return true
+ }
+ return false
+}
+
+type MatchType int32
+
+const (
+ MatchType_MATCH_TYPE_UNSPECIFIED MatchType = 0
+ MatchType_STRING_EQUAL MatchType = 1
+ MatchType_STRING_NOT_EQUAL MatchType = 2
+ MatchType_NOT_PRESENT MatchType = 3
+ MatchType_COMMON_PREFIX MatchType = 4
+)
+
+var (
+ MatchType_name = map[int32]string{
+ 0: "MATCH_TYPE_UNSPECIFIED",
+ 1: "STRING_EQUAL",
+ 2: "STRING_NOT_EQUAL",
+ 3: "NOT_PRESENT",
+ 4: "COMMON_PREFIX",
+ }
+ MatchType_value = map[string]int32{
+ "MATCH_TYPE_UNSPECIFIED": 0,
+ "STRING_EQUAL": 1,
+ "STRING_NOT_EQUAL": 2,
+ "NOT_PRESENT": 3,
+ "COMMON_PREFIX": 4,
+ }
+)
+
+func (x MatchType) String() string {
+ if v, ok := MatchType_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *MatchType) FromString(s string) bool {
+ if v, ok := MatchType_value[s]; ok {
+ *x = MatchType(v)
+ return true
+ }
+ return false
+}
+
+type ShortHeader struct {
+ Version *grpc.Version `json:"version"`
+ CreationEpoch uint64 `json:"creationEpoch"`
+ OwnerId *grpc.OwnerID `json:"ownerID"`
+ ObjectType ObjectType `json:"objectType"`
+ PayloadLength uint64 `json:"payloadLength"`
+ PayloadHash *grpc.Checksum `json:"payloadHash"`
+ HomomorphicHash *grpc.Checksum `json:"homomorphicHash"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ShortHeader)(nil)
+ _ encoding.ProtoUnmarshaler = (*ShortHeader)(nil)
+ _ json.Marshaler = (*ShortHeader)(nil)
+ _ json.Unmarshaler = (*ShortHeader)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ShortHeader) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Version)
+ size += proto.UInt64Size(2, x.CreationEpoch)
+ size += proto.NestedStructureSize(3, x.OwnerId)
+ size += proto.EnumSize(4, int32(x.ObjectType))
+ size += proto.UInt64Size(5, x.PayloadLength)
+ size += proto.NestedStructureSize(6, x.PayloadHash)
+ size += proto.NestedStructureSize(7, x.HomomorphicHash)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ShortHeader) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ShortHeader) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Version != nil {
+ x.Version.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.CreationEpoch != 0 {
+ mm.AppendUint64(2, x.CreationEpoch)
+ }
+ if x.OwnerId != nil {
+ x.OwnerId.EmitProtobuf(mm.AppendMessage(3))
+ }
+ if int32(x.ObjectType) != 0 {
+ mm.AppendInt32(4, int32(x.ObjectType))
+ }
+ if x.PayloadLength != 0 {
+ mm.AppendUint64(5, x.PayloadLength)
+ }
+ if x.PayloadHash != nil {
+ x.PayloadHash.EmitProtobuf(mm.AppendMessage(6))
+ }
+ if x.HomomorphicHash != nil {
+ x.HomomorphicHash.EmitProtobuf(mm.AppendMessage(7))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ShortHeader) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ShortHeader")
+ }
+ switch fc.FieldNum {
+ case 1: // Version
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Version")
+ }
+ x.Version = new(grpc.Version)
+ if err := x.Version.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // CreationEpoch
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "CreationEpoch")
+ }
+ x.CreationEpoch = data
+ case 3: // OwnerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "OwnerId")
+ }
+ x.OwnerId = new(grpc.OwnerID)
+ if err := x.OwnerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 4: // ObjectType
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ObjectType")
+ }
+ x.ObjectType = ObjectType(data)
+ case 5: // PayloadLength
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "PayloadLength")
+ }
+ x.PayloadLength = data
+ case 6: // PayloadHash
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "PayloadHash")
+ }
+ x.PayloadHash = new(grpc.Checksum)
+ if err := x.PayloadHash.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 7: // HomomorphicHash
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "HomomorphicHash")
+ }
+ x.HomomorphicHash = new(grpc.Checksum)
+ if err := x.HomomorphicHash.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *ShortHeader) GetVersion() *grpc.Version {
+ if x != nil {
+ return x.Version
+ }
+ return nil
+}
+func (x *ShortHeader) SetVersion(v *grpc.Version) {
+ x.Version = v
+}
+func (x *ShortHeader) GetCreationEpoch() uint64 {
+ if x != nil {
+ return x.CreationEpoch
+ }
+ return 0
+}
+func (x *ShortHeader) SetCreationEpoch(v uint64) {
+ x.CreationEpoch = v
+}
+func (x *ShortHeader) GetOwnerId() *grpc.OwnerID {
+ if x != nil {
+ return x.OwnerId
+ }
+ return nil
+}
+func (x *ShortHeader) SetOwnerId(v *grpc.OwnerID) {
+ x.OwnerId = v
+}
+func (x *ShortHeader) GetObjectType() ObjectType {
+ if x != nil {
+ return x.ObjectType
+ }
+ return 0
+}
+func (x *ShortHeader) SetObjectType(v ObjectType) {
+ x.ObjectType = v
+}
+func (x *ShortHeader) GetPayloadLength() uint64 {
+ if x != nil {
+ return x.PayloadLength
+ }
+ return 0
+}
+func (x *ShortHeader) SetPayloadLength(v uint64) {
+ x.PayloadLength = v
+}
+func (x *ShortHeader) GetPayloadHash() *grpc.Checksum {
+ if x != nil {
+ return x.PayloadHash
+ }
+ return nil
+}
+func (x *ShortHeader) SetPayloadHash(v *grpc.Checksum) {
+ x.PayloadHash = v
+}
+func (x *ShortHeader) GetHomomorphicHash() *grpc.Checksum {
+ if x != nil {
+ return x.HomomorphicHash
+ }
+ return nil
+}
+func (x *ShortHeader) SetHomomorphicHash(v *grpc.Checksum) {
+ x.HomomorphicHash = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ShortHeader) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ShortHeader) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 !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 = "\"homomorphicHash\":"
+ out.RawString(prefix)
+ x.HomomorphicHash.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ShortHeader) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ShortHeader) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "version":
+ {
+ var f *grpc.Version
+ f = new(grpc.Version)
+ f.UnmarshalEasyJSON(in)
+ x.Version = f
+ }
+ case "creationEpoch":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.CreationEpoch = f
+ }
+ case "ownerID":
+ {
+ var f *grpc.OwnerID
+ f = new(grpc.OwnerID)
+ f.UnmarshalEasyJSON(in)
+ x.OwnerId = f
+ }
+ case "objectType":
+ {
+ var f ObjectType
+ var parsedValue ObjectType
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := ObjectType_value[v]; ok {
+ parsedValue = ObjectType(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = ObjectType(vv)
+ case float64:
+ parsedValue = ObjectType(v)
+ }
+ f = parsedValue
+ x.ObjectType = f
+ }
+ case "payloadLength":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.PayloadLength = f
+ }
+ case "payloadHash":
+ {
+ var f *grpc.Checksum
+ f = new(grpc.Checksum)
+ f.UnmarshalEasyJSON(in)
+ x.PayloadHash = f
+ }
+ case "homomorphicHash":
+ {
+ var f *grpc.Checksum
+ f = new(grpc.Checksum)
+ f.UnmarshalEasyJSON(in)
+ x.HomomorphicHash = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Header_Attribute struct {
+ Key string `json:"key"`
+ Value string `json:"value"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Header_Attribute)(nil)
+ _ encoding.ProtoUnmarshaler = (*Header_Attribute)(nil)
+ _ json.Marshaler = (*Header_Attribute)(nil)
+ _ json.Unmarshaler = (*Header_Attribute)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Header_Attribute) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.StringSize(1, x.Key)
+ size += proto.StringSize(2, x.Value)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Header_Attribute) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Header_Attribute) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.Key) != 0 {
+ mm.AppendString(1, x.Key)
+ }
+ if len(x.Value) != 0 {
+ mm.AppendString(2, x.Value)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Header_Attribute) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Header_Attribute")
+ }
+ switch fc.FieldNum {
+ case 1: // Key
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Key")
+ }
+ x.Key = data
+ case 2: // Value
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Value")
+ }
+ x.Value = data
+ }
+ }
+ return nil
+}
+func (x *Header_Attribute) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+func (x *Header_Attribute) SetKey(v string) {
+ x.Key = v
+}
+func (x *Header_Attribute) GetValue() string {
+ if x != nil {
+ return x.Value
+ }
+ return ""
+}
+func (x *Header_Attribute) SetValue(v string) {
+ x.Value = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Header_Attribute) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Header_Attribute) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Header_Attribute) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Header_Attribute) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "key":
+ {
+ var f string
+ f = in.String()
+ x.Key = f
+ }
+ case "value":
+ {
+ var f string
+ f = in.String()
+ x.Value = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Header_Split struct {
+ Parent *grpc.ObjectID `json:"parent"`
+ Previous *grpc.ObjectID `json:"previous"`
+ ParentSignature *grpc.Signature `json:"parentSignature"`
+ ParentHeader *Header `json:"parentHeader"`
+ Children []grpc.ObjectID `json:"children"`
+ SplitId []byte `json:"splitID"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Header_Split)(nil)
+ _ encoding.ProtoUnmarshaler = (*Header_Split)(nil)
+ _ json.Marshaler = (*Header_Split)(nil)
+ _ json.Unmarshaler = (*Header_Split)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Header_Split) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Parent)
+ size += proto.NestedStructureSize(2, x.Previous)
+ size += proto.NestedStructureSize(3, x.ParentSignature)
+ size += proto.NestedStructureSize(4, x.ParentHeader)
+ for i := range x.Children {
+ size += proto.NestedStructureSizeUnchecked(5, &x.Children[i])
+ }
+ size += proto.BytesSize(6, x.SplitId)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Header_Split) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Header_Split) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Parent != nil {
+ x.Parent.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Previous != nil {
+ x.Previous.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.ParentSignature != nil {
+ x.ParentSignature.EmitProtobuf(mm.AppendMessage(3))
+ }
+ if x.ParentHeader != nil {
+ x.ParentHeader.EmitProtobuf(mm.AppendMessage(4))
+ }
+ for i := range x.Children {
+ x.Children[i].EmitProtobuf(mm.AppendMessage(5))
+ }
+ if len(x.SplitId) != 0 {
+ mm.AppendBytes(6, x.SplitId)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Header_Split) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Header_Split")
+ }
+ switch fc.FieldNum {
+ case 1: // Parent
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Parent")
+ }
+ x.Parent = new(grpc.ObjectID)
+ if err := x.Parent.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Previous
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Previous")
+ }
+ x.Previous = new(grpc.ObjectID)
+ if err := x.Previous.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // ParentSignature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ParentSignature")
+ }
+ x.ParentSignature = new(grpc.Signature)
+ if err := x.ParentSignature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 4: // ParentHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ParentHeader")
+ }
+ x.ParentHeader = new(Header)
+ if err := x.ParentHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 5: // Children
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Children")
+ }
+ x.Children = append(x.Children, grpc.ObjectID{})
+ ff := &x.Children[len(x.Children)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 6: // SplitId
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "SplitId")
+ }
+ x.SplitId = data
+ }
+ }
+ return nil
+}
+func (x *Header_Split) GetParent() *grpc.ObjectID {
+ if x != nil {
+ return x.Parent
+ }
+ return nil
+}
+func (x *Header_Split) SetParent(v *grpc.ObjectID) {
+ x.Parent = v
+}
+func (x *Header_Split) GetPrevious() *grpc.ObjectID {
+ if x != nil {
+ return x.Previous
+ }
+ return nil
+}
+func (x *Header_Split) SetPrevious(v *grpc.ObjectID) {
+ x.Previous = v
+}
+func (x *Header_Split) GetParentSignature() *grpc.Signature {
+ if x != nil {
+ return x.ParentSignature
+ }
+ return nil
+}
+func (x *Header_Split) SetParentSignature(v *grpc.Signature) {
+ x.ParentSignature = v
+}
+func (x *Header_Split) GetParentHeader() *Header {
+ if x != nil {
+ return x.ParentHeader
+ }
+ return nil
+}
+func (x *Header_Split) SetParentHeader(v *Header) {
+ x.ParentHeader = v
+}
+func (x *Header_Split) GetChildren() []grpc.ObjectID {
+ if x != nil {
+ return x.Children
+ }
+ return nil
+}
+func (x *Header_Split) SetChildren(v []grpc.ObjectID) {
+ x.Children = v
+}
+func (x *Header_Split) GetSplitId() []byte {
+ if x != nil {
+ return x.SplitId
+ }
+ return nil
+}
+func (x *Header_Split) SetSplitId(v []byte) {
+ x.SplitId = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Header_Split) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Header_Split) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"parent\":"
+ out.RawString(prefix)
+ x.Parent.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"parentSignature\":"
+ out.RawString(prefix)
+ x.ParentSignature.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"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 = "\"splitID\":"
+ out.RawString(prefix)
+ if x.SplitId != nil {
+ out.Base64Bytes(x.SplitId)
+ } else {
+ out.String("")
+ }
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Header_Split) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Header_Split) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "parent":
+ {
+ var f *grpc.ObjectID
+ f = new(grpc.ObjectID)
+ f.UnmarshalEasyJSON(in)
+ x.Parent = f
+ }
+ case "previous":
+ {
+ var f *grpc.ObjectID
+ f = new(grpc.ObjectID)
+ f.UnmarshalEasyJSON(in)
+ x.Previous = f
+ }
+ case "parentSignature":
+ {
+ var f *grpc.Signature
+ f = new(grpc.Signature)
+ f.UnmarshalEasyJSON(in)
+ x.ParentSignature = f
+ }
+ case "parentHeader":
+ {
+ var f *Header
+ f = new(Header)
+ f.UnmarshalEasyJSON(in)
+ x.ParentHeader = f
+ }
+ case "children":
+ {
+ var f grpc.ObjectID
+ var list []grpc.ObjectID
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = grpc.ObjectID{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Children = list
+ in.Delim(']')
+ }
+ case "splitID":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.SplitId = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Header_EC struct {
+ Parent *grpc.ObjectID `json:"parent"`
+ Index uint32 `json:"index"`
+ Total uint32 `json:"total"`
+ HeaderLength uint32 `json:"headerLength"`
+ Header []byte `json:"header"`
+ ParentSplitId []byte `json:"parentSplitID"`
+ ParentSplitParentId *grpc.ObjectID `json:"parentSplitParentID"`
+ ParentAttributes []Header_Attribute `json:"parentAttributes"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Header_EC)(nil)
+ _ encoding.ProtoUnmarshaler = (*Header_EC)(nil)
+ _ json.Marshaler = (*Header_EC)(nil)
+ _ json.Unmarshaler = (*Header_EC)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Header_EC) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Parent)
+ size += proto.UInt32Size(2, x.Index)
+ size += proto.UInt32Size(3, x.Total)
+ size += proto.UInt32Size(4, x.HeaderLength)
+ size += proto.BytesSize(5, x.Header)
+ size += proto.BytesSize(6, x.ParentSplitId)
+ size += proto.NestedStructureSize(7, x.ParentSplitParentId)
+ for i := range x.ParentAttributes {
+ size += proto.NestedStructureSizeUnchecked(8, &x.ParentAttributes[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Header_EC) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Header_EC) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Parent != nil {
+ x.Parent.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Index != 0 {
+ mm.AppendUint32(2, x.Index)
+ }
+ if x.Total != 0 {
+ mm.AppendUint32(3, x.Total)
+ }
+ if x.HeaderLength != 0 {
+ mm.AppendUint32(4, x.HeaderLength)
+ }
+ if len(x.Header) != 0 {
+ mm.AppendBytes(5, x.Header)
+ }
+ if len(x.ParentSplitId) != 0 {
+ mm.AppendBytes(6, x.ParentSplitId)
+ }
+ if x.ParentSplitParentId != nil {
+ x.ParentSplitParentId.EmitProtobuf(mm.AppendMessage(7))
+ }
+ for i := range x.ParentAttributes {
+ x.ParentAttributes[i].EmitProtobuf(mm.AppendMessage(8))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Header_EC) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Header_EC")
+ }
+ switch fc.FieldNum {
+ case 1: // Parent
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Parent")
+ }
+ x.Parent = new(grpc.ObjectID)
+ if err := x.Parent.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Index
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Index")
+ }
+ x.Index = data
+ case 3: // Total
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Total")
+ }
+ x.Total = data
+ case 4: // HeaderLength
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "HeaderLength")
+ }
+ x.HeaderLength = data
+ case 5: // Header
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Header")
+ }
+ x.Header = data
+ case 6: // ParentSplitId
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ParentSplitId")
+ }
+ x.ParentSplitId = data
+ case 7: // ParentSplitParentId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ParentSplitParentId")
+ }
+ x.ParentSplitParentId = new(grpc.ObjectID)
+ if err := x.ParentSplitParentId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 8: // ParentAttributes
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ParentAttributes")
+ }
+ x.ParentAttributes = append(x.ParentAttributes, Header_Attribute{})
+ ff := &x.ParentAttributes[len(x.ParentAttributes)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *Header_EC) GetParent() *grpc.ObjectID {
+ if x != nil {
+ return x.Parent
+ }
+ return nil
+}
+func (x *Header_EC) SetParent(v *grpc.ObjectID) {
+ x.Parent = v
+}
+func (x *Header_EC) GetIndex() uint32 {
+ if x != nil {
+ return x.Index
+ }
+ return 0
+}
+func (x *Header_EC) SetIndex(v uint32) {
+ x.Index = v
+}
+func (x *Header_EC) GetTotal() uint32 {
+ if x != nil {
+ return x.Total
+ }
+ return 0
+}
+func (x *Header_EC) SetTotal(v uint32) {
+ x.Total = v
+}
+func (x *Header_EC) GetHeaderLength() uint32 {
+ if x != nil {
+ return x.HeaderLength
+ }
+ return 0
+}
+func (x *Header_EC) SetHeaderLength(v uint32) {
+ x.HeaderLength = v
+}
+func (x *Header_EC) GetHeader() []byte {
+ if x != nil {
+ return x.Header
+ }
+ return nil
+}
+func (x *Header_EC) SetHeader(v []byte) {
+ x.Header = v
+}
+func (x *Header_EC) GetParentSplitId() []byte {
+ if x != nil {
+ return x.ParentSplitId
+ }
+ return nil
+}
+func (x *Header_EC) SetParentSplitId(v []byte) {
+ x.ParentSplitId = v
+}
+func (x *Header_EC) GetParentSplitParentId() *grpc.ObjectID {
+ if x != nil {
+ return x.ParentSplitParentId
+ }
+ return nil
+}
+func (x *Header_EC) SetParentSplitParentId(v *grpc.ObjectID) {
+ x.ParentSplitParentId = v
+}
+func (x *Header_EC) GetParentAttributes() []Header_Attribute {
+ if x != nil {
+ return x.ParentAttributes
+ }
+ return nil
+}
+func (x *Header_EC) SetParentAttributes(v []Header_Attribute) {
+ x.ParentAttributes = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Header_EC) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Header_EC) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"parent\":"
+ out.RawString(prefix)
+ x.Parent.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"total\":"
+ out.RawString(prefix)
+ out.Uint32(x.Total)
+ }
+ {
+ 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 = "\"header\":"
+ out.RawString(prefix)
+ if x.Header != nil {
+ out.Base64Bytes(x.Header)
+ } else {
+ out.String("")
+ }
+ }
+ {
+ 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 !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 = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Header_EC) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Header_EC) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "parent":
+ {
+ var f *grpc.ObjectID
+ f = new(grpc.ObjectID)
+ f.UnmarshalEasyJSON(in)
+ x.Parent = f
+ }
+ case "index":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.Index = f
+ }
+ case "total":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.Total = f
+ }
+ case "headerLength":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.HeaderLength = f
+ }
+ case "header":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Header = f
+ }
+ case "parentSplitID":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.ParentSplitId = f
+ }
+ case "parentSplitParentID":
+ {
+ var f *grpc.ObjectID
+ f = new(grpc.ObjectID)
+ f.UnmarshalEasyJSON(in)
+ x.ParentSplitParentId = f
+ }
+ case "parentAttributes":
+ {
+ var f Header_Attribute
+ var list []Header_Attribute
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = Header_Attribute{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.ParentAttributes = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Header struct {
+ Version *grpc.Version `json:"version"`
+ ContainerId *grpc.ContainerID `json:"containerID"`
+ OwnerId *grpc.OwnerID `json:"ownerID"`
+ CreationEpoch uint64 `json:"creationEpoch"`
+ PayloadLength uint64 `json:"payloadLength"`
+ PayloadHash *grpc.Checksum `json:"payloadHash"`
+ ObjectType ObjectType `json:"objectType"`
+ HomomorphicHash *grpc.Checksum `json:"homomorphicHash"`
+ SessionToken *grpc1.SessionToken `json:"sessionToken"`
+ Attributes []Header_Attribute `json:"attributes"`
+ Split *Header_Split `json:"split"`
+ Ec *Header_EC `json:"ec"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Header)(nil)
+ _ encoding.ProtoUnmarshaler = (*Header)(nil)
+ _ json.Marshaler = (*Header)(nil)
+ _ json.Unmarshaler = (*Header)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Header) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Version)
+ size += proto.NestedStructureSize(2, x.ContainerId)
+ size += proto.NestedStructureSize(3, x.OwnerId)
+ size += proto.UInt64Size(4, x.CreationEpoch)
+ size += proto.UInt64Size(5, x.PayloadLength)
+ size += proto.NestedStructureSize(6, x.PayloadHash)
+ size += proto.EnumSize(7, int32(x.ObjectType))
+ size += proto.NestedStructureSize(8, x.HomomorphicHash)
+ size += proto.NestedStructureSize(9, x.SessionToken)
+ for i := range x.Attributes {
+ size += proto.NestedStructureSizeUnchecked(10, &x.Attributes[i])
+ }
+ size += proto.NestedStructureSize(11, x.Split)
+ size += proto.NestedStructureSize(12, x.Ec)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Header) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Header) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Version != nil {
+ x.Version.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.ContainerId != nil {
+ x.ContainerId.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.OwnerId != nil {
+ x.OwnerId.EmitProtobuf(mm.AppendMessage(3))
+ }
+ if x.CreationEpoch != 0 {
+ mm.AppendUint64(4, x.CreationEpoch)
+ }
+ if x.PayloadLength != 0 {
+ mm.AppendUint64(5, x.PayloadLength)
+ }
+ if x.PayloadHash != nil {
+ x.PayloadHash.EmitProtobuf(mm.AppendMessage(6))
+ }
+ if int32(x.ObjectType) != 0 {
+ mm.AppendInt32(7, int32(x.ObjectType))
+ }
+ if x.HomomorphicHash != nil {
+ x.HomomorphicHash.EmitProtobuf(mm.AppendMessage(8))
+ }
+ if x.SessionToken != nil {
+ x.SessionToken.EmitProtobuf(mm.AppendMessage(9))
+ }
+ for i := range x.Attributes {
+ x.Attributes[i].EmitProtobuf(mm.AppendMessage(10))
+ }
+ if x.Split != nil {
+ x.Split.EmitProtobuf(mm.AppendMessage(11))
+ }
+ if x.Ec != nil {
+ x.Ec.EmitProtobuf(mm.AppendMessage(12))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Header) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Header")
+ }
+ switch fc.FieldNum {
+ case 1: // Version
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Version")
+ }
+ x.Version = new(grpc.Version)
+ if err := x.Version.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // ContainerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ContainerId")
+ }
+ x.ContainerId = new(grpc.ContainerID)
+ if err := x.ContainerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // OwnerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "OwnerId")
+ }
+ x.OwnerId = new(grpc.OwnerID)
+ if err := x.OwnerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 4: // CreationEpoch
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "CreationEpoch")
+ }
+ x.CreationEpoch = data
+ case 5: // PayloadLength
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "PayloadLength")
+ }
+ x.PayloadLength = data
+ case 6: // PayloadHash
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "PayloadHash")
+ }
+ x.PayloadHash = new(grpc.Checksum)
+ if err := x.PayloadHash.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 7: // ObjectType
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ObjectType")
+ }
+ x.ObjectType = ObjectType(data)
+ case 8: // HomomorphicHash
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "HomomorphicHash")
+ }
+ x.HomomorphicHash = new(grpc.Checksum)
+ if err := x.HomomorphicHash.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 9: // SessionToken
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "SessionToken")
+ }
+ x.SessionToken = new(grpc1.SessionToken)
+ if err := x.SessionToken.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 10: // Attributes
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Attributes")
+ }
+ x.Attributes = append(x.Attributes, Header_Attribute{})
+ ff := &x.Attributes[len(x.Attributes)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 11: // Split
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Split")
+ }
+ x.Split = new(Header_Split)
+ if err := x.Split.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 12: // Ec
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Ec")
+ }
+ x.Ec = new(Header_EC)
+ if err := x.Ec.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *Header) GetVersion() *grpc.Version {
+ if x != nil {
+ return x.Version
+ }
+ return nil
+}
+func (x *Header) SetVersion(v *grpc.Version) {
+ x.Version = v
+}
+func (x *Header) GetContainerId() *grpc.ContainerID {
+ if x != nil {
+ return x.ContainerId
+ }
+ return nil
+}
+func (x *Header) SetContainerId(v *grpc.ContainerID) {
+ x.ContainerId = v
+}
+func (x *Header) GetOwnerId() *grpc.OwnerID {
+ if x != nil {
+ return x.OwnerId
+ }
+ return nil
+}
+func (x *Header) SetOwnerId(v *grpc.OwnerID) {
+ x.OwnerId = v
+}
+func (x *Header) GetCreationEpoch() uint64 {
+ if x != nil {
+ return x.CreationEpoch
+ }
+ return 0
+}
+func (x *Header) SetCreationEpoch(v uint64) {
+ x.CreationEpoch = v
+}
+func (x *Header) GetPayloadLength() uint64 {
+ if x != nil {
+ return x.PayloadLength
+ }
+ return 0
+}
+func (x *Header) SetPayloadLength(v uint64) {
+ x.PayloadLength = v
+}
+func (x *Header) GetPayloadHash() *grpc.Checksum {
+ if x != nil {
+ return x.PayloadHash
+ }
+ return nil
+}
+func (x *Header) SetPayloadHash(v *grpc.Checksum) {
+ x.PayloadHash = v
+}
+func (x *Header) GetObjectType() ObjectType {
+ if x != nil {
+ return x.ObjectType
+ }
+ return 0
+}
+func (x *Header) SetObjectType(v ObjectType) {
+ x.ObjectType = v
+}
+func (x *Header) GetHomomorphicHash() *grpc.Checksum {
+ if x != nil {
+ return x.HomomorphicHash
+ }
+ return nil
+}
+func (x *Header) SetHomomorphicHash(v *grpc.Checksum) {
+ x.HomomorphicHash = v
+}
+func (x *Header) GetSessionToken() *grpc1.SessionToken {
+ if x != nil {
+ return x.SessionToken
+ }
+ return nil
+}
+func (x *Header) SetSessionToken(v *grpc1.SessionToken) {
+ x.SessionToken = v
+}
+func (x *Header) GetAttributes() []Header_Attribute {
+ if x != nil {
+ return x.Attributes
+ }
+ return nil
+}
+func (x *Header) SetAttributes(v []Header_Attribute) {
+ x.Attributes = v
+}
+func (x *Header) GetSplit() *Header_Split {
+ if x != nil {
+ return x.Split
+ }
+ return nil
+}
+func (x *Header) SetSplit(v *Header_Split) {
+ x.Split = v
+}
+func (x *Header) GetEc() *Header_EC {
+ if x != nil {
+ return x.Ec
+ }
+ return nil
+}
+func (x *Header) SetEc(v *Header_EC) {
+ x.Ec = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Header) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Header) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 !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 = "\"sessionToken\":"
+ out.RawString(prefix)
+ x.SessionToken.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"split\":"
+ out.RawString(prefix)
+ x.Split.MarshalEasyJSON(out)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"ec\":"
+ out.RawString(prefix)
+ x.Ec.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Header) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Header) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "version":
+ {
+ var f *grpc.Version
+ f = new(grpc.Version)
+ f.UnmarshalEasyJSON(in)
+ x.Version = f
+ }
+ case "containerID":
+ {
+ var f *grpc.ContainerID
+ f = new(grpc.ContainerID)
+ f.UnmarshalEasyJSON(in)
+ x.ContainerId = f
+ }
+ case "ownerID":
+ {
+ var f *grpc.OwnerID
+ f = new(grpc.OwnerID)
+ f.UnmarshalEasyJSON(in)
+ x.OwnerId = f
+ }
+ case "creationEpoch":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.CreationEpoch = f
+ }
+ case "payloadLength":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.PayloadLength = f
+ }
+ case "payloadHash":
+ {
+ var f *grpc.Checksum
+ f = new(grpc.Checksum)
+ f.UnmarshalEasyJSON(in)
+ x.PayloadHash = f
+ }
+ case "objectType":
+ {
+ var f ObjectType
+ var parsedValue ObjectType
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := ObjectType_value[v]; ok {
+ parsedValue = ObjectType(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = ObjectType(vv)
+ case float64:
+ parsedValue = ObjectType(v)
+ }
+ f = parsedValue
+ x.ObjectType = f
+ }
+ case "homomorphicHash":
+ {
+ var f *grpc.Checksum
+ f = new(grpc.Checksum)
+ f.UnmarshalEasyJSON(in)
+ x.HomomorphicHash = f
+ }
+ case "sessionToken":
+ {
+ var f *grpc1.SessionToken
+ f = new(grpc1.SessionToken)
+ f.UnmarshalEasyJSON(in)
+ x.SessionToken = f
+ }
+ case "attributes":
+ {
+ var f Header_Attribute
+ var list []Header_Attribute
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = Header_Attribute{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Attributes = list
+ in.Delim(']')
+ }
+ case "split":
+ {
+ var f *Header_Split
+ f = new(Header_Split)
+ f.UnmarshalEasyJSON(in)
+ x.Split = f
+ }
+ case "ec":
+ {
+ var f *Header_EC
+ f = new(Header_EC)
+ f.UnmarshalEasyJSON(in)
+ x.Ec = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Object struct {
+ ObjectId *grpc.ObjectID `json:"objectID"`
+ Signature *grpc.Signature `json:"signature"`
+ Header *Header `json:"header"`
+ Payload []byte `json:"payload"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Object)(nil)
+ _ encoding.ProtoUnmarshaler = (*Object)(nil)
+ _ json.Marshaler = (*Object)(nil)
+ _ json.Unmarshaler = (*Object)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Object) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.ObjectId)
+ size += proto.NestedStructureSize(2, x.Signature)
+ size += proto.NestedStructureSize(3, x.Header)
+ size += proto.BytesSize(4, x.Payload)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Object) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Object) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.ObjectId != nil {
+ x.ObjectId.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Signature != nil {
+ x.Signature.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.Header != nil {
+ x.Header.EmitProtobuf(mm.AppendMessage(3))
+ }
+ if len(x.Payload) != 0 {
+ mm.AppendBytes(4, x.Payload)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Object) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Object")
+ }
+ switch fc.FieldNum {
+ case 1: // ObjectId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ObjectId")
+ }
+ x.ObjectId = new(grpc.ObjectID)
+ if err := x.ObjectId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Signature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Signature")
+ }
+ x.Signature = new(grpc.Signature)
+ if err := x.Signature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // Header
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Header")
+ }
+ x.Header = new(Header)
+ if err := x.Header.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 4: // Payload
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Payload")
+ }
+ x.Payload = data
+ }
+ }
+ return nil
+}
+func (x *Object) GetObjectId() *grpc.ObjectID {
+ if x != nil {
+ return x.ObjectId
+ }
+ return nil
+}
+func (x *Object) SetObjectId(v *grpc.ObjectID) {
+ x.ObjectId = v
+}
+func (x *Object) GetSignature() *grpc.Signature {
+ if x != nil {
+ return x.Signature
+ }
+ return nil
+}
+func (x *Object) SetSignature(v *grpc.Signature) {
+ x.Signature = v
+}
+func (x *Object) GetHeader() *Header {
+ if x != nil {
+ return x.Header
+ }
+ return nil
+}
+func (x *Object) SetHeader(v *Header) {
+ x.Header = v
+}
+func (x *Object) GetPayload() []byte {
+ if x != nil {
+ return x.Payload
+ }
+ return nil
+}
+func (x *Object) SetPayload(v []byte) {
+ x.Payload = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Object) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Object) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"objectID\":"
+ out.RawString(prefix)
+ x.ObjectId.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"header\":"
+ out.RawString(prefix)
+ x.Header.MarshalEasyJSON(out)
+ }
+ {
+ 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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Object) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Object) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "objectID":
+ {
+ var f *grpc.ObjectID
+ f = new(grpc.ObjectID)
+ f.UnmarshalEasyJSON(in)
+ x.ObjectId = f
+ }
+ case "signature":
+ {
+ var f *grpc.Signature
+ f = new(grpc.Signature)
+ f.UnmarshalEasyJSON(in)
+ x.Signature = f
+ }
+ case "header":
+ {
+ var f *Header
+ f = new(Header)
+ f.UnmarshalEasyJSON(in)
+ x.Header = f
+ }
+ case "payload":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Payload = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type SplitInfo struct {
+ SplitId []byte `json:"splitId"`
+ LastPart *grpc.ObjectID `json:"lastPart"`
+ Link *grpc.ObjectID `json:"link"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*SplitInfo)(nil)
+ _ encoding.ProtoUnmarshaler = (*SplitInfo)(nil)
+ _ json.Marshaler = (*SplitInfo)(nil)
+ _ json.Unmarshaler = (*SplitInfo)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *SplitInfo) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.BytesSize(1, x.SplitId)
+ size += proto.NestedStructureSize(2, x.LastPart)
+ size += proto.NestedStructureSize(3, x.Link)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *SplitInfo) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *SplitInfo) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.SplitId) != 0 {
+ mm.AppendBytes(1, x.SplitId)
+ }
+ if x.LastPart != nil {
+ x.LastPart.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.Link != nil {
+ x.Link.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *SplitInfo) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "SplitInfo")
+ }
+ switch fc.FieldNum {
+ case 1: // SplitId
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "SplitId")
+ }
+ x.SplitId = data
+ case 2: // LastPart
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "LastPart")
+ }
+ x.LastPart = new(grpc.ObjectID)
+ if err := x.LastPart.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // Link
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Link")
+ }
+ x.Link = new(grpc.ObjectID)
+ if err := x.Link.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *SplitInfo) GetSplitId() []byte {
+ if x != nil {
+ return x.SplitId
+ }
+ return nil
+}
+func (x *SplitInfo) SetSplitId(v []byte) {
+ x.SplitId = v
+}
+func (x *SplitInfo) GetLastPart() *grpc.ObjectID {
+ if x != nil {
+ return x.LastPart
+ }
+ return nil
+}
+func (x *SplitInfo) SetLastPart(v *grpc.ObjectID) {
+ x.LastPart = v
+}
+func (x *SplitInfo) GetLink() *grpc.ObjectID {
+ if x != nil {
+ return x.Link
+ }
+ return nil
+}
+func (x *SplitInfo) SetLink(v *grpc.ObjectID) {
+ x.Link = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *SplitInfo) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *SplitInfo) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"splitId\":"
+ out.RawString(prefix)
+ if x.SplitId != nil {
+ out.Base64Bytes(x.SplitId)
+ } else {
+ out.String("")
+ }
+ }
+ {
+ 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 = "\"link\":"
+ out.RawString(prefix)
+ x.Link.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *SplitInfo) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *SplitInfo) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "splitId":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.SplitId = f
+ }
+ case "lastPart":
+ {
+ var f *grpc.ObjectID
+ f = new(grpc.ObjectID)
+ f.UnmarshalEasyJSON(in)
+ x.LastPart = f
+ }
+ case "link":
+ {
+ var f *grpc.ObjectID
+ f = new(grpc.ObjectID)
+ f.UnmarshalEasyJSON(in)
+ x.Link = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ECInfo_Chunk struct {
+ Id *grpc.ObjectID `json:"id"`
+ Index uint32 `json:"index"`
+ Total uint32 `json:"total"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ECInfo_Chunk)(nil)
+ _ encoding.ProtoUnmarshaler = (*ECInfo_Chunk)(nil)
+ _ json.Marshaler = (*ECInfo_Chunk)(nil)
+ _ json.Unmarshaler = (*ECInfo_Chunk)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ECInfo_Chunk) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Id)
+ size += proto.UInt32Size(2, x.Index)
+ size += proto.UInt32Size(3, x.Total)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ECInfo_Chunk) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ECInfo_Chunk) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Id != nil {
+ x.Id.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Index != 0 {
+ mm.AppendUint32(2, x.Index)
+ }
+ if x.Total != 0 {
+ mm.AppendUint32(3, x.Total)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ECInfo_Chunk) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ECInfo_Chunk")
+ }
+ switch fc.FieldNum {
+ case 1: // Id
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Id")
+ }
+ x.Id = new(grpc.ObjectID)
+ if err := x.Id.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Index
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Index")
+ }
+ x.Index = data
+ case 3: // Total
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Total")
+ }
+ x.Total = data
+ }
+ }
+ return nil
+}
+func (x *ECInfo_Chunk) GetId() *grpc.ObjectID {
+ if x != nil {
+ return x.Id
+ }
+ return nil
+}
+func (x *ECInfo_Chunk) SetId(v *grpc.ObjectID) {
+ x.Id = v
+}
+func (x *ECInfo_Chunk) GetIndex() uint32 {
+ if x != nil {
+ return x.Index
+ }
+ return 0
+}
+func (x *ECInfo_Chunk) SetIndex(v uint32) {
+ x.Index = v
+}
+func (x *ECInfo_Chunk) GetTotal() uint32 {
+ if x != nil {
+ return x.Total
+ }
+ return 0
+}
+func (x *ECInfo_Chunk) SetTotal(v uint32) {
+ x.Total = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ECInfo_Chunk) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ECInfo_Chunk) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"id\":"
+ out.RawString(prefix)
+ x.Id.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"total\":"
+ out.RawString(prefix)
+ out.Uint32(x.Total)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ECInfo_Chunk) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ECInfo_Chunk) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "id":
+ {
+ var f *grpc.ObjectID
+ f = new(grpc.ObjectID)
+ f.UnmarshalEasyJSON(in)
+ x.Id = f
+ }
+ case "index":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.Index = f
+ }
+ case "total":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.Total = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ECInfo struct {
+ Chunks []ECInfo_Chunk `json:"chunks"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ECInfo)(nil)
+ _ encoding.ProtoUnmarshaler = (*ECInfo)(nil)
+ _ json.Marshaler = (*ECInfo)(nil)
+ _ json.Unmarshaler = (*ECInfo)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ECInfo) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ for i := range x.Chunks {
+ size += proto.NestedStructureSizeUnchecked(1, &x.Chunks[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ECInfo) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ECInfo) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ for i := range x.Chunks {
+ x.Chunks[i].EmitProtobuf(mm.AppendMessage(1))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ECInfo) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ECInfo")
+ }
+ switch fc.FieldNum {
+ case 1: // Chunks
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Chunks")
+ }
+ x.Chunks = append(x.Chunks, ECInfo_Chunk{})
+ ff := &x.Chunks[len(x.Chunks)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *ECInfo) GetChunks() []ECInfo_Chunk {
+ if x != nil {
+ return x.Chunks
+ }
+ return nil
+}
+func (x *ECInfo) SetChunks(v []ECInfo_Chunk) {
+ x.Chunks = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ECInfo) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ECInfo) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ECInfo) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ECInfo) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "chunks":
+ {
+ var f ECInfo_Chunk
+ var list []ECInfo_Chunk
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = ECInfo_Chunk{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Chunks = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/object/grpc/types_frostfs_fuzz.go b/api/object/grpc/types_frostfs_fuzz.go
new file mode 100644
index 0000000..8491638
--- /dev/null
+++ b/api/object/grpc/types_frostfs_fuzz.go
@@ -0,0 +1,102 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package object
+
+func DoFuzzProtoShortHeader(data []byte) int {
+ msg := new(ShortHeader)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONShortHeader(data []byte) int {
+ msg := new(ShortHeader)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoHeader(data []byte) int {
+ msg := new(Header)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONHeader(data []byte) int {
+ msg := new(Header)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoObject(data []byte) int {
+ msg := new(Object)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONObject(data []byte) int {
+ msg := new(Object)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoSplitInfo(data []byte) int {
+ msg := new(SplitInfo)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONSplitInfo(data []byte) int {
+ msg := new(SplitInfo)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoECInfo(data []byte) int {
+ msg := new(ECInfo)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONECInfo(data []byte) int {
+ msg := new(ECInfo)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/object/grpc/types_frostfs_test.go b/api/object/grpc/types_frostfs_test.go
new file mode 100644
index 0000000..11825be
--- /dev/null
+++ b/api/object/grpc/types_frostfs_test.go
@@ -0,0 +1,61 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package object
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoShortHeader(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoShortHeader(data)
+ })
+}
+func FuzzJSONShortHeader(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONShortHeader(data)
+ })
+}
+func FuzzProtoHeader(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoHeader(data)
+ })
+}
+func FuzzJSONHeader(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONHeader(data)
+ })
+}
+func FuzzProtoObject(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoObject(data)
+ })
+}
+func FuzzJSONObject(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONObject(data)
+ })
+}
+func FuzzProtoSplitInfo(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoSplitInfo(data)
+ })
+}
+func FuzzJSONSplitInfo(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONSplitInfo(data)
+ })
+}
+func FuzzProtoECInfo(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoECInfo(data)
+ })
+}
+func FuzzJSONECInfo(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONECInfo(data)
+ })
+}
diff --git a/api/object/json.go b/api/object/json.go
new file mode 100644
index 0000000..faef249
--- /dev/null
+++ b/api/object/json.go
@@ -0,0 +1,94 @@
+package object
+
+import (
+ object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+)
+
+func (h *ShortHeader) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(h)
+}
+
+func (h *ShortHeader) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(h, data, new(object.ShortHeader))
+}
+
+func (a *Attribute) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(a)
+}
+
+func (a *Attribute) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(a, data, new(object.Header_Attribute))
+}
+
+func (h *SplitHeader) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(h)
+}
+
+func (h *SplitHeader) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(h, data, new(object.Header_Split))
+}
+
+func (h *Header) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(h)
+}
+
+func (h *Header) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(h, data, new(object.Header))
+}
+
+func (h *HeaderWithSignature) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(h)
+}
+
+func (h *HeaderWithSignature) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(h, data, new(object.HeaderWithSignature))
+}
+
+func (o *Object) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(o)
+}
+
+func (o *Object) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(o, data, new(object.Object))
+}
+
+func (s *SplitInfo) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(s)
+}
+
+func (s *SplitInfo) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(s, data, new(object.SplitInfo))
+}
+
+func (e *ECInfo) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(e)
+}
+
+func (e *ECInfo) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(e, data, new(object.ECInfo))
+}
+
+func (e *ECChunk) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(e)
+}
+
+func (e *ECChunk) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(e, data, new(object.ECInfo_Chunk))
+}
+
+func (f *SearchFilter) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(f)
+}
+
+func (f *SearchFilter) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(f, data, new(object.SearchRequest_Body_Filter))
+}
+
+func (r *Range) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(r)
+}
+
+func (r *Range) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(r, data, new(object.Range))
+}
diff --git a/api/object/lock.go b/api/object/lock.go
new file mode 100644
index 0000000..3af06c6
--- /dev/null
+++ b/api/object/lock.go
@@ -0,0 +1,160 @@
+package object
+
+import (
+ "errors"
+ "fmt"
+
+ lock "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/lock/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+)
+
+// Lock represents object Lock message from NeoFS API V2 protocol.
+type Lock struct {
+ members []refs.ObjectID
+}
+
+// NumberOfMembers returns length of lock list.
+func (x *Lock) NumberOfMembers() int {
+ if x != nil {
+ return len(x.members)
+ }
+
+ return 0
+}
+
+// IterateMembers passes members of the lock list to f.
+func (x *Lock) IterateMembers(f func(refs.ObjectID)) {
+ if x != nil {
+ for i := range x.members {
+ f(x.members[i])
+ }
+ }
+}
+
+// SetMembers sets list of locked members.
+// Arg must not be mutated for the duration of the Lock.
+func (x *Lock) SetMembers(ids []refs.ObjectID) {
+ x.members = ids
+}
+
+const (
+ _ = iota
+ fNumLockMembers
+)
+
+// StableMarshal encodes the Lock into Protocol Buffers binary format
+// with direct field order.
+func (x *Lock) StableMarshal(buf []byte) []byte {
+ if x == nil || len(x.members) == 0 {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, x.StableSize())
+ }
+
+ var offset int
+
+ for i := range x.members {
+ offset += proto.NestedStructureMarshal(fNumLockMembers, buf[offset:], &x.members[i])
+ }
+
+ return buf
+}
+
+// StableSize size of the buffer required to write the Lock in Protocol Buffers
+// binary format.
+func (x *Lock) StableSize() (sz int) {
+ if x != nil {
+ for i := range x.members {
+ sz += proto.NestedStructureSize(fNumLockMembers, &x.members[i])
+ }
+ }
+
+ return
+}
+
+// Unmarshal decodes the Lock from its Protocol Buffers binary format.
+func (x *Lock) Unmarshal(data []byte) error {
+ return message.Unmarshal(x, data, new(lock.Lock))
+}
+
+func (x *Lock) ToGRPCMessage() grpc.Message {
+ var m *lock.Lock
+
+ if x != nil {
+ m = new(lock.Lock)
+
+ var members []refsGRPC.ObjectID
+
+ if x.members != nil {
+ members = make([]refsGRPC.ObjectID, len(x.members))
+
+ for i := range x.members {
+ members[i] = *x.members[i].ToGRPCMessage().(*refsGRPC.ObjectID)
+ }
+ }
+
+ m.SetMembers(members)
+ }
+
+ return m
+}
+
+func (x *Lock) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*lock.Lock)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ members := v.GetMembers()
+ if members == nil {
+ x.members = nil
+ } else {
+ x.members = make([]refs.ObjectID, len(members))
+ var err error
+
+ for i := range x.members {
+ err = x.members[i].FromGRPCMessage(&members[i])
+ if err != nil {
+ return err
+ }
+ }
+ }
+
+ return nil
+}
+
+// WriteLock writes Lock to the Object as a payload content.
+// The object must not be nil.
+func WriteLock(obj *Object, lock Lock) {
+ hdr := obj.GetHeader()
+ if hdr == nil {
+ hdr = new(Header)
+ obj.SetHeader(hdr)
+ }
+
+ hdr.SetObjectType(TypeLock)
+
+ payload := lock.StableMarshal(nil)
+ obj.SetPayload(payload)
+}
+
+// ReadLock reads Lock from the Object payload content.
+func ReadLock(lock *Lock, obj Object) error {
+ payload := obj.GetPayload()
+ if len(payload) == 0 {
+ return errors.New("empty payload")
+ }
+
+ err := lock.Unmarshal(payload)
+ if err != nil {
+ return fmt.Errorf("decode lock content from payload: %w", err)
+ }
+
+ return nil
+}
diff --git a/api/object/lock_test.go b/api/object/lock_test.go
new file mode 100644
index 0000000..2515723
--- /dev/null
+++ b/api/object/lock_test.go
@@ -0,0 +1,26 @@
+package object_test
+
+import (
+ "testing"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ objecttest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object/test"
+ "github.com/stretchr/testify/require"
+)
+
+func TestLockRW(t *testing.T) {
+ var l object.Lock
+ var obj object.Object
+
+ require.Error(t, object.ReadLock(&l, obj))
+
+ l = *objecttest.GenerateLock(false)
+
+ object.WriteLock(&obj, l)
+
+ var l2 object.Lock
+
+ require.NoError(t, object.ReadLock(&l2, obj))
+
+ require.Equal(t, l, l2)
+}
diff --git a/api/object/marshal.go b/api/object/marshal.go
new file mode 100644
index 0000000..82e265b
--- /dev/null
+++ b/api/object/marshal.go
@@ -0,0 +1,1428 @@
+package object
+
+import (
+ object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+)
+
+const (
+ shortHdrVersionField = 1
+ shortHdrEpochField = 2
+ shortHdrOwnerField = 3
+ shortHdrObjectTypeField = 4
+ shortHdrPayloadLength = 5
+ shortHdrHashField = 6
+ shortHdrHomoHashField = 7
+
+ attributeKeyField = 1
+ attributeValueField = 2
+
+ splitHdrParentField = 1
+ splitHdrPreviousField = 2
+ splitHdrParentSignatureField = 3
+ splitHdrParentHeaderField = 4
+ splitHdrChildrenField = 5
+ splitHdrSplitIDField = 6
+
+ ecHdrParentField = 1
+ ecHdrIndexField = 2
+ ecHdrTotalField = 3
+ ecHdrHeaderLengthField = 4
+ ecHdrHeaderField = 5
+ ecHdrParentSplitID = 6
+ ecHdrParentSplitParentID = 7
+ ecHdrParentAttributes = 8
+
+ hdrVersionField = 1
+ hdrContainerIDField = 2
+ hdrOwnerIDField = 3
+ hdrEpochField = 4
+ hdrPayloadLengthField = 5
+ hdrPayloadHashField = 6
+ hdrObjectTypeField = 7
+ hdrHomomorphicHashField = 8
+ hdrSessionTokenField = 9
+ hdrAttributesField = 10
+ hdrSplitField = 11
+ hdrECField = 12
+
+ hdrWithSigHeaderField = 1
+ hdrWithSigSignatureField = 2
+
+ objIDField = 1
+ objSignatureField = 2
+ objHeaderField = 3
+ objPayloadField = 4
+
+ splitInfoSplitIDField = 1
+ splitInfoLastPartField = 2
+ splitInfoLinkField = 3
+
+ ecInfoChunksField = 1
+
+ ecChunkIDField = 1
+ ecChunkIndexField = 2
+ ecChunkTotalField = 3
+
+ getReqBodyAddressField = 1
+ getReqBodyRawFlagField = 2
+
+ getRespInitObjectIDField = 1
+ getRespInitSignatureField = 2
+ getRespInitHeaderField = 3
+
+ getRespBodyInitField = 1
+ getRespBodyChunkField = 2
+ getRespBodySplitInfoField = 3
+ getRespBodyECInfoField = 4
+
+ putReqInitObjectIDField = 1
+ putReqInitSignatureField = 2
+ putReqInitHeaderField = 3
+ putReqInitCopiesNumField = 4
+
+ putReqBodyInitField = 1
+ putReqBodyChunkField = 2
+
+ putRespBodyObjectIDField = 1
+
+ deleteReqBodyAddressField = 1
+
+ deleteRespBodyTombstoneFNum = 1
+
+ headReqBodyAddressField = 1
+ headReqBodyMainFlagField = 2
+ headReqBodyRawFlagField = 3
+
+ headRespBodyHeaderField = 1
+ headRespBodyShortHeaderField = 2
+ headRespBodySplitInfoField = 3
+ headRespBodyECInfoField = 4
+
+ searchFilterMatchField = 1
+ searchFilterNameField = 2
+ searchFilterValueField = 3
+
+ searchReqBodyContainerIDField = 1
+ searchReqBodyVersionField = 2
+ searchReqBodyFiltersField = 3
+
+ searchRespBodyObjectIDsField = 1
+
+ rangeOffsetField = 1
+ rangeLengthField = 2
+
+ getRangeReqBodyAddressField = 1
+ getRangeReqBodyRangeField = 2
+ getRangeReqBodyRawField = 3
+
+ getRangeRespChunkField = 1
+ getRangeRespSplitInfoField = 2
+ getRangeRespECInfoField = 3
+
+ getRangeHashReqBodyAddressField = 1
+ getRangeHashReqBodyRangesField = 2
+ getRangeHashReqBodySaltField = 3
+ getRangeHashReqBodyTypeField = 4
+
+ getRangeHashRespBodyTypeField = 1
+ getRangeHashRespBodyHashListField = 2
+
+ putSingleReqObjectField = 1
+ putSingleReqCopiesNumberField = 2
+
+ patchRequestBodyPatchRangeField = 1
+ patchRequestBodyPatchChunkField = 2
+
+ patchRequestBodyAddrField = 1
+ patchRequestBodyNewAttrsField = 2
+ patchRequestBodyReplaceAttrField = 3
+ patchRequestBodyPatchField = 4
+
+ patchResponseBodyObjectIDField = 1
+)
+
+func (h *ShortHeader) StableMarshal(buf []byte) []byte {
+ if h == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, h.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(shortHdrVersionField, buf[offset:], h.version)
+ offset += proto.UInt64Marshal(shortHdrEpochField, buf[offset:], h.creatEpoch)
+ offset += proto.NestedStructureMarshal(shortHdrOwnerField, buf[offset:], h.ownerID)
+ offset += proto.EnumMarshal(shortHdrObjectTypeField, buf[offset:], int32(h.typ))
+ offset += proto.UInt64Marshal(shortHdrPayloadLength, buf[offset:], h.payloadLen)
+ offset += proto.NestedStructureMarshal(shortHdrHashField, buf[offset:], h.payloadHash)
+ proto.NestedStructureMarshal(shortHdrHomoHashField, buf[offset:], h.homoHash)
+
+ return buf
+}
+
+func (h *ShortHeader) StableSize() (size int) {
+ if h == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(shortHdrVersionField, h.version)
+ size += proto.UInt64Size(shortHdrEpochField, h.creatEpoch)
+ size += proto.NestedStructureSize(shortHdrOwnerField, h.ownerID)
+ size += proto.EnumSize(shortHdrObjectTypeField, int32(h.typ))
+ size += proto.UInt64Size(shortHdrPayloadLength, h.payloadLen)
+ size += proto.NestedStructureSize(shortHdrHashField, h.payloadHash)
+ size += proto.NestedStructureSize(shortHdrHomoHashField, h.homoHash)
+
+ return size
+}
+
+func (h *ShortHeader) Unmarshal(data []byte) error {
+ return message.Unmarshal(h, data, new(object.ShortHeader))
+}
+
+func (a *Attribute) StableMarshal(buf []byte) []byte {
+ if a == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, a.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.StringMarshal(attributeKeyField, buf[offset:], a.key)
+ proto.StringMarshal(attributeValueField, buf[offset:], a.val)
+
+ return buf
+}
+
+func (a *Attribute) StableSize() (size int) {
+ if a == nil {
+ return 0
+ }
+
+ size += proto.StringSize(shortHdrVersionField, a.key)
+ size += proto.StringSize(shortHdrEpochField, a.val)
+
+ return size
+}
+
+func (a *Attribute) Unmarshal(data []byte) error {
+ return message.Unmarshal(a, data, new(object.Header_Attribute))
+}
+
+func (h *SplitHeader) StableMarshal(buf []byte) []byte {
+ if h == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, h.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(splitHdrParentField, buf[offset:], h.par)
+ offset += proto.NestedStructureMarshal(splitHdrPreviousField, buf[offset:], h.prev)
+ offset += proto.NestedStructureMarshal(splitHdrParentSignatureField, buf[offset:], h.parSig)
+ offset += proto.NestedStructureMarshal(splitHdrParentHeaderField, buf[offset:], h.parHdr)
+ offset += refs.ObjectIDNestedListMarshal(splitHdrChildrenField, buf[offset:], h.children)
+ proto.BytesMarshal(splitHdrSplitIDField, buf[offset:], h.splitID)
+
+ return buf
+}
+
+func (h *SplitHeader) StableSize() (size int) {
+ if h == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(splitHdrParentField, h.par)
+ size += proto.NestedStructureSize(splitHdrPreviousField, h.prev)
+ size += proto.NestedStructureSize(splitHdrParentSignatureField, h.parSig)
+ size += proto.NestedStructureSize(splitHdrParentHeaderField, h.parHdr)
+ size += refs.ObjectIDNestedListSize(splitHdrChildrenField, h.children)
+ size += proto.BytesSize(splitHdrSplitIDField, h.splitID)
+
+ return size
+}
+
+func (h *SplitHeader) Unmarshal(data []byte) error {
+ return message.Unmarshal(h, data, new(object.Header_Split))
+}
+
+func (h *ECHeader) StableMarshal(buf []byte) []byte {
+ if h == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, h.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(ecHdrParentField, buf[offset:], h.Parent)
+ offset += proto.UInt32Marshal(ecHdrIndexField, buf[offset:], h.Index)
+ offset += proto.UInt32Marshal(ecHdrTotalField, buf[offset:], h.Total)
+ offset += proto.UInt32Marshal(ecHdrHeaderLengthField, buf[offset:], h.HeaderLength)
+ offset += proto.BytesMarshal(ecHdrHeaderField, buf[offset:], h.Header)
+ offset += proto.BytesMarshal(ecHdrParentSplitID, buf[offset:], h.ParentSplitID)
+ offset += proto.NestedStructureMarshal(ecHdrParentSplitParentID, buf[offset:], h.ParentSplitParentID)
+ for i := range h.ParentAttributes {
+ offset += proto.NestedStructureMarshal(ecHdrParentAttributes, buf[offset:], &h.ParentAttributes[i])
+ }
+ return buf
+}
+
+func (h *ECHeader) StableSize() (size int) {
+ if h == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(ecHdrParentField, h.Parent)
+ size += proto.UInt32Size(ecHdrIndexField, h.Index)
+ size += proto.UInt32Size(ecHdrTotalField, h.Total)
+ size += proto.UInt32Size(ecHdrHeaderLengthField, h.HeaderLength)
+ size += proto.BytesSize(ecHdrHeaderField, h.Header)
+ size += proto.BytesSize(ecHdrParentSplitID, h.ParentSplitID)
+ size += proto.NestedStructureSize(ecHdrParentSplitParentID, h.ParentSplitParentID)
+ for i := range h.ParentAttributes {
+ size += proto.NestedStructureSize(ecHdrParentAttributes, &h.ParentAttributes[i])
+ }
+
+ return size
+}
+
+func (h *ECHeader) Unmarshal(data []byte) error {
+ return message.Unmarshal(h, data, new(object.Header_EC))
+}
+
+func (h *Header) StableMarshal(buf []byte) []byte {
+ if h == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, h.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(hdrVersionField, buf[offset:], h.version)
+ offset += proto.NestedStructureMarshal(hdrContainerIDField, buf[offset:], h.cid)
+ offset += proto.NestedStructureMarshal(hdrOwnerIDField, buf[offset:], h.ownerID)
+ offset += proto.UInt64Marshal(hdrEpochField, buf[offset:], h.creatEpoch)
+ offset += proto.UInt64Marshal(hdrPayloadLengthField, buf[offset:], h.payloadLen)
+ offset += proto.NestedStructureMarshal(hdrPayloadHashField, buf[offset:], h.payloadHash)
+ offset += proto.EnumMarshal(hdrObjectTypeField, buf[offset:], int32(h.typ))
+ offset += proto.NestedStructureMarshal(hdrHomomorphicHashField, buf[offset:], h.homoHash)
+ offset += proto.NestedStructureMarshal(hdrSessionTokenField, buf[offset:], h.sessionToken)
+
+ for i := range h.attr {
+ offset += proto.NestedStructureMarshal(hdrAttributesField, buf[offset:], &h.attr[i])
+ }
+
+ proto.NestedStructureMarshal(hdrSplitField, buf[offset:], h.split)
+ proto.NestedStructureMarshal(hdrECField, buf[offset:], h.ec)
+
+ return buf
+}
+
+func (h *Header) StableSize() (size int) {
+ if h == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(hdrVersionField, h.version)
+ size += proto.NestedStructureSize(hdrContainerIDField, h.cid)
+ size += proto.NestedStructureSize(hdrOwnerIDField, h.ownerID)
+ size += proto.UInt64Size(hdrEpochField, h.creatEpoch)
+ size += proto.UInt64Size(hdrPayloadLengthField, h.payloadLen)
+ size += proto.NestedStructureSize(hdrPayloadHashField, h.payloadHash)
+ size += proto.EnumSize(hdrObjectTypeField, int32(h.typ))
+ size += proto.NestedStructureSize(hdrHomomorphicHashField, h.homoHash)
+ size += proto.NestedStructureSize(hdrSessionTokenField, h.sessionToken)
+ for i := range h.attr {
+ size += proto.NestedStructureSize(hdrAttributesField, &h.attr[i])
+ }
+ size += proto.NestedStructureSize(hdrSplitField, h.split)
+ size += proto.NestedStructureSize(hdrECField, h.ec)
+
+ return size
+}
+
+func (h *Header) Unmarshal(data []byte) error {
+ return message.Unmarshal(h, data, new(object.Header))
+}
+
+func (h *HeaderWithSignature) StableMarshal(buf []byte) []byte {
+ if h == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, h.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(hdrWithSigHeaderField, buf[offset:], h.header)
+ proto.NestedStructureMarshal(hdrWithSigSignatureField, buf[offset:], h.signature)
+
+ return buf
+}
+
+func (h *HeaderWithSignature) StableSize() (size int) {
+ if h == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(hdrVersionField, h.header)
+ size += proto.NestedStructureSize(hdrContainerIDField, h.signature)
+
+ return size
+}
+
+func (h *HeaderWithSignature) Unmarshal(data []byte) error {
+ return message.Unmarshal(h, data, new(object.HeaderWithSignature))
+}
+
+func (o *Object) StableMarshal(buf []byte) []byte {
+ if o == nil {
+ return []byte{}
+ }
+
+ if o.marshalData != nil {
+ if buf == nil {
+ return o.marshalData
+ }
+ copy(buf, o.marshalData)
+ return buf
+ }
+
+ if buf == nil {
+ buf = make([]byte, o.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(objIDField, buf[offset:], o.objectID)
+ offset += proto.NestedStructureMarshal(objSignatureField, buf[offset:], o.idSig)
+ offset += proto.NestedStructureMarshal(objHeaderField, buf[offset:], o.header)
+ proto.BytesMarshal(objPayloadField, buf[offset:], o.payload)
+
+ return buf
+}
+
+// SetMarshalData sets marshal data to reduce memory allocations.
+//
+// It is unsafe to modify/copy object data after setting marshal data.
+func (o *Object) SetMarshalData(data []byte) {
+ if o == nil {
+ return
+ }
+ o.marshalData = data
+}
+
+func (o *Object) StableSize() (size int) {
+ if o == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(objIDField, o.objectID)
+ size += proto.NestedStructureSize(objSignatureField, o.idSig)
+ size += proto.NestedStructureSize(objHeaderField, o.header)
+ size += proto.BytesSize(objPayloadField, o.payload)
+
+ return size
+}
+
+func (o *Object) Unmarshal(data []byte) error {
+ return message.Unmarshal(o, data, new(object.Object))
+}
+
+func (s *SplitInfo) StableMarshal(buf []byte) []byte {
+ if s == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, s.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.BytesMarshal(splitInfoSplitIDField, buf[offset:], s.splitID)
+ offset += proto.NestedStructureMarshal(splitInfoLastPartField, buf[offset:], s.lastPart)
+ proto.NestedStructureMarshal(splitInfoLinkField, buf[offset:], s.link)
+
+ return buf
+}
+
+func (s *SplitInfo) StableSize() (size int) {
+ if s == nil {
+ return 0
+ }
+
+ size += proto.BytesSize(splitInfoSplitIDField, s.splitID)
+ size += proto.NestedStructureSize(splitInfoLastPartField, s.lastPart)
+ size += proto.NestedStructureSize(splitInfoLinkField, s.link)
+
+ return size
+}
+
+func (s *SplitInfo) Unmarshal(data []byte) error {
+ return message.Unmarshal(s, data, new(object.SplitInfo))
+}
+
+func (e *ECInfo) StableMarshal(buf []byte) []byte {
+ if e == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, e.StableSize())
+ }
+
+ var offset int
+
+ for i := range e.Chunks {
+ offset += proto.NestedStructureMarshal(ecInfoChunksField, buf[offset:], &e.Chunks[i])
+ }
+
+ return buf
+}
+
+func (e *ECInfo) StableSize() (size int) {
+ if e == nil {
+ return 0
+ }
+
+ for i := range e.Chunks {
+ size += proto.NestedStructureSize(ecInfoChunksField, &e.Chunks[i])
+ }
+
+ return size
+}
+
+func (e *ECInfo) Unmarshal(data []byte) error {
+ return message.Unmarshal(e, data, new(object.ECInfo))
+}
+
+func (c *ECChunk) StableMarshal(buf []byte) []byte {
+ if c == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, c.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(ecChunkIDField, buf[offset:], &c.ID)
+ offset += proto.UInt32Marshal(ecChunkIndexField, buf[offset:], c.Index)
+ proto.UInt32Marshal(ecChunkTotalField, buf[offset:], c.Total)
+
+ return buf
+}
+
+func (c *ECChunk) StableSize() (size int) {
+ if c == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(ecChunkIDField, &c.ID)
+ size += proto.UInt32Size(ecChunkIndexField, c.Index)
+ size += proto.UInt32Size(ecChunkTotalField, c.Total)
+
+ return size
+}
+
+func (c *ECChunk) Unmarshal(data []byte) error {
+ return message.Unmarshal(c, data, new(object.ECInfo_Chunk))
+}
+
+func (r *GetRequestBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(getReqBodyAddressField, buf[offset:], r.addr)
+ proto.BoolMarshal(getReqBodyRawFlagField, buf[offset:], r.raw)
+
+ return buf
+}
+
+func (r *GetRequestBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(getReqBodyAddressField, r.addr)
+ size += proto.BoolSize(getReqBodyRawFlagField, r.raw)
+
+ return size
+}
+
+func (r *GetRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.GetRequest_Body))
+}
+
+func (r *GetObjectPartInit) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(getRespInitObjectIDField, buf[offset:], r.id)
+ offset += proto.NestedStructureMarshal(getRespInitSignatureField, buf[offset:], r.sig)
+ proto.NestedStructureMarshal(getRespInitHeaderField, buf[offset:], r.hdr)
+
+ return buf
+}
+
+func (r *GetObjectPartInit) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(getRespInitObjectIDField, r.id)
+ size += proto.NestedStructureSize(getRespInitSignatureField, r.sig)
+ size += proto.NestedStructureSize(getRespInitHeaderField, r.hdr)
+
+ return size
+}
+
+func (r *GetObjectPartInit) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.GetResponse_Body_Init))
+}
+
+func (r *GetResponseBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ switch v := r.objPart.(type) {
+ case nil:
+ case *GetObjectPartInit:
+ proto.NestedStructureMarshal(getRespBodyInitField, buf, v)
+ case *GetObjectPartChunk:
+ if v != nil {
+ proto.BytesMarshal(getRespBodyChunkField, buf, v.chunk)
+ }
+ case *SplitInfo:
+ proto.NestedStructureMarshal(getRespBodySplitInfoField, buf, v)
+ case *ECInfo:
+ proto.NestedStructureMarshal(getRespBodyECInfoField, buf, v)
+ default:
+ panic("unknown one of object get response body type")
+ }
+
+ return buf
+}
+
+func (r *GetResponseBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ switch v := r.objPart.(type) {
+ case nil:
+ case *GetObjectPartInit:
+ size += proto.NestedStructureSize(getRespBodyInitField, v)
+ case *GetObjectPartChunk:
+ if v != nil {
+ size += proto.BytesSize(getRespBodyChunkField, v.chunk)
+ }
+ case *SplitInfo:
+ size += proto.NestedStructureSize(getRespBodySplitInfoField, v)
+ case *ECInfo:
+ size += proto.NestedStructureSize(getRespBodyECInfoField, v)
+ default:
+ panic("unknown one of object get response body type")
+ }
+
+ return
+}
+
+func (r *GetResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.GetResponse_Body))
+}
+
+func (r *PutObjectPartInit) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(putReqInitObjectIDField, buf[offset:], r.id)
+ offset += proto.NestedStructureMarshal(putReqInitSignatureField, buf[offset:], r.sig)
+ offset += proto.NestedStructureMarshal(putReqInitHeaderField, buf[offset:], r.hdr)
+ proto.RepeatedUInt32Marshal(putReqInitCopiesNumField, buf[offset:], r.copyNum)
+
+ return buf
+}
+
+func (r *PutObjectPartInit) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(putReqInitObjectIDField, r.id)
+ size += proto.NestedStructureSize(putReqInitSignatureField, r.sig)
+ size += proto.NestedStructureSize(putReqInitHeaderField, r.hdr)
+
+ arrSize, _ := proto.RepeatedUInt32Size(putReqInitCopiesNumField, r.copyNum)
+ size += arrSize
+
+ return size
+}
+
+func (r *PutObjectPartInit) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.PutRequest_Body_Init))
+}
+
+func (r *PutRequestBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ switch v := r.objPart.(type) {
+ case nil:
+ case *PutObjectPartInit:
+ proto.NestedStructureMarshal(putReqBodyInitField, buf, v)
+ case *PutObjectPartChunk:
+ if v != nil {
+ proto.BytesMarshal(putReqBodyChunkField, buf, v.chunk)
+ }
+ default:
+ panic("unknown one of object put request body type")
+ }
+
+ return buf
+}
+
+func (r *PutRequestBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ switch v := r.objPart.(type) {
+ case nil:
+ case *PutObjectPartInit:
+ size += proto.NestedStructureSize(putReqBodyInitField, v)
+ case *PutObjectPartChunk:
+ if v != nil {
+ size += proto.BytesSize(putReqBodyChunkField, v.chunk)
+ }
+ default:
+ panic("unknown one of object get response body type")
+ }
+
+ return size
+}
+
+func (r *PutRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.PutRequest_Body))
+}
+
+func (r *PutResponseBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ proto.NestedStructureMarshal(putRespBodyObjectIDField, buf, r.id)
+
+ return buf
+}
+
+func (r *PutResponseBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(putRespBodyObjectIDField, r.id)
+
+ return size
+}
+
+func (r *PutResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.PutResponse_Body))
+}
+
+func (r *DeleteRequestBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ proto.NestedStructureMarshal(deleteReqBodyAddressField, buf, r.addr)
+
+ return buf
+}
+
+func (r *DeleteRequestBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(deleteReqBodyAddressField, r.addr)
+
+ return size
+}
+
+func (r *DeleteRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.DeleteRequest_Body))
+}
+
+func (r *DeleteResponseBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ proto.NestedStructureMarshal(deleteRespBodyTombstoneFNum, buf, r.tombstone)
+
+ return buf
+}
+
+func (r *DeleteResponseBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(deleteRespBodyTombstoneFNum, r.tombstone)
+
+ return size
+}
+
+func (r *DeleteResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.DeleteResponse_Body))
+}
+
+func (r *HeadRequestBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(headReqBodyAddressField, buf[offset:], r.addr)
+ offset += proto.BoolMarshal(headReqBodyMainFlagField, buf[offset:], r.mainOnly)
+ proto.BoolMarshal(headReqBodyRawFlagField, buf[offset:], r.raw)
+
+ return buf
+}
+
+func (r *HeadRequestBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(headReqBodyAddressField, r.addr)
+ size += proto.BoolSize(headReqBodyMainFlagField, r.mainOnly)
+ size += proto.BoolSize(headReqBodyRawFlagField, r.raw)
+
+ return size
+}
+
+func (r *HeadRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.HeadRequest_Body))
+}
+
+func (r *HeadResponseBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ switch v := r.hdrPart.(type) {
+ case nil:
+ case *HeaderWithSignature:
+ if v != nil {
+ proto.NestedStructureMarshal(headRespBodyHeaderField, buf, v)
+ }
+ case *ShortHeader:
+ if v != nil {
+ proto.NestedStructureMarshal(headRespBodyShortHeaderField, buf, v)
+ }
+ case *SplitInfo:
+ if v != nil {
+ proto.NestedStructureMarshal(headRespBodySplitInfoField, buf, v)
+ }
+ case *ECInfo:
+ if v != nil {
+ proto.NestedStructureMarshal(headRespBodyECInfoField, buf, v)
+ }
+ default:
+ panic("unknown one of object put request body type")
+ }
+
+ return buf
+}
+
+func (r *HeadResponseBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ switch v := r.hdrPart.(type) {
+ case nil:
+ case *HeaderWithSignature:
+ if v != nil {
+ size += proto.NestedStructureSize(headRespBodyHeaderField, v)
+ }
+ case *ShortHeader:
+ if v != nil {
+ size += proto.NestedStructureSize(headRespBodyShortHeaderField, v)
+ }
+ case *SplitInfo:
+ if v != nil {
+ size += proto.NestedStructureSize(headRespBodySplitInfoField, v)
+ }
+ case *ECInfo:
+ if v != nil {
+ size += proto.NestedStructureSize(headRespBodyECInfoField, v)
+ }
+ default:
+ panic("unknown one of object put request body type")
+ }
+
+ return
+}
+
+func (r *HeadResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.HeadResponse_Body))
+}
+
+func (f *SearchFilter) StableMarshal(buf []byte) []byte {
+ if f == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, f.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.EnumMarshal(searchFilterMatchField, buf[offset:], int32(f.matchType))
+ offset += proto.StringMarshal(searchFilterNameField, buf[offset:], f.key)
+ proto.StringMarshal(searchFilterValueField, buf[offset:], f.val)
+
+ return buf
+}
+
+func (f *SearchFilter) StableSize() (size int) {
+ if f == nil {
+ return 0
+ }
+
+ size += proto.EnumSize(searchFilterMatchField, int32(f.matchType))
+ size += proto.StringSize(searchFilterNameField, f.key)
+ size += proto.StringSize(searchFilterValueField, f.val)
+
+ return size
+}
+
+func (f *SearchFilter) Unmarshal(data []byte) error {
+ return message.Unmarshal(f, data, new(object.SearchRequest_Body_Filter))
+}
+
+func (r *SearchRequestBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(searchReqBodyContainerIDField, buf[offset:], r.cid)
+ offset += proto.UInt32Marshal(searchReqBodyVersionField, buf[offset:], r.version)
+
+ for i := range r.filters {
+ offset += proto.NestedStructureMarshal(searchReqBodyFiltersField, buf[offset:], &r.filters[i])
+ }
+
+ return buf
+}
+
+func (r *SearchRequestBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(searchReqBodyContainerIDField, r.cid)
+ size += proto.UInt32Size(searchReqBodyVersionField, r.version)
+
+ for i := range r.filters {
+ size += proto.NestedStructureSize(searchReqBodyFiltersField, &r.filters[i])
+ }
+
+ return size
+}
+
+func (r *SearchRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.SearchRequest_Body))
+}
+
+func (r *SearchResponseBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ refs.ObjectIDNestedListMarshal(searchRespBodyObjectIDsField, buf[offset:], r.idList)
+
+ return buf
+}
+
+func (r *SearchResponseBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += refs.ObjectIDNestedListSize(searchRespBodyObjectIDsField, r.idList)
+
+ return size
+}
+
+func (r *SearchResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.SearchResponse_Body))
+}
+
+func (r *Range) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.UInt64Marshal(rangeOffsetField, buf[offset:], r.off)
+ proto.UInt64Marshal(rangeLengthField, buf[offset:], r.len)
+
+ return buf
+}
+
+func (r *Range) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += proto.UInt64Size(rangeOffsetField, r.off)
+ size += proto.UInt64Size(rangeLengthField, r.len)
+
+ return size
+}
+
+func (r *Range) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.Range))
+}
+
+func (r *GetRangeRequestBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(getRangeReqBodyAddressField, buf[offset:], r.addr)
+ offset += proto.NestedStructureMarshal(getRangeReqBodyRangeField, buf[offset:], r.rng)
+ proto.BoolMarshal(getRangeReqBodyRawField, buf[offset:], r.raw)
+
+ return buf
+}
+
+func (r *GetRangeRequestBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(getRangeReqBodyAddressField, r.addr)
+ size += proto.NestedStructureSize(getRangeReqBodyRangeField, r.rng)
+ size += proto.BoolSize(getRangeReqBodyRawField, r.raw)
+
+ return size
+}
+
+func (r *GetRangeRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.GetRangeRequest_Body))
+}
+
+func (r *GetRangeResponseBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ switch v := r.rngPart.(type) {
+ case nil:
+ case *GetRangePartChunk:
+ if v != nil {
+ proto.BytesMarshal(getRangeRespChunkField, buf, v.chunk)
+ }
+ case *SplitInfo:
+ if v != nil {
+ proto.NestedStructureMarshal(getRangeRespSplitInfoField, buf, v)
+ }
+ case *ECInfo:
+ if v != nil {
+ proto.NestedStructureMarshal(getRangeRespECInfoField, buf, v)
+ }
+ default:
+ panic("unknown one of object get range request body type")
+ }
+
+ return buf
+}
+
+func (r *GetRangeResponseBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ switch v := r.rngPart.(type) {
+ case nil:
+ case *GetRangePartChunk:
+ if v != nil {
+ size += proto.BytesSize(getRangeRespChunkField, v.chunk)
+ }
+ case *SplitInfo:
+ if v != nil {
+ size = proto.NestedStructureSize(getRangeRespSplitInfoField, v)
+ }
+ case *ECInfo:
+ if v != nil {
+ size = proto.NestedStructureSize(getRangeRespECInfoField, v)
+ }
+ default:
+ panic("unknown one of object get range request body type")
+ }
+
+ return
+}
+
+func (r *GetRangeResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.GetRangeResponse_Body))
+}
+
+func (r *GetRangeHashRequestBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(getRangeHashReqBodyAddressField, buf[offset:], r.addr)
+
+ for i := range r.rngs {
+ offset += proto.NestedStructureMarshal(getRangeHashReqBodyRangesField, buf[offset:], &r.rngs[i])
+ }
+
+ offset += proto.BytesMarshal(getRangeHashReqBodySaltField, buf[offset:], r.salt)
+ proto.EnumMarshal(getRangeHashReqBodyTypeField, buf[offset:], int32(r.typ))
+
+ return buf
+}
+
+func (r *GetRangeHashRequestBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(getRangeHashReqBodyAddressField, r.addr)
+
+ for i := range r.rngs {
+ size += proto.NestedStructureSize(getRangeHashReqBodyRangesField, &r.rngs[i])
+ }
+
+ size += proto.BytesSize(getRangeHashReqBodySaltField, r.salt)
+ size += proto.EnumSize(getRangeHashReqBodyTypeField, int32(r.typ))
+
+ return size
+}
+
+func (r *GetRangeHashRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.GetRangeHashRequest_Body))
+}
+
+func (r *GetRangeHashResponseBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.EnumMarshal(getRangeHashRespBodyTypeField, buf, int32(r.typ))
+ proto.RepeatedBytesMarshal(getRangeHashRespBodyHashListField, buf[offset:], r.hashList)
+
+ return buf
+}
+
+func (r *GetRangeHashResponseBody) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += proto.EnumSize(getRangeHashRespBodyTypeField, int32(r.typ))
+ size += proto.RepeatedBytesSize(getRangeHashRespBodyHashListField, r.hashList)
+
+ return size
+}
+
+func (r *GetRangeHashResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.GetRangeHashResponse_Body))
+}
+
+func (r *PutSingleRequestBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if r.marshalData != nil {
+ if buf == nil {
+ return r.marshalData
+ }
+ copy(buf, r.marshalData)
+ return buf
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+ offset += proto.NestedStructureMarshal(putSingleReqObjectField, buf[offset:], r.object)
+ proto.RepeatedUInt32Marshal(putSingleReqCopiesNumberField, buf[offset:], r.copyNum)
+
+ return buf
+}
+
+// SetMarshalData sets marshal data to reduce memory allocations.
+//
+// It is unsafe to modify/copy request data after setting marshal data.
+func (r *PutSingleRequestBody) SetMarshalData(data []byte) {
+ if r == nil {
+ return
+ }
+
+ r.marshalData = data
+
+ proto.NestedStructureSetMarshalData(putSingleReqObjectField, r.marshalData, r.object)
+}
+
+func (r *PutSingleRequestBody) StableSize() int {
+ if r == nil {
+ return 0
+ }
+
+ var size int
+ size += proto.NestedStructureSize(putSingleReqObjectField, r.object)
+ arrSize, _ := proto.RepeatedUInt32Size(putSingleReqCopiesNumberField, r.copyNum)
+ size += arrSize
+
+ return size
+}
+
+func (r *PutSingleRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.PutSingleRequest_Body))
+}
+
+func (r *PutSingleResponseBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ return buf
+}
+
+func (r *PutSingleResponseBody) StableSize() int {
+ return 0
+}
+
+func (r *PutSingleResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.PutSingleResponse_Body))
+}
+
+func (r *PatchRequestBodyPatch) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+ offset += proto.NestedStructureMarshal(patchRequestBodyPatchRangeField, buf[offset:], r.GetRange())
+ proto.BytesMarshal(patchRequestBodyPatchChunkField, buf[offset:], r.GetChunk())
+
+ return buf
+}
+
+func (r *PatchRequestBodyPatch) StableSize() int {
+ if r == nil {
+ return 0
+ }
+
+ var size int
+ size += proto.NestedStructureSize(patchRequestBodyPatchRangeField, r.GetRange())
+ size += proto.BytesSize(patchRequestBodyPatchChunkField, r.GetChunk())
+
+ return size
+}
+
+func (r *PatchRequestBodyPatch) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.PatchRequest_Body_Patch))
+}
+
+func (r *PatchRequestBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+ offset += proto.NestedStructureMarshal(patchRequestBodyAddrField, buf[offset:], r.address)
+ for i := range r.newAttributes {
+ offset += proto.NestedStructureMarshal(patchRequestBodyNewAttrsField, buf[offset:], &r.newAttributes[i])
+ }
+ offset += proto.BoolMarshal(patchRequestBodyReplaceAttrField, buf[offset:], r.replaceAttributes)
+ proto.NestedStructureMarshal(patchRequestBodyPatchField, buf[offset:], r.patch)
+
+ return buf
+}
+
+func (r *PatchRequestBody) StableSize() int {
+ if r == nil {
+ return 0
+ }
+
+ var size int
+ size += proto.NestedStructureSize(patchRequestBodyAddrField, r.address)
+ for i := range r.newAttributes {
+ size += proto.NestedStructureSize(patchRequestBodyNewAttrsField, &r.newAttributes[i])
+ }
+ size += proto.BoolSize(patchRequestBodyReplaceAttrField, r.replaceAttributes)
+ size += proto.NestedStructureSize(patchRequestBodyPatchField, r.patch)
+
+ return size
+}
+
+func (r *PatchRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.PatchRequest_Body))
+}
+
+func (r *PatchResponseBody) StableSize() int {
+ if r == nil {
+ return 0
+ }
+
+ var size int
+ size += proto.NestedStructureSize(patchResponseBodyObjectIDField, r.ObjectID)
+
+ return size
+}
+
+func (r *PatchResponseBody) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+ proto.NestedStructureMarshal(patchResponseBodyObjectIDField, buf[offset:], r.ObjectID)
+
+ return buf
+}
+
+func (r *PatchResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(object.PatchResponse_Body))
+}
diff --git a/api/object/message_test.go b/api/object/message_test.go
new file mode 100644
index 0000000..21568f8
--- /dev/null
+++ b/api/object/message_test.go
@@ -0,0 +1,65 @@
+package object_test
+
+import (
+ "testing"
+
+ objecttest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object/test"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ messagetest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message/test"
+)
+
+func TestMessageConvert(t *testing.T) {
+ messagetest.TestRPCMessage(t,
+ func(empty bool) message.Message { return objecttest.GenerateShortHeader(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateAttribute(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateSplitHeader(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateHeaderWithSplitHeader(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateHeaderWithECHeader(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateECHeader(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateObject(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateSplitInfo(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateECInfo(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateGetRequestBody(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateGetRequest(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateGetObjectPartInit(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateGetObjectPartChunk(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateGetResponseBody(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateGetResponse(empty) },
+ func(empty bool) message.Message { return objecttest.GeneratePutObjectPartInit(empty) },
+ func(empty bool) message.Message { return objecttest.GeneratePutObjectPartChunk(empty) },
+ func(empty bool) message.Message { return objecttest.GeneratePutRequestBody(empty) },
+ func(empty bool) message.Message { return objecttest.GeneratePutRequest(empty) },
+ func(empty bool) message.Message { return objecttest.GeneratePutResponseBody(empty) },
+ func(empty bool) message.Message { return objecttest.GeneratePutResponse(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateDeleteRequestBody(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateDeleteRequest(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateDeleteResponseBody(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateDeleteResponse(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateHeadRequestBody(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateHeadRequest(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateHeadResponseBody(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateHeadResponse(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateSearchFilter(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateSearchRequestBody(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateSearchRequest(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateSearchResponseBody(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateSearchResponse(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateRange(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateGetRangeRequestBody(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateGetRangeRequest(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateGetRangeResponseBody(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateGetRangeResponse(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateGetRangeHashRequestBody(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateGetRangeHashRequest(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateGetRangeHashResponseBody(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateGetRangeHashResponse(empty) },
+ func(empty bool) message.Message { return objecttest.GenerateLock(empty) },
+ func(empty bool) message.Message { return objecttest.GeneratePutSingleRequest(empty) },
+ func(empty bool) message.Message { return objecttest.GeneratePutSingleResponse(empty) },
+ func(empty bool) message.Message { return objecttest.GeneratePatchRequestBodyPatch(empty) },
+ func(empty bool) message.Message { return objecttest.GeneratePatchRequestBody(empty) },
+ func(empty bool) message.Message { return objecttest.GeneratePatchRequest(empty) },
+ func(empty bool) message.Message { return objecttest.GeneratePatchResponseBody(empty) },
+ func(empty bool) message.Message { return objecttest.GeneratePatchResponse(empty) },
+ )
+}
diff --git a/api/object/status.go b/api/object/status.go
new file mode 100644
index 0000000..32fda2b
--- /dev/null
+++ b/api/object/status.go
@@ -0,0 +1,91 @@
+package object
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
+ statusgrpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status/grpc"
+)
+
+// LocalizeFailStatus checks if passed global status.Code is related to object failure and:
+//
+// then localizes the code and returns true,
+// else leaves the code unchanged and returns false.
+//
+// Arg must not be nil.
+func LocalizeFailStatus(c *status.Code) bool {
+ return status.LocalizeIfInSection(c, uint32(statusgrpc.Section_SECTION_OBJECT))
+}
+
+// GlobalizeFail globalizes local code of object failure.
+//
+// Arg must not be nil.
+func GlobalizeFail(c *status.Code) {
+ c.GlobalizeSection(uint32(statusgrpc.Section_SECTION_OBJECT))
+}
+
+const (
+ // StatusAccessDenied is a local status.Code value for
+ // ACCESS_DENIED object failure.
+ StatusAccessDenied status.Code = iota
+ // StatusNotFound is a local status.Code value for
+ // OBJECT_NOT_FOUND object failure.
+ StatusNotFound
+ // StatusLocked is a local status.Code value for
+ // LOCKED object failure.
+ StatusLocked
+ // StatusLockNonRegularObject is a local status.Code value for
+ // LOCK_NON_REGULAR_OBJECT object failure.
+ StatusLockNonRegularObject
+ // StatusAlreadyRemoved is a local status.Code value for
+ // OBJECT_ALREADY_REMOVED object failure.
+ StatusAlreadyRemoved
+ // StatusOutOfRange is a local status.Code value for
+ // OUT_OF_RANGE object failure.
+ StatusOutOfRange
+)
+
+const (
+ // detailAccessDeniedDesc is a StatusAccessDenied detail ID for
+ // human-readable description.
+ detailAccessDeniedDesc = iota
+)
+
+// WriteAccessDeniedDesc writes human-readable description of StatusAccessDenied
+// into status.Status as a detail. The status must not be nil.
+//
+// Existing details are expected to be ID-unique, otherwise undefined behavior.
+func WriteAccessDeniedDesc(st *status.Status, desc string) {
+ var found bool
+
+ st.IterateDetails(func(d *status.Detail) bool {
+ if d.ID() == detailAccessDeniedDesc {
+ found = true
+ d.SetValue([]byte(desc))
+ }
+
+ return found
+ })
+
+ if !found {
+ var d status.Detail
+
+ d.SetID(detailAccessDeniedDesc)
+ d.SetValue([]byte(desc))
+
+ st.AppendDetails(d)
+ }
+}
+
+// ReadAccessDeniedDesc looks up for status detail with human-readable description
+// of StatusAccessDenied. Returns empty string if detail is missing.
+func ReadAccessDeniedDesc(st status.Status) (desc string) {
+ st.IterateDetails(func(d *status.Detail) bool {
+ if d.ID() == detailAccessDeniedDesc {
+ desc = string(d.Value())
+ return true
+ }
+
+ return false
+ })
+
+ return
+}
diff --git a/api/object/status_test.go b/api/object/status_test.go
new file mode 100644
index 0000000..465f5c8
--- /dev/null
+++ b/api/object/status_test.go
@@ -0,0 +1,35 @@
+package object_test
+
+import (
+ "testing"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
+ statustest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status/test"
+ "github.com/stretchr/testify/require"
+)
+
+func TestStatusCodes(t *testing.T) {
+ statustest.TestCodes(t, object.LocalizeFailStatus, object.GlobalizeFail,
+ object.StatusAccessDenied, 2048,
+ object.StatusNotFound, 2049,
+ object.StatusLocked, 2050,
+ object.StatusLockNonRegularObject, 2051,
+ object.StatusAlreadyRemoved, 2052,
+ object.StatusOutOfRange, 2053,
+ )
+}
+
+func TestAccessDeniedDesc(t *testing.T) {
+ var st status.Status
+
+ require.Empty(t, object.ReadAccessDeniedDesc(st))
+
+ const desc = "some description"
+
+ object.WriteAccessDeniedDesc(&st, desc)
+ require.Equal(t, desc, object.ReadAccessDeniedDesc(st))
+
+ object.WriteAccessDeniedDesc(&st, desc+"1")
+ require.Equal(t, desc+"1", object.ReadAccessDeniedDesc(st))
+}
diff --git a/api/object/string.go b/api/object/string.go
new file mode 100644
index 0000000..9910df7
--- /dev/null
+++ b/api/object/string.go
@@ -0,0 +1,55 @@
+package object
+
+import (
+ object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object/grpc"
+)
+
+// String returns string representation of Type.
+func (t Type) String() string {
+ return TypeToGRPCField(t).String()
+}
+
+// FromString parses Type from a string representation.
+// It is a reverse action to String().
+//
+// Returns true if s was parsed successfully.
+func (t *Type) FromString(s string) bool {
+ var g object.ObjectType
+
+ ok := g.FromString(s)
+
+ if ok {
+ *t = TypeFromGRPCField(g)
+ }
+
+ return ok
+}
+
+// TypeFromString converts string to Type.
+//
+// Deprecated: use FromString method.
+func TypeFromString(s string) (t Type) {
+ t.FromString(s)
+ return
+}
+
+// String returns string representation of MatchType.
+func (t MatchType) String() string {
+ return MatchTypeToGRPCField(t).String()
+}
+
+// FromString parses MatchType from a string representation.
+// It is a reverse action to String().
+//
+// Returns true if s was parsed successfully.
+func (t *MatchType) FromString(s string) bool {
+ var g object.MatchType
+
+ ok := g.FromString(s)
+
+ if ok {
+ *t = MatchTypeFromGRPCField(g)
+ }
+
+ return ok
+}
diff --git a/api/object/test/generate.go b/api/object/test/generate.go
new file mode 100644
index 0000000..37345f9
--- /dev/null
+++ b/api/object/test/generate.go
@@ -0,0 +1,766 @@
+package objecttest
+
+import (
+ crand "crypto/rand"
+ "math/rand"
+ "time"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ refstest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/test"
+ sessiontest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/test"
+)
+
+func GenerateShortHeader(empty bool) *object.ShortHeader {
+ m := new(object.ShortHeader)
+
+ if !empty {
+ m.SetObjectType(13)
+ m.SetCreationEpoch(100)
+ m.SetPayloadLength(12321)
+ m.SetOwnerID(refstest.GenerateOwnerID(false))
+ }
+
+ m.SetVersion(refstest.GenerateVersion(empty))
+ m.SetHomomorphicHash(refstest.GenerateChecksum(empty))
+ m.SetPayloadHash(refstest.GenerateChecksum(empty))
+
+ return m
+}
+
+func GenerateAttribute(empty bool) *object.Attribute {
+ m := new(object.Attribute)
+
+ if !empty {
+ m.SetKey("object key")
+ m.SetValue("object value")
+ }
+
+ return m
+}
+
+func GenerateAttributes(empty bool) []object.Attribute {
+ var res []object.Attribute
+
+ if !empty {
+ res = append(res,
+ *GenerateAttribute(false),
+ *GenerateAttribute(false),
+ )
+ }
+
+ return res
+}
+
+func GenerateSplitHeader(empty bool) *object.SplitHeader {
+ return generateSplitHeader(empty, true)
+}
+
+func generateSplitHeader(empty, withPar bool) *object.SplitHeader {
+ m := new(object.SplitHeader)
+
+ if !empty {
+ id := make([]byte, 16)
+ _, _ = crand.Read(id)
+
+ m.SetSplitID(id)
+ m.SetParent(refstest.GenerateObjectID(false))
+ m.SetPrevious(refstest.GenerateObjectID(false))
+ m.SetChildren(refstest.GenerateObjectIDs(false))
+ }
+
+ m.SetParentSignature(refstest.GenerateSignature(empty))
+
+ if withPar {
+ m.SetParentHeader(GenerateHeaderWithSplitHeader(empty))
+ }
+
+ return m
+}
+
+func GenerateHeaderWithSplitHeader(empty bool) *object.Header {
+ m := generateHeader(empty)
+ m.SetSplit(generateSplitHeader(empty, false))
+ return m
+}
+
+func GenerateHeaderWithECHeader(empty bool) *object.Header {
+ m := generateHeader(empty)
+ m.SetEC(GenerateECHeader(empty))
+ return m
+}
+
+func GenerateECHeader(empty bool) *object.ECHeader {
+ ech := new(object.ECHeader)
+
+ if !empty {
+ ech.Parent = refstest.GenerateObjectID(empty)
+
+ ech.ParentSplitID = make([]byte, 16)
+ _, _ = crand.Read(ech.ParentSplitID)
+
+ ech.ParentSplitParentID = refstest.GenerateObjectID(empty)
+ ech.ParentAttributes = GenerateAttributes(empty)
+ ech.Index = 0
+ ech.Total = 2
+ ech.Header = []byte("chunk of ec-encoded parent header")
+ ech.HeaderLength = uint32(2 * len(ech.Header))
+ }
+
+ return ech
+}
+
+func generateHeader(empty bool) *object.Header {
+ m := new(object.Header)
+
+ if !empty {
+ m.SetPayloadLength(777)
+ m.SetCreationEpoch(432)
+ m.SetObjectType(111)
+ m.SetOwnerID(refstest.GenerateOwnerID(false))
+ m.SetContainerID(refstest.GenerateContainerID(false))
+ m.SetAttributes(GenerateAttributes(false))
+ }
+
+ m.SetVersion(refstest.GenerateVersion(empty))
+ m.SetPayloadHash(refstest.GenerateChecksum(empty))
+ m.SetHomomorphicHash(refstest.GenerateChecksum(empty))
+ m.SetSessionToken(sessiontest.GenerateSessionToken(empty))
+
+ return m
+}
+
+func GenerateHeaderWithSignature(empty bool) *object.HeaderWithSignature {
+ m := new(object.HeaderWithSignature)
+
+ m.SetSignature(refstest.GenerateSignature(empty))
+ m.SetHeader(GenerateHeaderWithSplitHeader(empty))
+
+ return m
+}
+
+func GenerateObject(empty bool) *object.Object {
+ m := new(object.Object)
+
+ if !empty {
+ m.SetPayload([]byte{7, 8, 9})
+ m.SetObjectID(refstest.GenerateObjectID(false))
+ }
+
+ m.SetSignature(refstest.GenerateSignature(empty))
+ m.SetHeader(GenerateHeaderWithSplitHeader(empty))
+
+ return m
+}
+
+func GenerateSplitInfo(empty bool) *object.SplitInfo {
+ m := new(object.SplitInfo)
+
+ if !empty {
+ id := make([]byte, 16)
+ _, _ = crand.Read(id)
+
+ m.SetSplitID(id)
+ m.SetLastPart(refstest.GenerateObjectID(false))
+ m.SetLink(refstest.GenerateObjectID(false))
+ }
+
+ return m
+}
+
+func GenerateECInfo(empty bool) *object.ECInfo {
+ m := new(object.ECInfo)
+
+ if !empty {
+ m.Chunks = make([]object.ECChunk, 2)
+ for i := range m.Chunks {
+ m.Chunks[i] = *GenerateECChunk(false)
+ }
+ }
+
+ return m
+}
+
+func GenerateECChunk(empty bool) *object.ECChunk {
+ m := new(object.ECChunk)
+
+ if !empty {
+ m.ID = *refstest.GenerateObjectID(false)
+ m.Index = 4
+ m.Total = 7
+ }
+
+ return m
+}
+
+func GenerateGetRequestBody(empty bool) *object.GetRequestBody {
+ m := new(object.GetRequestBody)
+
+ if !empty {
+ m.SetRaw(true)
+ m.SetAddress(refstest.GenerateAddress(false))
+ }
+
+ return m
+}
+
+func GenerateGetRequest(empty bool) *object.GetRequest {
+ m := new(object.GetRequest)
+
+ if !empty {
+ m.SetBody(GenerateGetRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateGetObjectPartInit(empty bool) *object.GetObjectPartInit {
+ m := new(object.GetObjectPartInit)
+
+ if !empty {
+ m.SetObjectID(refstest.GenerateObjectID(false))
+ }
+
+ m.SetSignature(refstest.GenerateSignature(empty))
+ m.SetHeader(GenerateHeaderWithSplitHeader(empty))
+
+ return m
+}
+
+func GenerateGetObjectPartChunk(empty bool) *object.GetObjectPartChunk {
+ m := new(object.GetObjectPartChunk)
+
+ if !empty {
+ m.SetChunk([]byte("get chunk"))
+ }
+
+ return m
+}
+
+func GenerateGetResponseBody(empty bool) *object.GetResponseBody {
+ m := new(object.GetResponseBody)
+
+ if !empty {
+ switch randomInt(3) {
+ case 0:
+ m.SetObjectPart(GenerateGetObjectPartInit(false))
+ case 1:
+ m.SetObjectPart(GenerateGetObjectPartChunk(false))
+ case 2:
+ m.SetObjectPart(GenerateSplitInfo(false))
+ }
+ }
+
+ return m
+}
+
+func GenerateGetResponse(empty bool) *object.GetResponse {
+ m := new(object.GetResponse)
+
+ if !empty {
+ m.SetBody(GenerateGetResponseBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+
+ return m
+}
+
+func GeneratePutObjectPartInit(empty bool) *object.PutObjectPartInit {
+ m := new(object.PutObjectPartInit)
+
+ if !empty {
+ m.SetCopiesNumber([]uint32{234})
+ m.SetObjectID(refstest.GenerateObjectID(false))
+ }
+
+ m.SetSignature(refstest.GenerateSignature(empty))
+ m.SetHeader(GenerateHeaderWithSplitHeader(empty))
+
+ return m
+}
+
+func GeneratePutObjectPartChunk(empty bool) *object.PutObjectPartChunk {
+ m := new(object.PutObjectPartChunk)
+
+ if !empty {
+ m.SetChunk([]byte("put chunk"))
+ }
+
+ return m
+}
+
+func GeneratePutRequestBody(empty bool) *object.PutRequestBody {
+ m := new(object.PutRequestBody)
+
+ if !empty {
+ switch randomInt(2) {
+ case 0:
+ m.SetObjectPart(GeneratePutObjectPartInit(false))
+ case 1:
+ m.SetObjectPart(GeneratePutObjectPartChunk(false))
+ }
+ }
+
+ return m
+}
+
+func GeneratePutRequest(empty bool) *object.PutRequest {
+ m := new(object.PutRequest)
+
+ if !empty {
+ m.SetBody(GeneratePutRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GeneratePutResponseBody(empty bool) *object.PutResponseBody {
+ m := new(object.PutResponseBody)
+
+ if !empty {
+ m.SetObjectID(refstest.GenerateObjectID(false))
+ }
+
+ return m
+}
+
+func GeneratePutResponse(empty bool) *object.PutResponse {
+ m := new(object.PutResponse)
+
+ if !empty {
+ m.SetBody(GeneratePutResponseBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateDeleteRequestBody(empty bool) *object.DeleteRequestBody {
+ m := new(object.DeleteRequestBody)
+
+ if !empty {
+ m.SetAddress(refstest.GenerateAddress(false))
+ }
+
+ return m
+}
+
+func GenerateDeleteRequest(empty bool) *object.DeleteRequest {
+ m := new(object.DeleteRequest)
+
+ if !empty {
+ m.SetBody(GenerateDeleteRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateDeleteResponseBody(empty bool) *object.DeleteResponseBody {
+ m := new(object.DeleteResponseBody)
+
+ if !empty {
+ m.SetTombstone(refstest.GenerateAddress(false))
+ }
+
+ return m
+}
+
+func GenerateDeleteResponse(empty bool) *object.DeleteResponse {
+ m := new(object.DeleteResponse)
+
+ if !empty {
+ m.SetBody(GenerateDeleteResponseBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateHeadRequestBody(empty bool) *object.HeadRequestBody {
+ m := new(object.HeadRequestBody)
+
+ if !empty {
+ m.SetRaw(true)
+ m.SetMainOnly(true)
+ m.SetAddress(refstest.GenerateAddress(false))
+ }
+
+ return m
+}
+
+func GenerateHeadRequest(empty bool) *object.HeadRequest {
+ m := new(object.HeadRequest)
+
+ if !empty {
+ m.SetBody(GenerateHeadRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateHeadResponseBody(empty bool) *object.HeadResponseBody {
+ m := new(object.HeadResponseBody)
+
+ if !empty {
+ switch randomInt(3) {
+ case 0:
+ m.SetHeaderPart(GenerateHeaderWithSignature(false))
+ case 1:
+ m.SetHeaderPart(GenerateShortHeader(false))
+ case 2:
+ m.SetHeaderPart(GenerateSplitInfo(false))
+ }
+ }
+
+ return m
+}
+
+func GenerateHeadResponse(empty bool) *object.HeadResponse {
+ m := new(object.HeadResponse)
+
+ if !empty {
+ m.SetBody(GenerateHeadResponseBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateSearchFilter(empty bool) *object.SearchFilter {
+ m := new(object.SearchFilter)
+
+ if !empty {
+ m.SetKey("search filter key")
+ m.SetValue("search filter val")
+ m.SetMatchType(987)
+ }
+
+ return m
+}
+
+func GenerateSearchFilters(empty bool) []object.SearchFilter {
+ var res []object.SearchFilter
+
+ if !empty {
+ res = append(res,
+ *GenerateSearchFilter(false),
+ *GenerateSearchFilter(false),
+ )
+ }
+
+ return res
+}
+
+func GenerateSearchRequestBody(empty bool) *object.SearchRequestBody {
+ m := new(object.SearchRequestBody)
+
+ if !empty {
+ m.SetVersion(555)
+ m.SetContainerID(refstest.GenerateContainerID(false))
+ m.SetFilters(GenerateSearchFilters(false))
+ }
+
+ return m
+}
+
+func GenerateSearchRequest(empty bool) *object.SearchRequest {
+ m := new(object.SearchRequest)
+
+ if !empty {
+ m.SetBody(GenerateSearchRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateSearchResponseBody(empty bool) *object.SearchResponseBody {
+ m := new(object.SearchResponseBody)
+
+ if !empty {
+ m.SetIDList(refstest.GenerateObjectIDs(false))
+ }
+
+ return m
+}
+
+func GenerateSearchResponse(empty bool) *object.SearchResponse {
+ m := new(object.SearchResponse)
+
+ if !empty {
+ m.SetBody(GenerateSearchResponseBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateRange(empty bool) *object.Range {
+ m := new(object.Range)
+
+ if !empty {
+ m.SetLength(11)
+ m.SetOffset(22)
+ }
+
+ return m
+}
+
+func GenerateRanges(empty bool) []object.Range {
+ var res []object.Range
+
+ if !empty {
+ res = append(res,
+ *GenerateRange(false),
+ *GenerateRange(false),
+ )
+ }
+
+ return res
+}
+
+func GenerateGetRangeRequestBody(empty bool) *object.GetRangeRequestBody {
+ m := new(object.GetRangeRequestBody)
+
+ if !empty {
+ m.SetRaw(true)
+ m.SetAddress(refstest.GenerateAddress(empty))
+ m.SetRange(GenerateRange(empty))
+ }
+
+ return m
+}
+
+func GenerateGetRangeRequest(empty bool) *object.GetRangeRequest {
+ m := new(object.GetRangeRequest)
+
+ if !empty {
+ m.SetBody(GenerateGetRangeRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateGetRangePartChunk(empty bool) *object.GetRangePartChunk {
+ m := new(object.GetRangePartChunk)
+
+ if !empty {
+ m.SetChunk([]byte("get range chunk"))
+ }
+
+ return m
+}
+
+func GenerateGetRangeResponseBody(empty bool) *object.GetRangeResponseBody {
+ m := new(object.GetRangeResponseBody)
+
+ if !empty {
+ switch randomInt(2) {
+ case 0:
+ m.SetRangePart(GenerateGetRangePartChunk(false))
+ case 1:
+ m.SetRangePart(GenerateSplitInfo(false))
+ }
+ }
+
+ return m
+}
+
+func GenerateGetRangeResponse(empty bool) *object.GetRangeResponse {
+ m := new(object.GetRangeResponse)
+
+ if !empty {
+ m.SetBody(GenerateGetRangeResponseBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateGetRangeHashRequestBody(empty bool) *object.GetRangeHashRequestBody {
+ m := new(object.GetRangeHashRequestBody)
+
+ if !empty {
+ m.SetSalt([]byte("range hash salt"))
+ m.SetType(455)
+ m.SetAddress(refstest.GenerateAddress(false))
+ m.SetRanges(GenerateRanges(false))
+ }
+
+ return m
+}
+
+func GenerateGetRangeHashRequest(empty bool) *object.GetRangeHashRequest {
+ m := new(object.GetRangeHashRequest)
+
+ if !empty {
+ m.SetBody(GenerateGetRangeHashRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateGetRangeHashResponseBody(empty bool) *object.GetRangeHashResponseBody {
+ m := new(object.GetRangeHashResponseBody)
+
+ if !empty {
+ m.SetType(678)
+ m.SetHashList([][]byte{
+ refstest.GenerateChecksum(false).GetSum(),
+ refstest.GenerateChecksum(false).GetSum(),
+ })
+ }
+
+ return m
+}
+
+func GenerateGetRangeHashResponse(empty bool) *object.GetRangeHashResponse {
+ m := new(object.GetRangeHashResponse)
+
+ if !empty {
+ m.SetBody(GenerateGetRangeHashResponseBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateLock(empty bool) *object.Lock {
+ m := new(object.Lock)
+
+ if !empty {
+ m.SetMembers([]refs.ObjectID{
+ *refstest.GenerateObjectID(false),
+ *refstest.GenerateObjectID(false),
+ })
+ }
+
+ return m
+}
+
+func GeneratePutSingleRequest(empty bool) *object.PutSingleRequest {
+ m := new(object.PutSingleRequest)
+
+ if !empty {
+ m.SetBody(GeneratePutSingleRequestBody(false))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GeneratePutSingleRequestBody(empty bool) *object.PutSingleRequestBody {
+ b := new(object.PutSingleRequestBody)
+ if !empty {
+ b.SetObject(GenerateObject(empty))
+ b.SetCopiesNumber([]uint32{12345})
+ }
+ return b
+}
+
+func GeneratePutSingleResponse(empty bool) *object.PutSingleResponse {
+ m := new(object.PutSingleResponse)
+ if !empty {
+ m.SetBody(new(object.PutSingleResponseBody))
+ }
+ m.SetMetaHeader(sessiontest.GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateResponseVerificationHeader(empty))
+ return m
+}
+
+func GeneratePatchRequestBodyPatch(empty bool) *object.PatchRequestBodyPatch {
+ m := new(object.PatchRequestBodyPatch)
+
+ if !empty {
+ m.Range = GenerateRange(false)
+ m.Chunk = []byte("GeneratePatchRequestBodyPatch")
+ }
+
+ return m
+}
+
+func GeneratePatchRequestBody(empty bool) *object.PatchRequestBody {
+ m := new(object.PatchRequestBody)
+
+ if !empty {
+ m.SetAddress(refstest.GenerateAddress(empty))
+ m.SetNewAttributes(GenerateAttributes(empty))
+ m.SetReplaceAttributes(false)
+ m.SetPatch(GeneratePatchRequestBodyPatch(empty))
+ }
+
+ return m
+}
+
+func GeneratePatchRequest(empty bool) *object.PatchRequest {
+ m := new(object.PatchRequest)
+
+ if !empty {
+ m.SetBody(GeneratePatchRequestBody(empty))
+ }
+
+ m.SetMetaHeader(sessiontest.GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(sessiontest.GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GeneratePatchResponseBody(empty bool) *object.PatchResponseBody {
+ m := new(object.PatchResponseBody)
+
+ if !empty {
+ m.ObjectID = refstest.GenerateObjectID(empty)
+ }
+
+ return m
+}
+
+func GeneratePatchResponse(empty bool) *object.PatchResponse {
+ m := new(object.PatchResponse)
+
+ if !empty {
+ m.Body = GeneratePatchResponseBody(empty)
+ }
+
+ return m
+}
+
+func randomInt(n int) int {
+ return rand.New(rand.NewSource(time.Now().UnixNano())).Intn(n)
+}
diff --git a/api/object/types.go b/api/object/types.go
new file mode 100644
index 0000000..537fb02
--- /dev/null
+++ b/api/object/types.go
@@ -0,0 +1,1650 @@
+package object
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+)
+
+type Type uint32
+
+type MatchType uint32
+
+type ShortHeader struct {
+ version *refs.Version
+
+ creatEpoch uint64
+
+ ownerID *refs.OwnerID
+
+ typ Type
+
+ payloadLen uint64
+
+ payloadHash, homoHash *refs.Checksum
+}
+
+type Attribute struct {
+ key, val string
+}
+
+type SplitHeader struct {
+ par, prev *refs.ObjectID
+
+ parSig *refs.Signature
+
+ parHdr *Header
+
+ children []refs.ObjectID
+
+ splitID []byte
+}
+
+type ECHeader struct {
+ Parent *refs.ObjectID
+ ParentSplitID []byte
+ ParentSplitParentID *refs.ObjectID
+ ParentAttributes []Attribute
+ Index uint32
+ Total uint32
+ Header []byte
+ HeaderLength uint32
+}
+
+type Header struct {
+ version *refs.Version
+
+ cid *refs.ContainerID
+
+ ownerID *refs.OwnerID
+
+ creatEpoch uint64
+
+ payloadLen uint64
+
+ payloadHash, homoHash *refs.Checksum
+
+ typ Type
+
+ sessionToken *session.Token
+
+ attr []Attribute
+
+ split *SplitHeader
+
+ ec *ECHeader
+}
+
+type HeaderWithSignature struct {
+ header *Header
+
+ signature *refs.Signature
+}
+
+type Object struct {
+ objectID *refs.ObjectID
+
+ idSig *refs.Signature
+
+ header *Header
+
+ payload []byte
+
+ // marshalData holds marshaled data, must not be marshaled by StableMarshal
+ marshalData []byte
+}
+
+type SplitInfo struct {
+ splitID []byte
+
+ lastPart *refs.ObjectID
+
+ link *refs.ObjectID
+}
+
+type ECChunk struct {
+ ID refs.ObjectID
+ Index uint32
+ Total uint32
+}
+
+type ECInfo struct {
+ Chunks []ECChunk
+}
+
+type GetRequestBody struct {
+ addr *refs.Address
+
+ raw bool
+}
+
+type GetObjectPart interface {
+ getObjectPart()
+}
+
+type GetObjectPartInit struct {
+ id *refs.ObjectID
+
+ sig *refs.Signature
+
+ hdr *Header
+}
+
+type GetObjectPartChunk struct {
+ chunk []byte
+}
+
+type GetRequest struct {
+ body *GetRequestBody
+
+ session.RequestHeaders
+}
+
+type GetResponseBody struct {
+ objPart GetObjectPart
+}
+
+type PutObjectPart interface {
+ putObjectPart()
+}
+
+type PutObjectPartInit struct {
+ id *refs.ObjectID
+
+ sig *refs.Signature
+
+ hdr *Header
+
+ copyNum []uint32
+}
+
+type PutObjectPartChunk struct {
+ chunk []byte
+}
+
+type GetResponse struct {
+ body *GetResponseBody
+
+ session.ResponseHeaders
+}
+
+type PutRequestBody struct {
+ objPart PutObjectPart
+}
+
+type PutRequest struct {
+ body *PutRequestBody
+
+ session.RequestHeaders
+}
+
+type PutResponseBody struct {
+ id *refs.ObjectID
+}
+
+type PutResponse struct {
+ body *PutResponseBody
+
+ session.ResponseHeaders
+}
+
+type DeleteRequestBody struct {
+ addr *refs.Address
+}
+
+type DeleteRequest struct {
+ body *DeleteRequestBody
+
+ session.RequestHeaders
+}
+
+type DeleteResponseBody struct {
+ tombstone *refs.Address
+}
+
+type DeleteResponse struct {
+ body *DeleteResponseBody
+
+ session.ResponseHeaders
+}
+
+type HeadRequestBody struct {
+ addr *refs.Address
+
+ mainOnly, raw bool
+}
+
+type GetHeaderPart interface {
+ getHeaderPart()
+}
+
+type HeadRequest struct {
+ body *HeadRequestBody
+
+ session.RequestHeaders
+}
+
+type HeadResponseBody struct {
+ hdrPart GetHeaderPart
+}
+
+type HeadResponse struct {
+ body *HeadResponseBody
+
+ session.ResponseHeaders
+}
+
+type SearchFilter struct {
+ matchType MatchType
+
+ key, val string
+}
+
+type SearchRequestBody struct {
+ cid *refs.ContainerID
+
+ version uint32
+
+ filters []SearchFilter
+}
+
+type SearchRequest struct {
+ body *SearchRequestBody
+
+ session.RequestHeaders
+}
+
+type SearchResponseBody struct {
+ idList []refs.ObjectID
+}
+
+type SearchResponse struct {
+ body *SearchResponseBody
+
+ session.ResponseHeaders
+}
+
+type Range struct {
+ off, len uint64
+}
+
+type GetRangeRequestBody struct {
+ addr *refs.Address
+
+ rng *Range
+
+ raw bool
+}
+
+type GetRangeRequest struct {
+ body *GetRangeRequestBody
+
+ session.RequestHeaders
+}
+
+type GetRangePart interface {
+ getRangePart()
+}
+
+type GetRangePartChunk struct {
+ chunk []byte
+}
+
+type GetRangeResponseBody struct {
+ rngPart GetRangePart
+}
+
+type GetRangeResponse struct {
+ body *GetRangeResponseBody
+
+ session.ResponseHeaders
+}
+
+type GetRangeHashRequestBody struct {
+ addr *refs.Address
+
+ rngs []Range
+
+ salt []byte
+
+ typ refs.ChecksumType
+}
+
+type GetRangeHashRequest struct {
+ body *GetRangeHashRequestBody
+
+ session.RequestHeaders
+}
+
+type GetRangeHashResponseBody struct {
+ typ refs.ChecksumType
+
+ hashList [][]byte
+}
+
+type GetRangeHashResponse struct {
+ body *GetRangeHashResponseBody
+
+ session.ResponseHeaders
+}
+
+type PutSingleRequestBody struct {
+ object *Object
+ copyNum []uint32
+
+ // marshalData holds marshaled data, must not be marshaled by StableMarshal
+ marshalData []byte
+}
+
+type PutSingleRequest struct {
+ body *PutSingleRequestBody
+
+ session.RequestHeaders
+}
+
+type PutSingleResponseBody struct{}
+
+type PutSingleResponse struct {
+ body *PutSingleResponseBody
+
+ session.ResponseHeaders
+}
+
+type PatchRequestBodyPatch struct {
+ Range *Range
+
+ Chunk []byte
+}
+
+type PatchRequestBody struct {
+ address *refs.Address
+
+ newAttributes []Attribute
+
+ replaceAttributes bool
+
+ patch *PatchRequestBodyPatch
+}
+
+type PatchRequest struct {
+ body *PatchRequestBody
+
+ session.RequestHeaders
+}
+
+type PatchResponseBody struct {
+ ObjectID *refs.ObjectID
+}
+
+type PatchResponse struct {
+ Body *PatchResponseBody
+
+ session.ResponseHeaders
+}
+
+const (
+ TypeRegular Type = iota
+ TypeTombstone
+ _
+ TypeLock
+)
+
+const (
+ MatchUnknown MatchType = iota
+ MatchStringEqual
+ MatchStringNotEqual
+ MatchNotPresent
+ MatchCommonPrefix
+)
+
+func (h *ShortHeader) GetVersion() *refs.Version {
+ if h != nil {
+ return h.version
+ }
+
+ return nil
+}
+
+func (h *ShortHeader) SetVersion(v *refs.Version) {
+ h.version = v
+}
+
+func (h *ShortHeader) GetCreationEpoch() uint64 {
+ if h != nil {
+ return h.creatEpoch
+ }
+
+ return 0
+}
+
+func (h *ShortHeader) SetCreationEpoch(v uint64) {
+ h.creatEpoch = v
+}
+
+func (h *ShortHeader) GetOwnerID() *refs.OwnerID {
+ if h != nil {
+ return h.ownerID
+ }
+
+ return nil
+}
+
+func (h *ShortHeader) SetOwnerID(v *refs.OwnerID) {
+ h.ownerID = v
+}
+
+func (h *ShortHeader) GetObjectType() Type {
+ if h != nil {
+ return h.typ
+ }
+
+ return TypeRegular
+}
+
+func (h *ShortHeader) SetObjectType(v Type) {
+ h.typ = v
+}
+
+func (h *ShortHeader) GetPayloadLength() uint64 {
+ if h != nil {
+ return h.payloadLen
+ }
+
+ return 0
+}
+
+func (h *ShortHeader) SetPayloadLength(v uint64) {
+ h.payloadLen = v
+}
+
+func (h *ShortHeader) GetPayloadHash() *refs.Checksum {
+ if h != nil {
+ return h.payloadHash
+ }
+
+ return nil
+}
+
+func (h *ShortHeader) SetPayloadHash(v *refs.Checksum) {
+ h.payloadHash = v
+}
+
+func (h *ShortHeader) GetHomomorphicHash() *refs.Checksum {
+ if h != nil {
+ return h.homoHash
+ }
+
+ return nil
+}
+
+func (h *ShortHeader) SetHomomorphicHash(v *refs.Checksum) {
+ h.homoHash = v
+}
+
+func (h *ShortHeader) getHeaderPart() {}
+
+func (a *Attribute) GetKey() string {
+ if a != nil {
+ return a.key
+ }
+
+ return ""
+}
+
+func (a *Attribute) SetKey(v string) {
+ a.key = v
+}
+
+func (a *Attribute) GetValue() string {
+ if a != nil {
+ return a.val
+ }
+
+ return ""
+}
+
+func (a *Attribute) SetValue(v string) {
+ a.val = v
+}
+
+func (h *SplitHeader) GetParent() *refs.ObjectID {
+ if h != nil {
+ return h.par
+ }
+
+ return nil
+}
+
+func (h *SplitHeader) SetParent(v *refs.ObjectID) {
+ h.par = v
+}
+
+func (h *SplitHeader) GetPrevious() *refs.ObjectID {
+ if h != nil {
+ return h.prev
+ }
+
+ return nil
+}
+
+func (h *SplitHeader) SetPrevious(v *refs.ObjectID) {
+ h.prev = v
+}
+
+func (h *SplitHeader) GetParentSignature() *refs.Signature {
+ if h != nil {
+ return h.parSig
+ }
+
+ return nil
+}
+
+func (h *SplitHeader) SetParentSignature(v *refs.Signature) {
+ h.parSig = v
+}
+
+func (h *SplitHeader) GetParentHeader() *Header {
+ if h != nil {
+ return h.parHdr
+ }
+
+ return nil
+}
+
+func (h *SplitHeader) SetParentHeader(v *Header) {
+ h.parHdr = v
+}
+
+func (h *SplitHeader) GetChildren() []refs.ObjectID {
+ if h != nil {
+ return h.children
+ }
+
+ return nil
+}
+
+func (h *SplitHeader) SetChildren(v []refs.ObjectID) {
+ h.children = v
+}
+
+func (h *SplitHeader) GetSplitID() []byte {
+ if h != nil {
+ return h.splitID
+ }
+
+ return nil
+}
+
+func (h *SplitHeader) SetSplitID(v []byte) {
+ h.splitID = v
+}
+
+func (h *Header) GetVersion() *refs.Version {
+ if h != nil {
+ return h.version
+ }
+
+ return nil
+}
+
+func (h *Header) SetVersion(v *refs.Version) {
+ h.version = v
+}
+
+func (h *Header) GetContainerID() *refs.ContainerID {
+ if h != nil {
+ return h.cid
+ }
+
+ return nil
+}
+
+func (h *Header) SetContainerID(v *refs.ContainerID) {
+ h.cid = v
+}
+
+func (h *Header) GetOwnerID() *refs.OwnerID {
+ if h != nil {
+ return h.ownerID
+ }
+
+ return nil
+}
+
+func (h *Header) SetOwnerID(v *refs.OwnerID) {
+ h.ownerID = v
+}
+
+func (h *Header) GetCreationEpoch() uint64 {
+ if h != nil {
+ return h.creatEpoch
+ }
+
+ return 0
+}
+
+func (h *Header) SetCreationEpoch(v uint64) {
+ h.creatEpoch = v
+}
+
+func (h *Header) GetPayloadLength() uint64 {
+ if h != nil {
+ return h.payloadLen
+ }
+
+ return 0
+}
+
+func (h *Header) SetPayloadLength(v uint64) {
+ h.payloadLen = v
+}
+
+func (h *Header) GetPayloadHash() *refs.Checksum {
+ if h != nil {
+ return h.payloadHash
+ }
+
+ return nil
+}
+
+func (h *Header) SetPayloadHash(v *refs.Checksum) {
+ h.payloadHash = v
+}
+
+func (h *Header) GetObjectType() Type {
+ if h != nil {
+ return h.typ
+ }
+
+ return TypeRegular
+}
+
+func (h *Header) SetObjectType(v Type) {
+ h.typ = v
+}
+
+func (h *Header) GetHomomorphicHash() *refs.Checksum {
+ if h != nil {
+ return h.homoHash
+ }
+
+ return nil
+}
+
+func (h *Header) SetHomomorphicHash(v *refs.Checksum) {
+ h.homoHash = v
+}
+
+func (h *Header) GetSessionToken() *session.Token {
+ if h != nil {
+ return h.sessionToken
+ }
+
+ return nil
+}
+
+func (h *Header) SetSessionToken(v *session.Token) {
+ h.sessionToken = v
+}
+
+func (h *Header) GetAttributes() []Attribute {
+ if h != nil {
+ return h.attr
+ }
+
+ return nil
+}
+
+func (h *Header) SetAttributes(v []Attribute) {
+ h.attr = v
+}
+
+func (h *Header) GetSplit() *SplitHeader {
+ if h != nil {
+ return h.split
+ }
+
+ return nil
+}
+
+func (h *Header) SetSplit(v *SplitHeader) {
+ h.split = v
+}
+
+func (h *Header) GetEC() *ECHeader {
+ if h != nil {
+ return h.ec
+ }
+ return nil
+}
+
+func (h *Header) SetEC(v *ECHeader) {
+ h.ec = v
+}
+
+func (h *HeaderWithSignature) GetHeader() *Header {
+ if h != nil {
+ return h.header
+ }
+
+ return nil
+}
+
+func (h *HeaderWithSignature) SetHeader(v *Header) {
+ h.header = v
+}
+
+func (h *HeaderWithSignature) GetSignature() *refs.Signature {
+ if h != nil {
+ return h.signature
+ }
+
+ return nil
+}
+
+func (h *HeaderWithSignature) SetSignature(v *refs.Signature) {
+ h.signature = v
+}
+
+func (h *HeaderWithSignature) getHeaderPart() {}
+
+func (o *Object) GetObjectID() *refs.ObjectID {
+ if o != nil {
+ return o.objectID
+ }
+
+ return nil
+}
+
+func (o *Object) SetObjectID(v *refs.ObjectID) {
+ o.objectID = v
+}
+
+func (o *Object) GetSignature() *refs.Signature {
+ if o != nil {
+ return o.idSig
+ }
+
+ return nil
+}
+
+func (o *Object) SetSignature(v *refs.Signature) {
+ o.idSig = v
+}
+
+func (o *Object) GetHeader() *Header {
+ if o != nil {
+ return o.header
+ }
+
+ return nil
+}
+
+func (o *Object) SetHeader(v *Header) {
+ o.header = v
+}
+
+func (o *Object) GetPayload() []byte {
+ if o != nil {
+ return o.payload
+ }
+
+ return nil
+}
+
+func (o *Object) SetPayload(v []byte) {
+ o.payload = v
+}
+
+func (s *SplitInfo) GetSplitID() []byte {
+ if s != nil {
+ return s.splitID
+ }
+
+ return nil
+}
+
+func (s *SplitInfo) SetSplitID(v []byte) {
+ s.splitID = v
+}
+
+func (s *SplitInfo) GetLastPart() *refs.ObjectID {
+ if s != nil {
+ return s.lastPart
+ }
+
+ return nil
+}
+
+func (s *SplitInfo) SetLastPart(v *refs.ObjectID) {
+ s.lastPart = v
+}
+
+func (s *SplitInfo) GetLink() *refs.ObjectID {
+ if s != nil {
+ return s.link
+ }
+
+ return nil
+}
+
+func (s *SplitInfo) SetLink(v *refs.ObjectID) {
+ s.link = v
+}
+
+func (s *SplitInfo) getObjectPart() {}
+
+func (s *SplitInfo) getHeaderPart() {}
+
+func (s *SplitInfo) getRangePart() {}
+
+func (r *GetRequestBody) GetAddress() *refs.Address {
+ if r != nil {
+ return r.addr
+ }
+
+ return nil
+}
+
+func (r *GetRequestBody) SetAddress(v *refs.Address) {
+ r.addr = v
+}
+
+func (r *GetRequestBody) GetRaw() bool {
+ if r != nil {
+ return r.raw
+ }
+
+ return false
+}
+
+func (r *GetRequestBody) SetRaw(v bool) {
+ r.raw = v
+}
+
+func (r *GetRequest) GetBody() *GetRequestBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *GetRequest) SetBody(v *GetRequestBody) {
+ r.body = v
+}
+
+func (r *GetObjectPartInit) GetObjectID() *refs.ObjectID {
+ if r != nil {
+ return r.id
+ }
+
+ return nil
+}
+
+func (r *GetObjectPartInit) SetObjectID(v *refs.ObjectID) {
+ r.id = v
+}
+
+func (r *GetObjectPartInit) GetSignature() *refs.Signature {
+ if r != nil {
+ return r.sig
+ }
+
+ return nil
+}
+
+func (r *GetObjectPartInit) SetSignature(v *refs.Signature) {
+ r.sig = v
+}
+
+func (r *GetObjectPartInit) GetHeader() *Header {
+ if r != nil {
+ return r.hdr
+ }
+
+ return nil
+}
+
+func (r *GetObjectPartInit) SetHeader(v *Header) {
+ r.hdr = v
+}
+
+func (r *GetObjectPartInit) getObjectPart() {}
+
+func (r *GetObjectPartChunk) GetChunk() []byte {
+ if r != nil {
+ return r.chunk
+ }
+
+ return nil
+}
+
+func (r *GetObjectPartChunk) SetChunk(v []byte) {
+ r.chunk = v
+}
+
+func (r *GetObjectPartChunk) getObjectPart() {}
+
+func (r *GetResponseBody) GetObjectPart() GetObjectPart {
+ if r != nil {
+ return r.objPart
+ }
+
+ return nil
+}
+
+func (r *GetResponseBody) SetObjectPart(v GetObjectPart) {
+ r.objPart = v
+}
+
+func (r *GetResponse) GetBody() *GetResponseBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *GetResponse) SetBody(v *GetResponseBody) {
+ r.body = v
+}
+
+func (r *PutObjectPartInit) GetObjectID() *refs.ObjectID {
+ if r != nil {
+ return r.id
+ }
+
+ return nil
+}
+
+func (r *PutObjectPartInit) SetObjectID(v *refs.ObjectID) {
+ r.id = v
+}
+
+func (r *PutObjectPartInit) GetSignature() *refs.Signature {
+ if r != nil {
+ return r.sig
+ }
+
+ return nil
+}
+
+func (r *PutObjectPartInit) SetSignature(v *refs.Signature) {
+ r.sig = v
+}
+
+func (r *PutObjectPartInit) GetHeader() *Header {
+ if r != nil {
+ return r.hdr
+ }
+
+ return nil
+}
+
+func (r *PutObjectPartInit) SetHeader(v *Header) {
+ r.hdr = v
+}
+
+func (r *PutObjectPartInit) GetCopiesNumber() []uint32 {
+ if r != nil {
+ return r.copyNum
+ }
+
+ return nil
+}
+
+func (r *PutObjectPartInit) SetCopiesNumber(v []uint32) {
+ r.copyNum = v
+}
+
+func (r *PutObjectPartInit) putObjectPart() {}
+
+func (r *PutObjectPartChunk) GetChunk() []byte {
+ if r != nil {
+ return r.chunk
+ }
+
+ return nil
+}
+
+func (r *PutObjectPartChunk) SetChunk(v []byte) {
+ r.chunk = v
+}
+
+func (r *PutObjectPartChunk) putObjectPart() {}
+
+func (r *PutRequestBody) GetObjectPart() PutObjectPart {
+ if r != nil {
+ return r.objPart
+ }
+
+ return nil
+}
+
+func (r *PutRequestBody) SetObjectPart(v PutObjectPart) {
+ r.objPart = v
+}
+
+func (r *PutRequest) GetBody() *PutRequestBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *PutRequest) SetBody(v *PutRequestBody) {
+ r.body = v
+}
+
+func (r *PutResponseBody) GetObjectID() *refs.ObjectID {
+ if r != nil {
+ return r.id
+ }
+
+ return nil
+}
+
+func (r *PutResponseBody) SetObjectID(v *refs.ObjectID) {
+ r.id = v
+}
+
+func (r *PutResponse) GetBody() *PutResponseBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *PutResponse) SetBody(v *PutResponseBody) {
+ r.body = v
+}
+
+func (r *DeleteRequestBody) GetAddress() *refs.Address {
+ if r != nil {
+ return r.addr
+ }
+
+ return nil
+}
+
+func (r *DeleteRequestBody) SetAddress(v *refs.Address) {
+ r.addr = v
+}
+
+func (r *DeleteRequest) GetBody() *DeleteRequestBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *DeleteRequest) SetBody(v *DeleteRequestBody) {
+ r.body = v
+}
+
+// GetTombstone returns tombstone address.
+func (r *DeleteResponseBody) GetTombstone() *refs.Address {
+ if r != nil {
+ return r.tombstone
+ }
+
+ return nil
+}
+
+// SetTombstone sets tombstone address.
+func (r *DeleteResponseBody) SetTombstone(v *refs.Address) {
+ r.tombstone = v
+}
+
+func (r *DeleteResponse) GetBody() *DeleteResponseBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *DeleteResponse) SetBody(v *DeleteResponseBody) {
+ r.body = v
+}
+
+func (r *HeadRequestBody) GetAddress() *refs.Address {
+ if r != nil {
+ return r.addr
+ }
+
+ return nil
+}
+
+func (r *HeadRequestBody) SetAddress(v *refs.Address) {
+ r.addr = v
+}
+
+func (r *HeadRequestBody) GetMainOnly() bool {
+ if r != nil {
+ return r.mainOnly
+ }
+
+ return false
+}
+
+func (r *HeadRequestBody) SetMainOnly(v bool) {
+ r.mainOnly = v
+}
+
+func (r *HeadRequestBody) GetRaw() bool {
+ if r != nil {
+ return r.raw
+ }
+
+ return false
+}
+
+func (r *HeadRequestBody) SetRaw(v bool) {
+ r.raw = v
+}
+
+func (r *HeadRequest) GetBody() *HeadRequestBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *HeadRequest) SetBody(v *HeadRequestBody) {
+ r.body = v
+}
+
+func (r *HeadResponseBody) GetHeaderPart() GetHeaderPart {
+ if r != nil {
+ return r.hdrPart
+ }
+
+ return nil
+}
+
+func (r *HeadResponseBody) SetHeaderPart(v GetHeaderPart) {
+ r.hdrPart = v
+}
+
+func (r *HeadResponse) GetBody() *HeadResponseBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *HeadResponse) SetBody(v *HeadResponseBody) {
+ r.body = v
+}
+
+func (f *SearchFilter) GetMatchType() MatchType {
+ if f != nil {
+ return f.matchType
+ }
+
+ return MatchUnknown
+}
+
+func (f *SearchFilter) SetMatchType(v MatchType) {
+ f.matchType = v
+}
+
+func (f *SearchFilter) GetKey() string {
+ if f != nil {
+ return f.key
+ }
+
+ return ""
+}
+
+func (f *SearchFilter) SetKey(v string) {
+ f.key = v
+}
+
+func (f *SearchFilter) GetValue() string {
+ if f != nil {
+ return f.val
+ }
+
+ return ""
+}
+
+func (f *SearchFilter) SetValue(v string) {
+ f.val = v
+}
+
+func (r *SearchRequestBody) GetContainerID() *refs.ContainerID {
+ if r != nil {
+ return r.cid
+ }
+
+ return nil
+}
+
+func (r *SearchRequestBody) SetContainerID(v *refs.ContainerID) {
+ r.cid = v
+}
+
+func (r *SearchRequestBody) GetVersion() uint32 {
+ if r != nil {
+ return r.version
+ }
+
+ return 0
+}
+
+func (r *SearchRequestBody) SetVersion(v uint32) {
+ r.version = v
+}
+
+func (r *SearchRequestBody) GetFilters() []SearchFilter {
+ if r != nil {
+ return r.filters
+ }
+
+ return nil
+}
+
+func (r *SearchRequestBody) SetFilters(v []SearchFilter) {
+ r.filters = v
+}
+
+func (r *SearchRequest) GetBody() *SearchRequestBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *SearchRequest) SetBody(v *SearchRequestBody) {
+ r.body = v
+}
+
+func (r *SearchResponseBody) GetIDList() []refs.ObjectID {
+ if r != nil {
+ return r.idList
+ }
+
+ return nil
+}
+
+func (r *SearchResponseBody) SetIDList(v []refs.ObjectID) {
+ r.idList = v
+}
+
+func (r *SearchResponse) GetBody() *SearchResponseBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *SearchResponse) SetBody(v *SearchResponseBody) {
+ r.body = v
+}
+
+func (r *Range) GetOffset() uint64 {
+ if r != nil {
+ return r.off
+ }
+
+ return 0
+}
+
+func (r *Range) SetOffset(v uint64) {
+ r.off = v
+}
+
+func (r *Range) GetLength() uint64 {
+ if r != nil {
+ return r.len
+ }
+
+ return 0
+}
+
+func (r *Range) SetLength(v uint64) {
+ r.len = v
+}
+
+func (r *GetRangeRequestBody) GetAddress() *refs.Address {
+ if r != nil {
+ return r.addr
+ }
+
+ return nil
+}
+
+func (r *GetRangeRequestBody) SetAddress(v *refs.Address) {
+ r.addr = v
+}
+
+func (r *GetRangeRequestBody) GetRange() *Range {
+ if r != nil {
+ return r.rng
+ }
+
+ return nil
+}
+
+func (r *GetRangeRequestBody) SetRange(v *Range) {
+ r.rng = v
+}
+
+func (r *GetRangeRequestBody) GetRaw() bool {
+ if r != nil {
+ return r.raw
+ }
+
+ return false
+}
+
+func (r *GetRangeRequestBody) SetRaw(v bool) {
+ r.raw = v
+}
+
+func (r *GetRangeRequest) GetBody() *GetRangeRequestBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *GetRangeRequest) SetBody(v *GetRangeRequestBody) {
+ r.body = v
+}
+
+func (r *GetRangePartChunk) GetChunk() []byte {
+ if r != nil {
+ return r.chunk
+ }
+
+ return nil
+}
+
+func (r *GetRangePartChunk) SetChunk(v []byte) {
+ r.chunk = v
+}
+
+func (r *GetRangePartChunk) getRangePart() {}
+
+func (r *GetRangeResponseBody) GetRangePart() GetRangePart {
+ if r != nil {
+ return r.rngPart
+ }
+
+ return nil
+}
+
+func (r *GetRangeResponseBody) SetRangePart(v GetRangePart) {
+ r.rngPart = v
+}
+
+func (r *GetRangeResponse) GetBody() *GetRangeResponseBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *GetRangeResponse) SetBody(v *GetRangeResponseBody) {
+ r.body = v
+}
+
+func (r *GetRangeHashRequestBody) GetAddress() *refs.Address {
+ if r != nil {
+ return r.addr
+ }
+
+ return nil
+}
+
+func (r *GetRangeHashRequestBody) SetAddress(v *refs.Address) {
+ r.addr = v
+}
+
+func (r *GetRangeHashRequestBody) GetRanges() []Range {
+ if r != nil {
+ return r.rngs
+ }
+
+ return nil
+}
+
+func (r *GetRangeHashRequestBody) SetRanges(v []Range) {
+ r.rngs = v
+}
+
+func (r *GetRangeHashRequestBody) GetSalt() []byte {
+ if r != nil {
+ return r.salt
+ }
+
+ return nil
+}
+
+func (r *GetRangeHashRequestBody) SetSalt(v []byte) {
+ r.salt = v
+}
+
+func (r *GetRangeHashRequestBody) GetType() refs.ChecksumType {
+ if r != nil {
+ return r.typ
+ }
+
+ return refs.UnknownChecksum
+}
+
+func (r *GetRangeHashRequestBody) SetType(v refs.ChecksumType) {
+ r.typ = v
+}
+
+func (r *GetRangeHashRequest) GetBody() *GetRangeHashRequestBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *GetRangeHashRequest) SetBody(v *GetRangeHashRequestBody) {
+ r.body = v
+}
+
+func (r *GetRangeHashResponseBody) GetType() refs.ChecksumType {
+ if r != nil {
+ return r.typ
+ }
+
+ return refs.UnknownChecksum
+}
+
+func (r *GetRangeHashResponseBody) SetType(v refs.ChecksumType) {
+ r.typ = v
+}
+
+func (r *GetRangeHashResponseBody) GetHashList() [][]byte {
+ if r != nil {
+ return r.hashList
+ }
+
+ return nil
+}
+
+func (r *GetRangeHashResponseBody) SetHashList(v [][]byte) {
+ r.hashList = v
+}
+
+func (r *GetRangeHashResponse) GetBody() *GetRangeHashResponseBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *GetRangeHashResponse) SetBody(v *GetRangeHashResponseBody) {
+ r.body = v
+}
+
+func (r *PutSingleRequest) GetBody() *PutSingleRequestBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *PutSingleRequest) SetBody(v *PutSingleRequestBody) {
+ r.body = v
+}
+
+func (b *PutSingleRequestBody) GetObject() *Object {
+ if b == nil {
+ return nil
+ }
+ return b.object
+}
+
+func (b *PutSingleRequestBody) SetObject(o *Object) {
+ b.object = o
+}
+
+func (b *PutSingleRequestBody) GetCopiesNumber() []uint32 {
+ if b == nil {
+ return nil
+ }
+ return b.copyNum
+}
+
+func (b *PutSingleRequestBody) SetCopiesNumber(v []uint32) {
+ b.copyNum = v
+}
+
+func (r *PutSingleResponse) GetBody() *PutSingleResponseBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *PutSingleResponse) SetBody(v *PutSingleResponseBody) {
+ r.body = v
+}
+
+func (r *PatchRequest) GetBody() *PatchRequestBody {
+ if r != nil {
+ return r.body
+ }
+
+ return nil
+}
+
+func (r *PatchRequest) SetBody(v *PatchRequestBody) {
+ r.body = v
+}
+
+func (r *PatchRequestBody) GetAddress() *refs.Address {
+ if r != nil {
+ return r.address
+ }
+
+ return nil
+}
+
+func (r *PatchRequestBody) SetAddress(addr *refs.Address) {
+ r.address = addr
+}
+
+func (r *PatchRequestBody) GetNewAttributes() []Attribute {
+ if r != nil {
+ return r.newAttributes
+ }
+
+ return nil
+}
+
+func (r *PatchRequestBody) SetNewAttributes(attrs []Attribute) {
+ r.newAttributes = attrs
+}
+
+func (r *PatchRequestBody) GetReplaceAttributes() bool {
+ if r != nil {
+ return r.replaceAttributes
+ }
+
+ return false
+}
+
+func (r *PatchRequestBody) SetReplaceAttributes(replace bool) {
+ r.replaceAttributes = replace
+}
+
+func (r *PatchRequestBody) GetPatch() *PatchRequestBodyPatch {
+ if r != nil {
+ return r.patch
+ }
+
+ return nil
+}
+
+func (r *PatchRequestBody) SetPatch(patch *PatchRequestBodyPatch) {
+ r.patch = patch
+}
+
+func (r *PatchResponse) GetBody() *PatchResponseBody {
+ if r != nil {
+ return r.Body
+ }
+
+ return nil
+}
+
+func (r *PatchResponse) SetBody(v *PatchResponseBody) {
+ r.Body = v
+}
+
+func (r *PatchResponseBody) GetObjectID() *refs.ObjectID {
+ if r != nil {
+ return r.ObjectID
+ }
+
+ return nil
+}
+
+func (r *PatchResponseBody) SetObjectID(objectID *refs.ObjectID) {
+ r.ObjectID = objectID
+}
+
+func (r *PatchRequestBodyPatch) GetChunk() []byte {
+ if r != nil {
+ return r.Chunk
+ }
+
+ return nil
+}
+
+func (r *PatchRequestBodyPatch) GetRange() *Range {
+ if r != nil {
+ return r.Range
+ }
+
+ return nil
+}
+
+func (s *ECInfo) getObjectPart() {}
+
+func (s *ECInfo) getHeaderPart() {}
+
+func (s *ECInfo) getRangePart() {}
diff --git a/api/refs/bench_test.go b/api/refs/bench_test.go
new file mode 100644
index 0000000..40784c6
--- /dev/null
+++ b/api/refs/bench_test.go
@@ -0,0 +1,53 @@
+package refs
+
+import (
+ "math/rand"
+ "strconv"
+ "testing"
+)
+
+func BenchmarkObjectIDSlice(b *testing.B) {
+ for _, size := range []int{0, 1, 50} {
+ b.Run(strconv.Itoa(size)+" elements", func(b *testing.B) {
+ benchmarkObjectIDSlice(b, size)
+ })
+ }
+}
+
+func benchmarkObjectIDSlice(b *testing.B, size int) {
+ ids := make([]ObjectID, size)
+ for i := range ids {
+ ids[i].val = make([]byte, 32)
+ rand.Read(ids[i].val)
+ }
+ raw := ObjectIDListToGRPCMessage(ids)
+
+ b.Run("to grpc message", func(b *testing.B) {
+ b.ReportAllocs()
+ for range b.N {
+ raw := ObjectIDListToGRPCMessage(ids)
+ if len(raw) != len(ids) {
+ b.FailNow()
+ }
+ }
+ })
+ b.Run("from grpc message", func(b *testing.B) {
+ b.ReportAllocs()
+ for range b.N {
+ ids, err := ObjectIDListFromGRPCMessage(raw)
+ if err != nil || len(raw) != len(ids) {
+ b.FailNow()
+ }
+ }
+ })
+ b.Run("marshal", func(b *testing.B) {
+ b.ReportAllocs()
+ for range b.N {
+ buf := make([]byte, ObjectIDNestedListSize(1, ids))
+ n := ObjectIDNestedListMarshal(1, buf, ids)
+ if n != len(buf) {
+ b.FailNow()
+ }
+ }
+ })
+}
diff --git a/api/refs/convert.go b/api/refs/convert.go
new file mode 100644
index 0000000..8e72c37
--- /dev/null
+++ b/api/refs/convert.go
@@ -0,0 +1,264 @@
+package refs
+
+import (
+ refs "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+)
+
+func (o *OwnerID) ToGRPCMessage() grpc.Message {
+ var m *refs.OwnerID
+
+ if o != nil {
+ m = new(refs.OwnerID)
+
+ m.SetValue(o.val)
+ }
+
+ return m
+}
+
+func (o *OwnerID) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*refs.OwnerID)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ o.val = v.GetValue()
+
+ return nil
+}
+
+func (c *ContainerID) ToGRPCMessage() grpc.Message {
+ var m *refs.ContainerID
+
+ if c != nil {
+ m = new(refs.ContainerID)
+
+ m.SetValue(c.val)
+ }
+
+ return m
+}
+
+func (c *ContainerID) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*refs.ContainerID)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ c.val = v.GetValue()
+
+ return nil
+}
+
+func ContainerIDsToGRPCMessage(ids []ContainerID) (res []refs.ContainerID) {
+ if ids != nil {
+ res = make([]refs.ContainerID, 0, len(ids))
+
+ for i := range ids {
+ res = append(res, *ids[i].ToGRPCMessage().(*refs.ContainerID))
+ }
+ }
+
+ return
+}
+
+func ContainerIDsFromGRPCMessage(idsV2 []refs.ContainerID) (res []ContainerID, err error) {
+ if idsV2 != nil {
+ res = make([]ContainerID, len(idsV2))
+
+ for i := range idsV2 {
+ err = res[i].FromGRPCMessage(&idsV2[i])
+ if err != nil {
+ return
+ }
+ }
+ }
+
+ return
+}
+
+func (o *ObjectID) ToGRPCMessage() grpc.Message {
+ var m *refs.ObjectID
+
+ if o != nil {
+ m = new(refs.ObjectID)
+
+ m.SetValue(o.val)
+ }
+
+ return m
+}
+
+func (o *ObjectID) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*refs.ObjectID)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ o.val = v.GetValue()
+
+ return nil
+}
+
+func ObjectIDListToGRPCMessage(ids []ObjectID) (res []refs.ObjectID) {
+ if ids != nil {
+ res = make([]refs.ObjectID, 0, len(ids))
+
+ for i := range ids {
+ res = append(res, *ids[i].ToGRPCMessage().(*refs.ObjectID))
+ }
+ }
+
+ return
+}
+
+func ObjectIDListFromGRPCMessage(idsV2 []refs.ObjectID) (res []ObjectID, err error) {
+ if idsV2 != nil {
+ res = make([]ObjectID, len(idsV2))
+
+ for i := range idsV2 {
+ err = res[i].FromGRPCMessage(&idsV2[i])
+ if err != nil {
+ return
+ }
+ }
+ }
+
+ return
+}
+
+func (a *Address) ToGRPCMessage() grpc.Message {
+ var m *refs.Address
+
+ if a != nil {
+ m = new(refs.Address)
+
+ m.SetContainerId(a.cid.ToGRPCMessage().(*refs.ContainerID))
+ m.SetObjectId(a.oid.ToGRPCMessage().(*refs.ObjectID))
+ }
+
+ return m
+}
+
+func (a *Address) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*refs.Address)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ cid := v.GetContainerId()
+ if cid == nil {
+ a.cid = nil
+ } else {
+ if a.cid == nil {
+ a.cid = new(ContainerID)
+ }
+
+ err = a.cid.FromGRPCMessage(cid)
+ if err != nil {
+ return err
+ }
+ }
+
+ oid := v.GetObjectId()
+ if oid == nil {
+ a.oid = nil
+ } else {
+ if a.oid == nil {
+ a.oid = new(ObjectID)
+ }
+
+ err = a.oid.FromGRPCMessage(oid)
+ }
+
+ return err
+}
+
+func ChecksumTypeToGRPC(t ChecksumType) refs.ChecksumType {
+ return refs.ChecksumType(t)
+}
+
+func ChecksumTypeFromGRPC(t refs.ChecksumType) ChecksumType {
+ return ChecksumType(t)
+}
+
+func (c *Checksum) ToGRPCMessage() grpc.Message {
+ var m *refs.Checksum
+
+ if c != nil {
+ m = new(refs.Checksum)
+
+ m.SetType(ChecksumTypeToGRPC(c.typ))
+ m.SetSum(c.sum)
+ }
+
+ return m
+}
+
+func (c *Checksum) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*refs.Checksum)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ c.typ = ChecksumTypeFromGRPC(v.GetType())
+ c.sum = v.GetSum()
+
+ return nil
+}
+
+func (v *Version) ToGRPCMessage() grpc.Message {
+ var m *refs.Version
+
+ if v != nil {
+ m = new(refs.Version)
+
+ m.SetMajor(v.major)
+ m.SetMinor(v.minor)
+ }
+
+ return m
+}
+
+func (v *Version) FromGRPCMessage(m grpc.Message) error {
+ ver, ok := m.(*refs.Version)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ v.major = ver.GetMajor()
+ v.minor = ver.GetMinor()
+
+ return nil
+}
+
+func (s *Signature) ToGRPCMessage() grpc.Message {
+ var m *refs.Signature
+
+ if s != nil {
+ m = new(refs.Signature)
+
+ m.SetKey(s.key)
+ m.SetSign(s.sign)
+ m.SetScheme(refs.SignatureScheme(s.scheme))
+ }
+
+ return m
+}
+
+func (s *Signature) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*refs.Signature)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, s)
+ }
+
+ s.key = v.GetKey()
+ s.sign = v.GetSign()
+ s.scheme = SignatureScheme(v.GetScheme())
+
+ return nil
+}
diff --git a/api/refs/grpc/types_frostfs.pb.go b/api/refs/grpc/types_frostfs.pb.go
new file mode 100644
index 0000000..f0a10f3
--- /dev/null
+++ b/api/refs/grpc/types_frostfs.pb.go
@@ -0,0 +1,1527 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package refs
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+ strconv "strconv"
+)
+
+type SignatureScheme int32
+
+const (
+ SignatureScheme_ECDSA_SHA512 SignatureScheme = 0
+ SignatureScheme_ECDSA_RFC6979_SHA256 SignatureScheme = 1
+ SignatureScheme_ECDSA_RFC6979_SHA256_WALLET_CONNECT SignatureScheme = 2
+)
+
+var (
+ SignatureScheme_name = map[int32]string{
+ 0: "ECDSA_SHA512",
+ 1: "ECDSA_RFC6979_SHA256",
+ 2: "ECDSA_RFC6979_SHA256_WALLET_CONNECT",
+ }
+ SignatureScheme_value = map[string]int32{
+ "ECDSA_SHA512": 0,
+ "ECDSA_RFC6979_SHA256": 1,
+ "ECDSA_RFC6979_SHA256_WALLET_CONNECT": 2,
+ }
+)
+
+func (x SignatureScheme) String() string {
+ if v, ok := SignatureScheme_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *SignatureScheme) FromString(s string) bool {
+ if v, ok := SignatureScheme_value[s]; ok {
+ *x = SignatureScheme(v)
+ return true
+ }
+ return false
+}
+
+type ChecksumType int32
+
+const (
+ ChecksumType_CHECKSUM_TYPE_UNSPECIFIED ChecksumType = 0
+ ChecksumType_TZ ChecksumType = 1
+ ChecksumType_SHA256 ChecksumType = 2
+)
+
+var (
+ ChecksumType_name = map[int32]string{
+ 0: "CHECKSUM_TYPE_UNSPECIFIED",
+ 1: "TZ",
+ 2: "SHA256",
+ }
+ ChecksumType_value = map[string]int32{
+ "CHECKSUM_TYPE_UNSPECIFIED": 0,
+ "TZ": 1,
+ "SHA256": 2,
+ }
+)
+
+func (x ChecksumType) String() string {
+ if v, ok := ChecksumType_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *ChecksumType) FromString(s string) bool {
+ if v, ok := ChecksumType_value[s]; ok {
+ *x = ChecksumType(v)
+ return true
+ }
+ return false
+}
+
+type Address struct {
+ ContainerId *ContainerID `json:"containerID"`
+ ObjectId *ObjectID `json:"objectID"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Address)(nil)
+ _ encoding.ProtoUnmarshaler = (*Address)(nil)
+ _ json.Marshaler = (*Address)(nil)
+ _ json.Unmarshaler = (*Address)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Address) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.ContainerId)
+ size += proto.NestedStructureSize(2, x.ObjectId)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Address) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Address) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.ContainerId != nil {
+ x.ContainerId.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.ObjectId != nil {
+ x.ObjectId.EmitProtobuf(mm.AppendMessage(2))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Address) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Address")
+ }
+ switch fc.FieldNum {
+ case 1: // ContainerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ContainerId")
+ }
+ x.ContainerId = new(ContainerID)
+ if err := x.ContainerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // ObjectId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ObjectId")
+ }
+ x.ObjectId = new(ObjectID)
+ if err := x.ObjectId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *Address) GetContainerId() *ContainerID {
+ if x != nil {
+ return x.ContainerId
+ }
+ return nil
+}
+func (x *Address) SetContainerId(v *ContainerID) {
+ x.ContainerId = v
+}
+func (x *Address) GetObjectId() *ObjectID {
+ if x != nil {
+ return x.ObjectId
+ }
+ return nil
+}
+func (x *Address) SetObjectId(v *ObjectID) {
+ x.ObjectId = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Address) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Address) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"containerID\":"
+ out.RawString(prefix)
+ x.ContainerId.MarshalEasyJSON(out)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"objectID\":"
+ out.RawString(prefix)
+ x.ObjectId.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Address) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Address) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "containerID":
+ {
+ var f *ContainerID
+ f = new(ContainerID)
+ f.UnmarshalEasyJSON(in)
+ x.ContainerId = f
+ }
+ case "objectID":
+ {
+ var f *ObjectID
+ f = new(ObjectID)
+ f.UnmarshalEasyJSON(in)
+ x.ObjectId = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ObjectID struct {
+ Value []byte `json:"value"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ObjectID)(nil)
+ _ encoding.ProtoUnmarshaler = (*ObjectID)(nil)
+ _ json.Marshaler = (*ObjectID)(nil)
+ _ json.Unmarshaler = (*ObjectID)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ObjectID) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.BytesSize(1, x.Value)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ObjectID) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ObjectID) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.Value) != 0 {
+ mm.AppendBytes(1, x.Value)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ObjectID) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ObjectID")
+ }
+ switch fc.FieldNum {
+ case 1: // Value
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Value")
+ }
+ x.Value = data
+ }
+ }
+ return nil
+}
+func (x *ObjectID) GetValue() []byte {
+ if x != nil {
+ return x.Value
+ }
+ return nil
+}
+func (x *ObjectID) SetValue(v []byte) {
+ x.Value = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ObjectID) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ObjectID) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"value\":"
+ out.RawString(prefix)
+ if x.Value != nil {
+ out.Base64Bytes(x.Value)
+ } else {
+ out.String("")
+ }
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ObjectID) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ObjectID) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "value":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Value = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ContainerID struct {
+ Value []byte `json:"value"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ContainerID)(nil)
+ _ encoding.ProtoUnmarshaler = (*ContainerID)(nil)
+ _ json.Marshaler = (*ContainerID)(nil)
+ _ json.Unmarshaler = (*ContainerID)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ContainerID) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.BytesSize(1, x.Value)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ContainerID) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ContainerID) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.Value) != 0 {
+ mm.AppendBytes(1, x.Value)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ContainerID) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ContainerID")
+ }
+ switch fc.FieldNum {
+ case 1: // Value
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Value")
+ }
+ x.Value = data
+ }
+ }
+ return nil
+}
+func (x *ContainerID) GetValue() []byte {
+ if x != nil {
+ return x.Value
+ }
+ return nil
+}
+func (x *ContainerID) SetValue(v []byte) {
+ x.Value = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ContainerID) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ContainerID) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"value\":"
+ out.RawString(prefix)
+ if x.Value != nil {
+ out.Base64Bytes(x.Value)
+ } else {
+ out.String("")
+ }
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ContainerID) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ContainerID) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "value":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Value = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type OwnerID struct {
+ Value []byte `json:"value"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*OwnerID)(nil)
+ _ encoding.ProtoUnmarshaler = (*OwnerID)(nil)
+ _ json.Marshaler = (*OwnerID)(nil)
+ _ json.Unmarshaler = (*OwnerID)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *OwnerID) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.BytesSize(1, x.Value)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *OwnerID) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *OwnerID) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.Value) != 0 {
+ mm.AppendBytes(1, x.Value)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *OwnerID) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "OwnerID")
+ }
+ switch fc.FieldNum {
+ case 1: // Value
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Value")
+ }
+ x.Value = data
+ }
+ }
+ return nil
+}
+func (x *OwnerID) GetValue() []byte {
+ if x != nil {
+ return x.Value
+ }
+ return nil
+}
+func (x *OwnerID) SetValue(v []byte) {
+ x.Value = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *OwnerID) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *OwnerID) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"value\":"
+ out.RawString(prefix)
+ if x.Value != nil {
+ out.Base64Bytes(x.Value)
+ } else {
+ out.String("")
+ }
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *OwnerID) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *OwnerID) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "value":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Value = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Version struct {
+ Major uint32 `json:"major"`
+ Minor uint32 `json:"minor"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Version)(nil)
+ _ encoding.ProtoUnmarshaler = (*Version)(nil)
+ _ json.Marshaler = (*Version)(nil)
+ _ json.Unmarshaler = (*Version)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Version) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.UInt32Size(1, x.Major)
+ size += proto.UInt32Size(2, x.Minor)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Version) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Version) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Major != 0 {
+ mm.AppendUint32(1, x.Major)
+ }
+ if x.Minor != 0 {
+ mm.AppendUint32(2, x.Minor)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Version) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Version")
+ }
+ switch fc.FieldNum {
+ case 1: // Major
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Major")
+ }
+ x.Major = data
+ case 2: // Minor
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Minor")
+ }
+ x.Minor = data
+ }
+ }
+ return nil
+}
+func (x *Version) GetMajor() uint32 {
+ if x != nil {
+ return x.Major
+ }
+ return 0
+}
+func (x *Version) SetMajor(v uint32) {
+ x.Major = v
+}
+func (x *Version) GetMinor() uint32 {
+ if x != nil {
+ return x.Minor
+ }
+ return 0
+}
+func (x *Version) SetMinor(v uint32) {
+ x.Minor = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Version) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Version) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"major\":"
+ out.RawString(prefix)
+ out.Uint32(x.Major)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"minor\":"
+ out.RawString(prefix)
+ out.Uint32(x.Minor)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Version) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Version) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "major":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.Major = f
+ }
+ case "minor":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.Minor = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Signature struct {
+ Key []byte `json:"key"`
+ Sign []byte `json:"signature"`
+ Scheme SignatureScheme `json:"scheme"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Signature)(nil)
+ _ encoding.ProtoUnmarshaler = (*Signature)(nil)
+ _ json.Marshaler = (*Signature)(nil)
+ _ json.Unmarshaler = (*Signature)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Signature) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.BytesSize(1, x.Key)
+ size += proto.BytesSize(2, x.Sign)
+ size += proto.EnumSize(3, int32(x.Scheme))
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Signature) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Signature) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.Key) != 0 {
+ mm.AppendBytes(1, x.Key)
+ }
+ if len(x.Sign) != 0 {
+ mm.AppendBytes(2, x.Sign)
+ }
+ if int32(x.Scheme) != 0 {
+ mm.AppendInt32(3, int32(x.Scheme))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Signature) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Signature")
+ }
+ switch fc.FieldNum {
+ case 1: // Key
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Key")
+ }
+ x.Key = data
+ case 2: // Sign
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Sign")
+ }
+ x.Sign = data
+ case 3: // Scheme
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Scheme")
+ }
+ x.Scheme = SignatureScheme(data)
+ }
+ }
+ return nil
+}
+func (x *Signature) GetKey() []byte {
+ if x != nil {
+ return x.Key
+ }
+ return nil
+}
+func (x *Signature) SetKey(v []byte) {
+ x.Key = v
+}
+func (x *Signature) GetSign() []byte {
+ if x != nil {
+ return x.Sign
+ }
+ return nil
+}
+func (x *Signature) SetSign(v []byte) {
+ x.Sign = v
+}
+func (x *Signature) GetScheme() SignatureScheme {
+ if x != nil {
+ return x.Scheme
+ }
+ return 0
+}
+func (x *Signature) SetScheme(v SignatureScheme) {
+ x.Scheme = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Signature) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Signature) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"key\":"
+ out.RawString(prefix)
+ if x.Key != nil {
+ out.Base64Bytes(x.Key)
+ } else {
+ out.String("")
+ }
+ }
+ {
+ 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 !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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Signature) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Signature) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "key":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Key = f
+ }
+ case "signature":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Sign = f
+ }
+ case "scheme":
+ {
+ var f SignatureScheme
+ var parsedValue SignatureScheme
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := SignatureScheme_value[v]; ok {
+ parsedValue = SignatureScheme(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = SignatureScheme(vv)
+ case float64:
+ parsedValue = SignatureScheme(v)
+ }
+ f = parsedValue
+ x.Scheme = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type SignatureRFC6979 struct {
+ Key []byte `json:"key"`
+ Sign []byte `json:"signature"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*SignatureRFC6979)(nil)
+ _ encoding.ProtoUnmarshaler = (*SignatureRFC6979)(nil)
+ _ json.Marshaler = (*SignatureRFC6979)(nil)
+ _ json.Unmarshaler = (*SignatureRFC6979)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *SignatureRFC6979) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.BytesSize(1, x.Key)
+ size += proto.BytesSize(2, x.Sign)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *SignatureRFC6979) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *SignatureRFC6979) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.Key) != 0 {
+ mm.AppendBytes(1, x.Key)
+ }
+ if len(x.Sign) != 0 {
+ mm.AppendBytes(2, x.Sign)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *SignatureRFC6979) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "SignatureRFC6979")
+ }
+ switch fc.FieldNum {
+ case 1: // Key
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Key")
+ }
+ x.Key = data
+ case 2: // Sign
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Sign")
+ }
+ x.Sign = data
+ }
+ }
+ return nil
+}
+func (x *SignatureRFC6979) GetKey() []byte {
+ if x != nil {
+ return x.Key
+ }
+ return nil
+}
+func (x *SignatureRFC6979) SetKey(v []byte) {
+ x.Key = v
+}
+func (x *SignatureRFC6979) GetSign() []byte {
+ if x != nil {
+ return x.Sign
+ }
+ return nil
+}
+func (x *SignatureRFC6979) SetSign(v []byte) {
+ x.Sign = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *SignatureRFC6979) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *SignatureRFC6979) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"key\":"
+ out.RawString(prefix)
+ if x.Key != nil {
+ out.Base64Bytes(x.Key)
+ } else {
+ out.String("")
+ }
+ }
+ {
+ 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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *SignatureRFC6979) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *SignatureRFC6979) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "key":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Key = f
+ }
+ case "signature":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Sign = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Checksum struct {
+ Type ChecksumType `json:"type"`
+ Sum []byte `json:"sum"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Checksum)(nil)
+ _ encoding.ProtoUnmarshaler = (*Checksum)(nil)
+ _ json.Marshaler = (*Checksum)(nil)
+ _ json.Unmarshaler = (*Checksum)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Checksum) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.EnumSize(1, int32(x.Type))
+ size += proto.BytesSize(2, x.Sum)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Checksum) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Checksum) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if int32(x.Type) != 0 {
+ mm.AppendInt32(1, int32(x.Type))
+ }
+ if len(x.Sum) != 0 {
+ mm.AppendBytes(2, x.Sum)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Checksum) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Checksum")
+ }
+ switch fc.FieldNum {
+ case 1: // Type
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Type")
+ }
+ x.Type = ChecksumType(data)
+ case 2: // Sum
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Sum")
+ }
+ x.Sum = data
+ }
+ }
+ return nil
+}
+func (x *Checksum) GetType() ChecksumType {
+ if x != nil {
+ return x.Type
+ }
+ return 0
+}
+func (x *Checksum) SetType(v ChecksumType) {
+ x.Type = v
+}
+func (x *Checksum) GetSum() []byte {
+ if x != nil {
+ return x.Sum
+ }
+ return nil
+}
+func (x *Checksum) SetSum(v []byte) {
+ x.Sum = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Checksum) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Checksum) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"sum\":"
+ out.RawString(prefix)
+ if x.Sum != nil {
+ out.Base64Bytes(x.Sum)
+ } else {
+ out.String("")
+ }
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Checksum) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Checksum) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "type":
+ {
+ var f ChecksumType
+ var parsedValue ChecksumType
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := ChecksumType_value[v]; ok {
+ parsedValue = ChecksumType(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = ChecksumType(vv)
+ case float64:
+ parsedValue = ChecksumType(v)
+ }
+ f = parsedValue
+ x.Type = f
+ }
+ case "sum":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Sum = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/refs/grpc/types_frostfs_fuzz.go b/api/refs/grpc/types_frostfs_fuzz.go
new file mode 100644
index 0000000..a64a9bf
--- /dev/null
+++ b/api/refs/grpc/types_frostfs_fuzz.go
@@ -0,0 +1,159 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package refs
+
+func DoFuzzProtoAddress(data []byte) int {
+ msg := new(Address)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONAddress(data []byte) int {
+ msg := new(Address)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoObjectID(data []byte) int {
+ msg := new(ObjectID)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONObjectID(data []byte) int {
+ msg := new(ObjectID)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoContainerID(data []byte) int {
+ msg := new(ContainerID)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONContainerID(data []byte) int {
+ msg := new(ContainerID)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoOwnerID(data []byte) int {
+ msg := new(OwnerID)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONOwnerID(data []byte) int {
+ msg := new(OwnerID)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoVersion(data []byte) int {
+ msg := new(Version)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONVersion(data []byte) int {
+ msg := new(Version)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoSignature(data []byte) int {
+ msg := new(Signature)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONSignature(data []byte) int {
+ msg := new(Signature)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoSignatureRFC6979(data []byte) int {
+ msg := new(SignatureRFC6979)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONSignatureRFC6979(data []byte) int {
+ msg := new(SignatureRFC6979)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoChecksum(data []byte) int {
+ msg := new(Checksum)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONChecksum(data []byte) int {
+ msg := new(Checksum)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/refs/grpc/types_frostfs_test.go b/api/refs/grpc/types_frostfs_test.go
new file mode 100644
index 0000000..9b19892
--- /dev/null
+++ b/api/refs/grpc/types_frostfs_test.go
@@ -0,0 +1,91 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package refs
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoAddress(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoAddress(data)
+ })
+}
+func FuzzJSONAddress(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONAddress(data)
+ })
+}
+func FuzzProtoObjectID(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoObjectID(data)
+ })
+}
+func FuzzJSONObjectID(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONObjectID(data)
+ })
+}
+func FuzzProtoContainerID(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoContainerID(data)
+ })
+}
+func FuzzJSONContainerID(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONContainerID(data)
+ })
+}
+func FuzzProtoOwnerID(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoOwnerID(data)
+ })
+}
+func FuzzJSONOwnerID(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONOwnerID(data)
+ })
+}
+func FuzzProtoVersion(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoVersion(data)
+ })
+}
+func FuzzJSONVersion(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONVersion(data)
+ })
+}
+func FuzzProtoSignature(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoSignature(data)
+ })
+}
+func FuzzJSONSignature(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONSignature(data)
+ })
+}
+func FuzzProtoSignatureRFC6979(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoSignatureRFC6979(data)
+ })
+}
+func FuzzJSONSignatureRFC6979(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONSignatureRFC6979(data)
+ })
+}
+func FuzzProtoChecksum(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoChecksum(data)
+ })
+}
+func FuzzJSONChecksum(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONChecksum(data)
+ })
+}
diff --git a/api/refs/json.go b/api/refs/json.go
new file mode 100644
index 0000000..652211f
--- /dev/null
+++ b/api/refs/json.go
@@ -0,0 +1,62 @@
+package refs
+
+import (
+ refs "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+)
+
+func (a *Address) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(a)
+}
+
+func (a *Address) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(a, data, new(refs.Address))
+}
+
+func (o *ObjectID) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(o)
+}
+
+func (o *ObjectID) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(o, data, new(refs.ObjectID))
+}
+
+func (c *ContainerID) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(c)
+}
+
+func (c *ContainerID) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(c, data, new(refs.ContainerID))
+}
+
+func (o *OwnerID) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(o)
+}
+
+func (o *OwnerID) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(o, data, new(refs.OwnerID))
+}
+
+func (v *Version) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(v)
+}
+
+func (v *Version) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(v, data, new(refs.Version))
+}
+
+func (s *Signature) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(s)
+}
+
+func (s *Signature) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(s, data, new(refs.Signature))
+}
+
+func (c *Checksum) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(c)
+}
+
+func (c *Checksum) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(c, data, new(refs.Checksum))
+}
diff --git a/api/refs/marshal.go b/api/refs/marshal.go
new file mode 100644
index 0000000..18f84b9
--- /dev/null
+++ b/api/refs/marshal.go
@@ -0,0 +1,264 @@
+package refs
+
+import (
+ "encoding/binary"
+
+ refs "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ "google.golang.org/protobuf/encoding/protowire"
+)
+
+const (
+ ownerIDValField = 1
+
+ containerIDValField = 1
+
+ objectIDValField = 1
+
+ addressContainerField = 1
+ addressObjectField = 2
+
+ checksumTypeField = 1
+ checksumValueField = 2
+
+ signatureKeyField = 1
+ signatureValueField = 2
+ signatureSchemeField = 3
+
+ versionMajorField = 1
+ versionMinorField = 2
+)
+
+func (o *OwnerID) StableMarshal(buf []byte) []byte {
+ if o == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, o.StableSize())
+ }
+
+ proto.BytesMarshal(ownerIDValField, buf, o.val)
+
+ return buf
+}
+
+func (o *OwnerID) StableSize() int {
+ if o == nil {
+ return 0
+ }
+
+ return proto.BytesSize(ownerIDValField, o.val)
+}
+
+func (o *OwnerID) Unmarshal(data []byte) error {
+ return message.Unmarshal(o, data, new(refs.OwnerID))
+}
+
+func (c *ContainerID) StableMarshal(buf []byte) []byte {
+ if c == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, c.StableSize())
+ }
+
+ proto.BytesMarshal(containerIDValField, buf, c.val)
+
+ return buf
+}
+
+func (c *ContainerID) StableSize() int {
+ if c == nil {
+ return 0
+ }
+
+ return proto.BytesSize(containerIDValField, c.val)
+}
+
+func (c *ContainerID) Unmarshal(data []byte) error {
+ return message.Unmarshal(c, data, new(refs.ContainerID))
+}
+
+func (o *ObjectID) StableMarshal(buf []byte) []byte {
+ if o == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, o.StableSize())
+ }
+
+ proto.BytesMarshal(objectIDValField, buf, o.val)
+
+ return buf
+}
+
+// ObjectIDNestedListSize returns byte length of nested
+// repeated ObjectID field with fNum number.
+func ObjectIDNestedListSize(fNum int64, ids []ObjectID) (sz int) {
+ for i := range ids {
+ sz += proto.NestedStructureSize(fNum, &ids[i])
+ }
+
+ return
+}
+
+func (o *ObjectID) StableSize() int {
+ if o == nil {
+ return 0
+ }
+
+ return proto.BytesSize(objectIDValField, o.val)
+}
+
+// ObjectIDNestedListMarshal writes protobuf repeated ObjectID field
+// with fNum number to buf.
+func ObjectIDNestedListMarshal(fNum int64, buf []byte, ids []ObjectID) (off int) {
+ prefix := protowire.EncodeTag(protowire.Number(fNum), protowire.BytesType)
+ for i := range ids {
+ off += binary.PutUvarint(buf[off:], prefix)
+
+ n := ids[i].StableSize()
+ off += binary.PutUvarint(buf[off:], uint64(n))
+ off += proto.BytesMarshal(objectIDValField, buf[off:], ids[i].val)
+ }
+
+ return
+}
+
+func (o *ObjectID) Unmarshal(data []byte) error {
+ return message.Unmarshal(o, data, new(refs.ObjectID))
+}
+
+func (a *Address) StableMarshal(buf []byte) []byte {
+ if a == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, a.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(addressContainerField, buf[offset:], a.cid)
+ proto.NestedStructureMarshal(addressObjectField, buf[offset:], a.oid)
+
+ return buf
+}
+
+func (a *Address) StableSize() (size int) {
+ if a == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(addressContainerField, a.cid)
+ size += proto.NestedStructureSize(addressObjectField, a.oid)
+
+ return size
+}
+
+func (a *Address) Unmarshal(data []byte) error {
+ return message.Unmarshal(a, data, new(refs.Address))
+}
+
+func (c *Checksum) StableMarshal(buf []byte) []byte {
+ if c == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, c.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.EnumMarshal(checksumTypeField, buf[offset:], int32(c.typ))
+ proto.BytesMarshal(checksumValueField, buf[offset:], c.sum)
+
+ return buf
+}
+
+func (c *Checksum) StableSize() (size int) {
+ if c == nil {
+ return 0
+ }
+
+ size += proto.EnumSize(checksumTypeField, int32(c.typ))
+ size += proto.BytesSize(checksumValueField, c.sum)
+
+ return size
+}
+
+func (c *Checksum) Unmarshal(data []byte) error {
+ return message.Unmarshal(c, data, new(refs.Checksum))
+}
+
+func (s *Signature) StableMarshal(buf []byte) []byte {
+ if s == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, s.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.BytesMarshal(signatureKeyField, buf[offset:], s.key)
+ offset += proto.BytesMarshal(signatureValueField, buf[offset:], s.sign)
+ proto.EnumMarshal(signatureSchemeField, buf[offset:], int32(s.scheme))
+
+ return buf
+}
+
+func (s *Signature) StableSize() (size int) {
+ if s == nil {
+ return 0
+ }
+
+ size += proto.BytesSize(signatureKeyField, s.key)
+ size += proto.BytesSize(signatureValueField, s.sign)
+ size += proto.EnumSize(signatureSchemeField, int32(s.scheme))
+
+ return size
+}
+
+func (s *Signature) Unmarshal(data []byte) error {
+ return message.Unmarshal(s, data, new(refs.Signature))
+}
+
+func (v *Version) StableMarshal(buf []byte) []byte {
+ if v == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, v.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.UInt32Marshal(versionMajorField, buf[offset:], v.major)
+ proto.UInt32Marshal(versionMinorField, buf[offset:], v.minor)
+
+ return buf
+}
+
+func (v *Version) StableSize() (size int) {
+ if v == nil {
+ return 0
+ }
+
+ size += proto.UInt32Size(versionMajorField, v.major)
+ size += proto.UInt32Size(versionMinorField, v.minor)
+
+ return size
+}
+
+func (v *Version) Unmarshal(data []byte) error {
+ return message.Unmarshal(v, data, new(refs.Version))
+}
diff --git a/api/refs/message_test.go b/api/refs/message_test.go
new file mode 100644
index 0000000..d844f93
--- /dev/null
+++ b/api/refs/message_test.go
@@ -0,0 +1,21 @@
+package refs_test
+
+import (
+ "testing"
+
+ refstest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/test"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ messagetest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message/test"
+)
+
+func TestMessageConvert(t *testing.T) {
+ messagetest.TestRPCMessage(t,
+ func(empty bool) message.Message { return refstest.GenerateOwnerID(empty) },
+ func(empty bool) message.Message { return refstest.GenerateObjectID(empty) },
+ func(empty bool) message.Message { return refstest.GenerateContainerID(empty) },
+ func(empty bool) message.Message { return refstest.GenerateAddress(empty) },
+ func(empty bool) message.Message { return refstest.GenerateChecksum(empty) },
+ func(empty bool) message.Message { return refstest.GenerateSignature(empty) },
+ func(empty bool) message.Message { return refstest.GenerateVersion(empty) },
+ )
+}
diff --git a/api/refs/string.go b/api/refs/string.go
new file mode 100644
index 0000000..c33a241
--- /dev/null
+++ b/api/refs/string.go
@@ -0,0 +1,47 @@
+package refs
+
+import (
+ refs "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+)
+
+// String returns string representation of ChecksumType.
+func (t ChecksumType) String() string {
+ return ChecksumTypeToGRPC(t).String()
+}
+
+// FromString parses ChecksumType from a string representation.
+// It is a reverse action to String().
+//
+// Returns true if s was parsed successfully.
+func (t *ChecksumType) FromString(s string) bool {
+ var g refs.ChecksumType
+
+ ok := g.FromString(s)
+
+ if ok {
+ *t = ChecksumTypeFromGRPC(g)
+ }
+
+ return ok
+}
+
+// String returns string representation of SignatureScheme.
+func (t SignatureScheme) String() string {
+ return refs.SignatureScheme(t).String()
+}
+
+// FromString parses SignatureScheme from a string representation.
+// It is a reverse action to String().
+//
+// Returns true if s was parsed successfully.
+func (t *SignatureScheme) FromString(s string) bool {
+ var g refs.SignatureScheme
+
+ ok := g.FromString(s)
+
+ if ok {
+ *t = SignatureScheme(g)
+ }
+
+ return ok
+}
diff --git a/api/refs/test/generate.go b/api/refs/test/generate.go
new file mode 100644
index 0000000..ec9151a
--- /dev/null
+++ b/api/refs/test/generate.go
@@ -0,0 +1,127 @@
+package refstest
+
+import (
+ crand "crypto/rand"
+ "crypto/sha256"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+)
+
+func GenerateVersion(empty bool) *refs.Version {
+ m := new(refs.Version)
+
+ if !empty {
+ m.SetMajor(2)
+ m.SetMinor(1)
+ }
+
+ return m
+}
+
+func GenerateOwnerID(empty bool) *refs.OwnerID {
+ m := new(refs.OwnerID)
+
+ if !empty {
+ id := make([]byte, 25)
+ _, _ = crand.Read(id)
+
+ m.SetValue(id)
+ }
+
+ return m
+}
+
+func GenerateAddress(empty bool) *refs.Address {
+ m := new(refs.Address)
+
+ if !empty {
+ m.SetObjectID(GenerateObjectID(false))
+ m.SetContainerID(GenerateContainerID(false))
+ }
+
+ return m
+}
+
+func GenerateObjectID(empty bool) *refs.ObjectID {
+ m := new(refs.ObjectID)
+
+ if !empty {
+ id := make([]byte, sha256.Size)
+ _, _ = crand.Read(id)
+
+ m.SetValue(id)
+ }
+
+ return m
+}
+
+func GenerateObjectIDs(empty bool) []refs.ObjectID {
+ var ids []refs.ObjectID
+
+ if !empty {
+ ids = append(ids,
+ *GenerateObjectID(false),
+ *GenerateObjectID(false),
+ )
+ }
+
+ return ids
+}
+
+func GenerateContainerID(empty bool) *refs.ContainerID {
+ m := new(refs.ContainerID)
+
+ if !empty {
+ id := make([]byte, sha256.Size)
+ _, _ = crand.Read(id)
+
+ m.SetValue(id)
+ }
+
+ return m
+}
+
+func GenerateContainerIDs(empty bool) []refs.ContainerID {
+ var res []refs.ContainerID
+
+ if !empty {
+ res = append(res,
+ *GenerateContainerID(false),
+ *GenerateContainerID(false),
+ )
+ }
+
+ return res
+}
+
+func GenerateSignature(empty bool) *refs.Signature {
+ m := new(refs.Signature)
+
+ if !empty {
+ key := make([]byte, 33)
+ _, _ = crand.Read(key)
+
+ sign := make([]byte, 65)
+ _, _ = crand.Read(sign)
+
+ m.SetScheme(refs.ECDSA_SHA512)
+ m.SetKey(key)
+ m.SetSign(sign)
+ }
+
+ return m
+}
+
+func GenerateChecksum(empty bool) *refs.Checksum {
+ m := new(refs.Checksum)
+
+ if !empty {
+ cs := make([]byte, sha256.Size)
+ _, _ = crand.Read(cs)
+
+ m.SetType(refs.SHA256)
+ m.SetSum(cs)
+ }
+
+ return m
+}
diff --git a/api/refs/types.go b/api/refs/types.go
new file mode 100644
index 0000000..d8f0d9b
--- /dev/null
+++ b/api/refs/types.go
@@ -0,0 +1,194 @@
+package refs
+
+type OwnerID struct {
+ val []byte
+}
+
+type ContainerID struct {
+ val []byte
+}
+
+type ObjectID struct {
+ val []byte
+}
+
+type Address struct {
+ cid *ContainerID
+
+ oid *ObjectID
+}
+
+type Checksum struct {
+ typ ChecksumType
+
+ sum []byte
+}
+
+type ChecksumType uint32
+
+type SignatureScheme uint32
+
+//nolint:revive
+const (
+ ECDSA_SHA512 SignatureScheme = iota
+ ECDSA_RFC6979_SHA256
+ ECDSA_RFC6979_SHA256_WALLET_CONNECT
+)
+
+type Signature struct {
+ key, sign []byte
+ scheme SignatureScheme
+}
+
+type Version struct {
+ major, minor uint32
+}
+
+const (
+ UnknownChecksum ChecksumType = iota
+ TillichZemor
+ SHA256
+)
+
+func (o *OwnerID) GetValue() []byte {
+ if o != nil {
+ return o.val
+ }
+
+ return nil
+}
+
+func (o *OwnerID) SetValue(v []byte) {
+ o.val = v
+}
+
+func (c *ContainerID) GetValue() []byte {
+ if c != nil {
+ return c.val
+ }
+
+ return nil
+}
+
+func (c *ContainerID) SetValue(v []byte) {
+ c.val = v
+}
+
+func (o *ObjectID) GetValue() []byte {
+ if o != nil {
+ return o.val
+ }
+
+ return nil
+}
+
+func (o *ObjectID) SetValue(v []byte) {
+ o.val = v
+}
+
+func (a *Address) GetContainerID() *ContainerID {
+ if a != nil {
+ return a.cid
+ }
+
+ return nil
+}
+
+func (a *Address) SetContainerID(v *ContainerID) {
+ a.cid = v
+}
+
+func (a *Address) GetObjectID() *ObjectID {
+ if a != nil {
+ return a.oid
+ }
+
+ return nil
+}
+
+func (a *Address) SetObjectID(v *ObjectID) {
+ a.oid = v
+}
+
+func (c *Checksum) GetType() ChecksumType {
+ if c != nil {
+ return c.typ
+ }
+
+ return UnknownChecksum
+}
+
+func (c *Checksum) SetType(v ChecksumType) {
+ c.typ = v
+}
+
+func (c *Checksum) GetSum() []byte {
+ if c != nil {
+ return c.sum
+ }
+
+ return nil
+}
+
+func (c *Checksum) SetSum(v []byte) {
+ c.sum = v
+}
+
+func (s *Signature) GetKey() []byte {
+ if s != nil {
+ return s.key
+ }
+
+ return nil
+}
+
+func (s *Signature) SetKey(v []byte) {
+ s.key = v
+}
+
+func (s *Signature) GetSign() []byte {
+ if s != nil {
+ return s.sign
+ }
+
+ return nil
+}
+
+func (s *Signature) SetSign(v []byte) {
+ s.sign = v
+}
+
+func (s *Signature) GetScheme() SignatureScheme {
+ if s != nil {
+ return s.scheme
+ }
+ return 0
+}
+
+func (s *Signature) SetScheme(scheme SignatureScheme) {
+ s.scheme = scheme
+}
+
+func (v *Version) GetMajor() uint32 {
+ if v != nil {
+ return v.major
+ }
+
+ return 0
+}
+
+func (v *Version) SetMajor(val uint32) {
+ v.major = val
+}
+
+func (v *Version) GetMinor() uint32 {
+ if v != nil {
+ return v.minor
+ }
+
+ return 0
+}
+
+func (v *Version) SetMinor(val uint32) {
+ v.minor = val
+}
diff --git a/api/rpc/accounting.go b/api/rpc/accounting.go
new file mode 100644
index 0000000..31259bd
--- /dev/null
+++ b/api/rpc/accounting.go
@@ -0,0 +1,29 @@
+package rpc
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/accounting"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/common"
+)
+
+const serviceAccounting = serviceNamePrefix + "accounting.AccountingService"
+
+const (
+ rpcAccountingBalance = "Balance"
+)
+
+// Balance executes AccountingService.Balance RPC.
+func Balance(
+ cli *client.Client,
+ req *accounting.BalanceRequest,
+ opts ...client.CallOption,
+) (*accounting.BalanceResponse, error) {
+ resp := new(accounting.BalanceResponse)
+
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceAccounting, rpcAccountingBalance), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
diff --git a/api/rpc/apemanager.go b/api/rpc/apemanager.go
new file mode 100644
index 0000000..6494d16
--- /dev/null
+++ b/api/rpc/apemanager.go
@@ -0,0 +1,60 @@
+package rpc
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/apemanager"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/common"
+)
+
+const serviceAPEManager = frostfsServiceNamePrefix + "apemanager.APEManagerService"
+
+const (
+ rpcAPEManagerAddChain = "AddChain"
+ rpcAPEManagerRemoveChain = "RemoveChain"
+ rpcAPEManagerListChains = "ListChains"
+)
+
+func AddChain(
+ cli *client.Client,
+ req *apemanager.AddChainRequest,
+ opts ...client.CallOption,
+) (*apemanager.AddChainResponse, error) {
+ resp := new(apemanager.AddChainResponse)
+
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceAPEManager, rpcAPEManagerAddChain), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
+
+func RemoveChain(
+ cli *client.Client,
+ req *apemanager.RemoveChainRequest,
+ opts ...client.CallOption,
+) (*apemanager.RemoveChainResponse, error) {
+ resp := new(apemanager.RemoveChainResponse)
+
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceAPEManager, rpcAPEManagerRemoveChain), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
+
+func ListChains(
+ cli *client.Client,
+ req *apemanager.ListChainsRequest,
+ opts ...client.CallOption,
+) (*apemanager.ListChainsResponse, error) {
+ resp := new(apemanager.ListChainsResponse)
+
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceAPEManager, rpcAPEManagerListChains), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
diff --git a/api/rpc/client/call_options.go b/api/rpc/client/call_options.go
new file mode 100644
index 0000000..4fe8791
--- /dev/null
+++ b/api/rpc/client/call_options.go
@@ -0,0 +1,40 @@
+package client
+
+import (
+ "context"
+
+ "google.golang.org/grpc"
+)
+
+// CallOption is a messaging session option within Protobuf RPC.
+type CallOption func(*callParameters)
+
+type callParameters struct {
+ ctx context.Context // nolint:containedctx
+ dialer func(context.Context, grpc.ClientConnInterface) error
+}
+
+func defaultCallParameters() *callParameters {
+ return &callParameters{
+ ctx: context.Background(),
+ }
+}
+
+// WithContext returns option to specify call context. If provided, all network
+// communications will be based on this context. Otherwise, context.Background()
+// is used.
+//
+// Context SHOULD NOT be nil.
+func WithContext(ctx context.Context) CallOption {
+ return func(prm *callParameters) {
+ prm.ctx = ctx
+ }
+}
+
+// WithDialer returns option to specify grpc dialer. If passed, it will be
+// called after the connection is successfully created.
+func WithDialer(dialer func(context.Context, grpc.ClientConnInterface) error) CallOption {
+ return func(prm *callParameters) {
+ prm.dialer = dialer
+ }
+}
diff --git a/api/rpc/client/client.go b/api/rpc/client/client.go
new file mode 100644
index 0000000..eeac896
--- /dev/null
+++ b/api/rpc/client/client.go
@@ -0,0 +1,30 @@
+package client
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ "google.golang.org/grpc"
+ "google.golang.org/grpc/credentials"
+)
+
+// Client represents client for exchanging messages
+// with a remote server using Protobuf RPC.
+type Client struct {
+ cfg
+}
+
+// New creates, configures via options and returns new Client instance.
+func New(opts ...Option) *Client {
+ var c Client
+ c.initDefault()
+
+ for _, opt := range opts {
+ opt(&c.cfg)
+ }
+
+ c.grpcDialOpts = append(c.grpcDialOpts, grpc.WithDefaultCallOptions(grpc.ForceCodec(encoding.ProtoCodec{})))
+ if c.tlsCfg != nil {
+ c.grpcDialOpts = append(c.grpcDialOpts, grpc.WithTransportCredentials(credentials.NewTLS(c.tlsCfg)))
+ }
+
+ return &c
+}
diff --git a/api/rpc/client/conn.go b/api/rpc/client/conn.go
new file mode 100644
index 0000000..f208413
--- /dev/null
+++ b/api/rpc/client/conn.go
@@ -0,0 +1,24 @@
+package client
+
+import (
+ "io"
+
+ "google.golang.org/grpc"
+)
+
+// Conn is an interface for grpc client connection.
+type Conn interface {
+ grpc.ClientConnInterface
+ io.Closer
+}
+
+// Conn returns underlying connection.
+//
+// Returns non-nil result after the first Init() call
+// completed without a connection error.
+//
+// Client should not be used after Close() call
+// on the connection: behavior is undefined.
+func (c *Client) Conn() io.Closer {
+ return c.conn
+}
diff --git a/api/rpc/client/connect.go b/api/rpc/client/connect.go
new file mode 100644
index 0000000..e22e0a6
--- /dev/null
+++ b/api/rpc/client/connect.go
@@ -0,0 +1,72 @@
+package client
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "net"
+ "net/url"
+
+ grpcstd "google.golang.org/grpc"
+)
+
+var errInvalidEndpoint = errors.New("invalid endpoint options")
+
+func (c *Client) openGRPCConn(ctx context.Context, dialer func(ctx context.Context, cc grpcstd.ClientConnInterface) error) error {
+ if c.conn != nil {
+ return nil
+ }
+
+ if c.addr == "" {
+ return errInvalidEndpoint
+ }
+
+ var err error
+
+ c.conn, err = grpcstd.NewClient(c.addr, c.grpcDialOpts...)
+ if err != nil {
+ return fmt.Errorf("gRPC new client: %w", err)
+ }
+
+ if dialer != nil {
+ ctx, cancel := context.WithTimeout(ctx, c.dialTimeout)
+ defer cancel()
+
+ if err := dialer(ctx, c.conn); err != nil {
+ _ = c.conn.Close()
+ return fmt.Errorf("gRPC dial: %w", err)
+ }
+ }
+
+ return nil
+}
+
+// ParseURI parses s as address and returns a host and a flag
+// indicating that TLS is enabled. If multi-address is provided
+// the argument is returned unchanged.
+func ParseURI(s string) (string, bool, error) {
+ uri, err := url.ParseRequestURI(s)
+ if err != nil {
+ return s, false, nil
+ }
+
+ // check if passed string was parsed correctly
+ // URIs that do not start with a slash after the scheme are interpreted as:
+ // `scheme:opaque` => if `opaque` is not empty, then it is supposed that URI
+ // is in `host:port` format
+ if uri.Host == "" {
+ uri.Host = uri.Scheme
+ uri.Scheme = grpcScheme // assume GRPC by default
+ if uri.Opaque != "" {
+ uri.Host = net.JoinHostPort(uri.Host, uri.Opaque)
+ }
+ }
+
+ switch uri.Scheme {
+ case grpcTLSScheme, grpcScheme:
+ default:
+ return "", false, fmt.Errorf("unsupported scheme: %s", uri.Scheme)
+ }
+
+ return uri.Host, uri.Scheme == grpcTLSScheme, nil
+}
diff --git a/api/rpc/client/flows.go b/api/rpc/client/flows.go
new file mode 100644
index 0000000..671c679
--- /dev/null
+++ b/api/rpc/client/flows.go
@@ -0,0 +1,124 @@
+package client
+
+import (
+ "errors"
+ "io"
+ "sync"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/common"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+)
+
+// SendUnary initializes communication session by RPC info, performs unary RPC
+// and closes the session.
+func SendUnary(cli *Client, info common.CallMethodInfo, req, resp message.Message, opts ...CallOption) error {
+ rw, err := cli.Init(info, opts...)
+ if err != nil {
+ return err
+ }
+
+ err = rw.WriteMessage(req)
+ if err != nil {
+ return err
+ }
+
+ err = rw.ReadMessage(resp)
+ if err != nil {
+ return err
+ }
+
+ return rw.Close()
+}
+
+// MessageWriterCloser wraps MessageWriter
+// and io.Closer interfaces.
+type MessageWriterCloser interface {
+ MessageWriter
+ io.Closer
+}
+
+type clientStreamWriterCloser struct {
+ MessageReadWriter
+
+ resp message.Message
+}
+
+func (c *clientStreamWriterCloser) Close() error {
+ err := c.MessageReadWriter.Close()
+ if err != nil {
+ return err
+ }
+
+ return c.ReadMessage(c.resp)
+}
+
+// OpenClientStream initializes communication session by RPC info, opens client-side stream
+// and returns its interface.
+//
+// All stream writes must be performed before the closing. Close must be called once.
+func OpenClientStream(cli *Client, info common.CallMethodInfo, resp message.Message, opts ...CallOption) (MessageWriterCloser, error) {
+ rw, err := cli.Init(info, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return &clientStreamWriterCloser{
+ MessageReadWriter: rw,
+ resp: resp,
+ }, nil
+}
+
+// MessageReaderCloser wraps MessageReader
+// and io.Closer interface.
+type MessageReaderCloser interface {
+ MessageReader
+ io.Closer
+}
+
+type serverStreamReaderCloser struct {
+ rw MessageReadWriter
+
+ once sync.Once
+
+ req message.Message
+}
+
+func (s *serverStreamReaderCloser) ReadMessage(msg message.Message) error {
+ var err error
+
+ s.once.Do(func() {
+ err = s.rw.WriteMessage(s.req)
+ })
+
+ if err != nil {
+ return err
+ }
+
+ err = s.rw.ReadMessage(msg)
+ if !errors.Is(err, io.EOF) {
+ return err
+ }
+
+ err = s.rw.Close()
+ if err != nil {
+ return err
+ }
+
+ return io.EOF
+}
+
+// OpenServerStream initializes communication session by RPC info, opens server-side stream
+// and returns its interface.
+//
+// All stream reads must be performed before the closing. Close must be called once.
+func OpenServerStream(cli *Client, info common.CallMethodInfo, req message.Message, opts ...CallOption) (MessageReader, error) {
+ rw, err := cli.Init(info, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return &serverStreamReaderCloser{
+ rw: rw,
+ req: req,
+ }, nil
+}
diff --git a/api/rpc/client/init.go b/api/rpc/client/init.go
new file mode 100644
index 0000000..706e6a9
--- /dev/null
+++ b/api/rpc/client/init.go
@@ -0,0 +1,69 @@
+package client
+
+import (
+ "context"
+ "io"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/common"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ "google.golang.org/grpc"
+)
+
+// MessageReader is an interface of the Message reader.
+type MessageReader interface {
+ // ReadMessage reads the next Message.
+ //
+ // Returns io.EOF if there are no more messages to read.
+ // ReadMessage should not be called after io.EOF occasion.
+ ReadMessage(message.Message) error
+}
+
+// MessageWriter is an interface of the Message writer.
+type MessageWriter interface {
+ // WriteMessage writers the next Message.
+ //
+ // WriteMessage should not be called after any error.
+ WriteMessage(message.Message) error
+}
+
+// MessageReadWriter is a component interface
+// for transmitting raw Protobuf messages.
+type MessageReadWriter interface {
+ MessageReader
+ MessageWriter
+
+ // Closes the communication session.
+ //
+ // All calls to send/receive messages must be done before closing.
+ io.Closer
+}
+
+// Init initiates a messaging session and returns the interface for message transmitting.
+func (c *Client) Init(info common.CallMethodInfo, opts ...CallOption) (MessageReadWriter, error) {
+ prm := defaultCallParameters()
+
+ for _, opt := range opts {
+ opt(prm)
+ }
+
+ if err := c.openGRPCConn(prm.ctx, prm.dialer); err != nil {
+ return nil, err
+ }
+
+ ctx, cancel := context.WithCancel(prm.ctx)
+ stream, err := c.conn.NewStream(ctx, &grpc.StreamDesc{
+ StreamName: info.Name,
+ ServerStreams: info.ServerStream(),
+ ClientStreams: info.ClientStream(),
+ }, toMethodName(info))
+ if err != nil {
+ cancel()
+ return nil, err
+ }
+
+ return &streamWrapper{
+ ClientStream: stream,
+ cancel: cancel,
+ timeout: c.rwTimeout,
+ }, nil
+}
diff --git a/api/rpc/client/options.go b/api/rpc/client/options.go
new file mode 100644
index 0000000..5711cd4
--- /dev/null
+++ b/api/rpc/client/options.go
@@ -0,0 +1,129 @@
+package client
+
+import (
+ "crypto/tls"
+ "time"
+
+ "google.golang.org/grpc"
+ "google.golang.org/grpc/credentials/insecure"
+)
+
+const (
+ grpcScheme = "grpc"
+ grpcTLSScheme = "grpcs"
+)
+
+// Option is a Client's option.
+type Option func(*cfg)
+
+type cfg struct {
+ addr string
+
+ dialTimeout time.Duration
+ rwTimeout time.Duration
+
+ tlsCfg *tls.Config
+ grpcDialOpts []grpc.DialOption
+
+ conn Conn
+}
+
+const (
+ defaultDialTimeout = 5 * time.Second
+ defaultRWTimeout = 1 * time.Minute
+)
+
+func (c *cfg) initDefault() {
+ c.dialTimeout = defaultDialTimeout
+ c.rwTimeout = defaultRWTimeout
+ c.grpcDialOpts = []grpc.DialOption{
+ grpc.WithTransportCredentials(insecure.NewCredentials()),
+ }
+}
+
+// WithNetworkAddress returns option to specify
+// network address of the remote server.
+//
+// Ignored if WithGRPCConn is provided.
+func WithNetworkAddress(v string) Option {
+ return func(c *cfg) {
+ if v != "" {
+ c.addr = v
+ }
+ }
+}
+
+// WithNetworkURIAddress combines WithNetworkAddress and WithTLSCfg options
+// based on arguments.
+//
+// Do not use along with WithNetworkAddress and WithTLSCfg.
+//
+// Ignored if WithGRPCConn is provided.
+func WithNetworkURIAddress(addr string, tlsCfg *tls.Config) []Option {
+ host, isTLS, err := ParseURI(addr)
+ if err != nil {
+ return nil
+ }
+
+ opts := make([]Option, 2)
+ opts[0] = WithNetworkAddress(host)
+ if isTLS {
+ if tlsCfg == nil {
+ tlsCfg = &tls.Config{}
+ }
+ opts[1] = WithTLSCfg(tlsCfg)
+ } else {
+ opts[1] = WithTLSCfg(nil)
+ }
+
+ return opts
+}
+
+// WithDialTimeout returns option to specify
+// dial timeout of the remote server connection.
+//
+// Ignored if WithGRPCConn is provided.
+func WithDialTimeout(v time.Duration) Option {
+ return func(c *cfg) {
+ if v > 0 {
+ c.dialTimeout = v
+ }
+ }
+}
+
+// WithRWTimeout returns option to specify timeout
+// for reading and writing single gRPC message.
+func WithRWTimeout(v time.Duration) Option {
+ return func(c *cfg) {
+ if v > 0 {
+ c.rwTimeout = v
+ }
+ }
+}
+
+// WithTLSCfg returns option to specify
+// TLS configuration.
+//
+// Ignored if WithGRPCConn is provided.
+func WithTLSCfg(v *tls.Config) Option {
+ return func(c *cfg) {
+ c.tlsCfg = v
+ }
+}
+
+// WithGRPCConn returns option to specify
+// gRPC virtual connection.
+func WithGRPCConn(v Conn) Option {
+ return func(c *cfg) {
+ if v != nil {
+ c.conn = v
+ }
+ }
+}
+
+// WithGRPCDialOptions returns an option to specify grpc.DialOption.
+func WithGRPCDialOptions(opts []grpc.DialOption) Option {
+ return func(c *cfg) {
+ c.grpcDialOpts = append(c.grpcDialOpts, opts...)
+ }
+}
diff --git a/api/rpc/client/options_test.go b/api/rpc/client/options_test.go
new file mode 100644
index 0000000..56704b6
--- /dev/null
+++ b/api/rpc/client/options_test.go
@@ -0,0 +1,197 @@
+package client
+
+import (
+ "crypto/tls"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestWithNetworkURIAddress(t *testing.T) {
+ hostPort := "frostfs.example.com:8080"
+ apiPort := "127.0.0.1:8080"
+ serverName := "testServer"
+
+ testCases := []struct {
+ uri string
+ tlsConfig *tls.Config
+
+ wantHost string
+ wantTLS bool
+ }{
+ {
+ uri: grpcScheme + "://" + hostPort,
+ tlsConfig: nil,
+ wantHost: "frostfs.example.com:8080",
+ wantTLS: false,
+ },
+ {
+ uri: grpcScheme + "://" + hostPort,
+ tlsConfig: &tls.Config{},
+ wantHost: "frostfs.example.com:8080",
+ wantTLS: false,
+ },
+ {
+ uri: grpcTLSScheme + "://" + hostPort,
+ tlsConfig: nil,
+ wantHost: "frostfs.example.com:8080",
+ wantTLS: true,
+ },
+ {
+ uri: grpcTLSScheme + "://" + hostPort,
+ tlsConfig: &tls.Config{ServerName: serverName},
+ wantHost: "frostfs.example.com:8080",
+ wantTLS: true,
+ },
+ {
+ uri: "wrongScheme://" + hostPort,
+ tlsConfig: nil,
+ wantHost: "",
+ wantTLS: false,
+ },
+ {
+ uri: "impossibleToParseIt",
+ tlsConfig: nil,
+ wantHost: "impossibleToParseIt",
+ wantTLS: false,
+ },
+ {
+ uri: hostPort,
+ tlsConfig: nil,
+ wantHost: hostPort,
+ wantTLS: false,
+ },
+ {
+ uri: apiPort,
+ tlsConfig: nil,
+ wantHost: apiPort,
+ wantTLS: false,
+ },
+ }
+
+ for _, test := range testCases {
+ cfg := &cfg{}
+ opts := WithNetworkURIAddress(test.uri, test.tlsConfig)
+
+ for _, opt := range opts {
+ opt(cfg)
+ }
+
+ require.Equal(t, test.wantHost, cfg.addr, test.uri)
+ require.Equal(t, test.wantTLS, cfg.tlsCfg != nil, test.uri)
+ // check if custom tlsConfig was applied
+ if test.tlsConfig != nil && test.wantTLS {
+ require.Equal(t, test.tlsConfig.ServerName, cfg.tlsCfg.ServerName, test.uri)
+ }
+ }
+}
+
+func Test_WithNetworkAddress_WithTLS_WithNetworkURIAddress(t *testing.T) {
+ addr1, addr2 := "example1.com:8080", "example2.com:8080"
+
+ testCases := []struct {
+ addr string
+ withTLS bool
+
+ uri string
+
+ wantHost string
+ wantTLS bool
+ }{
+ {
+ addr: addr1,
+ withTLS: true,
+
+ uri: grpcScheme + "://" + addr2,
+
+ wantHost: addr2,
+ wantTLS: false,
+ },
+ {
+ addr: addr1,
+ withTLS: false,
+
+ uri: grpcTLSScheme + "://" + addr2,
+
+ wantHost: addr2,
+ wantTLS: true,
+ },
+ }
+
+ for _, test := range testCases {
+ // order:
+ // 1. WithNetworkAddress
+ // 2. WithTLSCfg(if test.withTLS == true)
+ // 3. WithNetworkURIAddress
+ config := &cfg{}
+ opts := []Option{WithNetworkAddress(test.addr)}
+
+ if test.withTLS {
+ opts = append(opts, WithTLSCfg(&tls.Config{}))
+ }
+
+ opts = append(opts, WithNetworkURIAddress(test.uri, nil)...)
+
+ for _, opt := range opts {
+ opt(config)
+ }
+
+ require.Equal(t, test.wantHost, config.addr, test.addr)
+ require.Equal(t, test.wantTLS, config.tlsCfg != nil, test.addr)
+ }
+}
+
+func Test_WithNetworkURIAddress_WithTLS_WithNetworkAddress(t *testing.T) {
+ addr1, addr2 := "example1.com:8080", "example2.com:8080"
+
+ testCases := []struct {
+ addr string
+ withTLS bool
+
+ uri string
+
+ wantHost string
+ wantTLS bool
+ }{
+ {
+ uri: grpcScheme + "://" + addr1,
+
+ addr: addr2,
+ withTLS: true,
+
+ wantHost: addr2,
+ wantTLS: true,
+ },
+ {
+ uri: grpcTLSScheme + "://" + addr1,
+
+ addr: addr2,
+ withTLS: false,
+
+ wantHost: addr2,
+ wantTLS: true,
+ },
+ }
+
+ for _, test := range testCases {
+ // order:
+ // 1. WithNetworkURIAddress
+ // 2. WithNetworkAddress
+ // 3. WithTLSCfg(if test.withTLS == true)
+ config := &cfg{}
+ opts := WithNetworkURIAddress(test.uri, nil)
+
+ opts = append(opts, WithNetworkAddress(test.addr))
+
+ if test.withTLS {
+ opts = append(opts, WithTLSCfg(&tls.Config{}))
+ }
+
+ for _, opt := range opts {
+ opt(config)
+ }
+
+ require.Equal(t, test.wantHost, config.addr, test.uri)
+ require.Equal(t, test.wantTLS, config.tlsCfg != nil, test.uri)
+ }
+}
diff --git a/api/rpc/client/stream_wrapper.go b/api/rpc/client/stream_wrapper.go
new file mode 100644
index 0000000..4c7bb1f
--- /dev/null
+++ b/api/rpc/client/stream_wrapper.go
@@ -0,0 +1,58 @@
+package client
+
+import (
+ "context"
+ "time"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ "google.golang.org/grpc"
+)
+
+type streamWrapper struct {
+ grpc.ClientStream
+ timeout time.Duration
+ cancel context.CancelFunc
+}
+
+func (w streamWrapper) ReadMessage(m message.Message) error {
+ // Can be optimized: we can create blank message here.
+ gm := m.ToGRPCMessage()
+
+ err := w.withTimeout(func() error {
+ return w.ClientStream.RecvMsg(gm)
+ })
+ if err != nil {
+ return err
+ }
+
+ return m.FromGRPCMessage(gm)
+}
+
+func (w streamWrapper) WriteMessage(m message.Message) error {
+ return w.withTimeout(func() error {
+ return w.ClientStream.SendMsg(m.ToGRPCMessage())
+ })
+}
+
+func (w *streamWrapper) Close() error {
+ return w.withTimeout(w.ClientStream.CloseSend)
+}
+
+func (w *streamWrapper) withTimeout(closure func() error) error {
+ ch := make(chan error, 1)
+ go func() {
+ ch <- closure()
+ close(ch)
+ }()
+
+ tt := time.NewTimer(w.timeout)
+
+ select {
+ case err := <-ch:
+ tt.Stop()
+ return err
+ case <-tt.C:
+ w.cancel()
+ return context.DeadlineExceeded
+ }
+}
diff --git a/api/rpc/client/util.go b/api/rpc/client/util.go
new file mode 100644
index 0000000..3d68b95
--- /dev/null
+++ b/api/rpc/client/util.go
@@ -0,0 +1,13 @@
+package client
+
+import (
+ "fmt"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/common"
+)
+
+const methodNameFmt = "/%s/%s"
+
+func toMethodName(p common.CallMethodInfo) string {
+ return fmt.Sprintf(methodNameFmt, p.Service, p.Name)
+}
diff --git a/api/rpc/common.go b/api/rpc/common.go
new file mode 100644
index 0000000..8177694
--- /dev/null
+++ b/api/rpc/common.go
@@ -0,0 +1,10 @@
+package rpc
+
+const (
+ // serviceNamePrefix is still used in "old" services but should be
+ // considered as deprecated. Since new services use "frostfs" root,
+ // `frostfsServiceNamePrefix` must be used for their rpc interface.
+ serviceNamePrefix = "neo.fs.v2."
+
+ frostfsServiceNamePrefix = "frostfs.v2."
+)
diff --git a/api/rpc/common/call.go b/api/rpc/common/call.go
new file mode 100644
index 0000000..bc3410a
--- /dev/null
+++ b/api/rpc/common/call.go
@@ -0,0 +1,75 @@
+package common
+
+type callType uint8
+
+const (
+ _ callType = iota
+ callUnary
+ callClientStream
+ callServerStream
+ callBidirStream
+)
+
+// CallMethodInfo is an information about the RPC.
+type CallMethodInfo struct {
+ // Name of the service.
+ Service string
+
+ // Name of the RPC.
+ Name string
+
+ t callType
+}
+
+// ServerStream checks if CallMethodInfo contains
+// information about the server-side streaming RPC.
+func (c CallMethodInfo) ServerStream() bool {
+ return c.t == callServerStream || c.t == callBidirStream
+}
+
+// ClientStream checks if CallMethodInfo contains
+// information about the client-side streaming RPC.
+func (c CallMethodInfo) ClientStream() bool {
+ return c.t == callClientStream || c.t == callBidirStream
+}
+
+func (c *CallMethodInfo) setCommon(service, name string) {
+ c.Service = service
+ c.Name = name
+}
+
+// CallMethodInfoUnary returns CallMethodInfo structure
+// initialized for the unary RPC.
+func CallMethodInfoUnary(service, name string) (info CallMethodInfo) {
+ info.setCommon(service, name)
+ info.t = callUnary
+
+ return
+}
+
+// CallMethodInfoClientStream returns CallMethodInfo structure
+// initialized for the client-side streaming RPC.
+func CallMethodInfoClientStream(service, name string) (info CallMethodInfo) {
+ info.setCommon(service, name)
+ info.t = callClientStream
+
+ return
+}
+
+// CallMethodInfoServerStream returns CallMethodInfo structure
+// initialized for the server-side streaming RPC.
+func CallMethodInfoServerStream(service, name string) (info CallMethodInfo) {
+ info.setCommon(service, name)
+ info.t = callServerStream
+
+ return
+}
+
+// CallMethodInfoBidirectionalStream returns CallMethodInfo structure
+// initialized for the bidirectional streaming RPC.
+func CallMethodInfoBidirectionalStream(service, name string) (info CallMethodInfo) {
+ info.setCommon(service, name)
+ info.t = callBidirStream
+
+ return
+}
diff --git a/api/rpc/common/call_test.go b/api/rpc/common/call_test.go
new file mode 100644
index 0000000..eb88b69
--- /dev/null
+++ b/api/rpc/common/call_test.go
@@ -0,0 +1,49 @@
+package common_test
+
+import (
+ "testing"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/common"
+ "github.com/stretchr/testify/require"
+)
+
+const (
+ testServiceName = "test service"
+ testRPCName = "test RPC"
+)
+
+func TestCallMethodInfoUnary(t *testing.T) {
+ i := common.CallMethodInfoUnary(testServiceName, testRPCName)
+
+ require.Equal(t, testServiceName, i.Service)
+ require.Equal(t, testRPCName, i.Name)
+ require.False(t, i.ClientStream())
+ require.False(t, i.ServerStream())
+}
+
+func TestCallMethodInfoServerStream(t *testing.T) {
+ i := common.CallMethodInfoServerStream(testServiceName, testRPCName)
+
+ require.Equal(t, testServiceName, i.Service)
+ require.Equal(t, testRPCName, i.Name)
+ require.False(t, i.ClientStream())
+ require.True(t, i.ServerStream())
+}
+
+func TestCallMethodInfoClientStream(t *testing.T) {
+ i := common.CallMethodInfoClientStream(testServiceName, testRPCName)
+
+ require.Equal(t, testServiceName, i.Service)
+ require.Equal(t, testRPCName, i.Name)
+ require.True(t, i.ClientStream())
+ require.False(t, i.ServerStream())
+}
+
+func TestCallMethodInfoBidirectionalStream(t *testing.T) {
+ i := common.CallMethodInfoBidirectionalStream(testServiceName, testRPCName)
+
+ require.Equal(t, testServiceName, i.Service)
+ require.Equal(t, testRPCName, i.Name)
+ require.True(t, i.ClientStream())
+ require.True(t, i.ServerStream())
+}
diff --git a/api/rpc/container.go b/api/rpc/container.go
new file mode 100644
index 0000000..9ba5c99
--- /dev/null
+++ b/api/rpc/container.go
@@ -0,0 +1,82 @@
+package rpc
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/common"
+)
+
+const serviceContainer = serviceNamePrefix + "container.ContainerService"
+
+const (
+ rpcContainerPut = "Put"
+ rpcContainerGet = "Get"
+ rpcContainerDel = "Delete"
+ rpcContainerList = "List"
+ rpcContainerGetEACL = "GetExtendedACL"
+ rpcContainerUsedSpace = "AnnounceUsedSpace"
+)
+
+// PutContainer executes ContainerService.Put RPC.
+func PutContainer(
+ cli *client.Client,
+ req *container.PutRequest,
+ opts ...client.CallOption,
+) (*container.PutResponse, error) {
+ resp := new(container.PutResponse)
+
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceContainer, rpcContainerPut), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
+
+// GetContainer executes ContainerService.Get RPC.
+func GetContainer(
+ cli *client.Client,
+ req *container.GetRequest,
+ opts ...client.CallOption,
+) (*container.GetResponse, error) {
+ resp := new(container.GetResponse)
+
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceContainer, rpcContainerGet), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
+
+// DeleteContainer executes ContainerService.Delete RPC.
+func DeleteContainer(
+ cli *client.Client,
+ req *container.DeleteRequest,
+ opts ...client.CallOption,
+) (*container.PutResponse, error) {
+ resp := new(container.PutResponse)
+
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceContainer, rpcContainerDel), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
+
+// ListContainers executes ContainerService.List RPC.
+func ListContainers(
+ cli *client.Client,
+ req *container.ListRequest,
+ opts ...client.CallOption,
+) (*container.ListResponse, error) {
+ resp := new(container.ListResponse)
+
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceContainer, rpcContainerList), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
diff --git a/api/rpc/grpc/init.go b/api/rpc/grpc/init.go
new file mode 100644
index 0000000..0092d39
--- /dev/null
+++ b/api/rpc/grpc/init.go
@@ -0,0 +1,4 @@
+package grpc
+
+// Message represents raw gRPC message.
+type Message any
diff --git a/api/rpc/message/encoding.go b/api/rpc/message/encoding.go
new file mode 100644
index 0000000..d656acd
--- /dev/null
+++ b/api/rpc/message/encoding.go
@@ -0,0 +1,40 @@
+package message
+
+import (
+ "encoding/json"
+)
+
+// GRPCConvertedMessage is an interface
+// of the gRPC message that is used
+// for Message encoding/decoding.
+type GRPCConvertedMessage interface {
+ UnmarshalProtobuf([]byte) error
+}
+
+// Unmarshal decodes m from its Protobuf binary representation
+// via related gRPC message.
+//
+// gm should be tof the same type as the m.ToGRPCMessage() return.
+func Unmarshal(m Message, data []byte, gm GRPCConvertedMessage) error {
+ if err := gm.UnmarshalProtobuf(data); err != nil {
+ return err
+ }
+
+ return m.FromGRPCMessage(gm)
+}
+
+// MarshalJSON encodes m to Protobuf JSON representation.
+func MarshalJSON(m Message) ([]byte, error) {
+ return json.Marshal(m.ToGRPCMessage())
+}
+
+// UnmarshalJSON decodes m from its Protobuf JSON representation
+// via related gRPC message.
+//
+// gm should be tof the same type as the m.ToGRPCMessage() return.
+func UnmarshalJSON(m Message, data []byte, gm any) error {
+ if err := json.Unmarshal(data, gm); err != nil {
+ return err
+ }
+ return m.FromGRPCMessage(gm)
+}
diff --git a/api/rpc/message/message.go b/api/rpc/message/message.go
new file mode 100644
index 0000000..793351f
--- /dev/null
+++ b/api/rpc/message/message.go
@@ -0,0 +1,43 @@
+package message
+
+import (
+ "fmt"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/grpc"
+)
+
+// Message represents raw Protobuf message
+// that can be transmitted via several
+// transport protocols.
+type Message interface {
+ // Must return gRPC message that can
+ // be used for gRPC protocol transmission.
+ ToGRPCMessage() grpc.Message
+
+ // Must restore the message from related
+ // gRPC message.
+ //
+ // If gRPC message is not a related one,
+ // ErrUnexpectedMessageType can be returned
+ // to indicate this.
+ FromGRPCMessage(grpc.Message) error
+}
+
+// ErrUnexpectedMessageType is an error that
+// is used to indicate message mismatch.
+type ErrUnexpectedMessageType struct {
+ exp, act any
+}
+
+// NewUnexpectedMessageType initializes an error about message mismatch
+// between act and exp.
+func NewUnexpectedMessageType(act, exp any) ErrUnexpectedMessageType {
+ return ErrUnexpectedMessageType{
+ exp: exp,
+ act: act,
+ }
+}
+
+func (e ErrUnexpectedMessageType) Error() string {
+ return fmt.Sprintf("unexpected message type %T: expected %T", e.act, e.exp)
+}
diff --git a/api/rpc/message/test/message.go b/api/rpc/message/test/message.go
new file mode 100644
index 0000000..a402756
--- /dev/null
+++ b/api/rpc/message/test/message.go
@@ -0,0 +1,126 @@
+package messagetest
+
+import (
+ "encoding/json"
+ "errors"
+ "fmt"
+ "testing"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ "github.com/stretchr/testify/require"
+)
+
+type jsonMessage interface {
+ json.Marshaler
+ json.Unmarshaler
+}
+
+type binaryMessage interface {
+ StableMarshal([]byte) []byte
+ StableSize() int
+ Unmarshal([]byte) error
+}
+
+func TestRPCMessage(t *testing.T, msgGens ...func(empty bool) message.Message) {
+ for _, msgGen := range msgGens {
+ msg := msgGen(false)
+
+ t.Run(fmt.Sprintf("convert_%T", msg), func(t *testing.T) {
+ msg := msgGen(false)
+
+ err := msg.FromGRPCMessage(100)
+
+ require.True(t, errors.As(err, new(message.ErrUnexpectedMessageType)))
+
+ msg2 := msgGen(true)
+
+ err = msg2.FromGRPCMessage(msg.ToGRPCMessage())
+ require.NoError(t, err)
+
+ require.Equal(t, msg, msg2)
+ })
+
+ t.Run("encoding", func(t *testing.T) {
+ if jm, ok := msg.(jsonMessage); ok {
+ t.Run(fmt.Sprintf("JSON_%T", msg), func(t *testing.T) {
+ data, err := jm.MarshalJSON()
+ require.NoError(t, err)
+
+ jm2 := msgGen(true).(jsonMessage)
+ require.NoError(t, jm2.UnmarshalJSON(data))
+
+ require.Equal(t, jm, jm2)
+ })
+ }
+
+ if bm, ok := msg.(binaryMessage); ok {
+ t.Run(fmt.Sprintf("%T.StableSize() does no allocations", bm), func(t *testing.T) {
+ require.Zero(t, testing.AllocsPerRun(1000, func() {
+ _ = bm.StableSize()
+ }))
+ })
+ t.Run(fmt.Sprintf("Binary_%T", msg), func(t *testing.T) {
+ data := bm.StableMarshal(nil)
+
+ bm2 := msgGen(true).(binaryMessage)
+ require.NoError(t, bm2.Unmarshal(data))
+
+ require.Equal(t, bm, bm2)
+ })
+ }
+ t.Run("compatibility", func(t *testing.T) {
+ testCompatibility(t, msgGen)
+ })
+ })
+ }
+}
+
+func testCompatibility(t *testing.T, msgGen func(empty bool) message.Message) {
+ compareBinary := func(t *testing.T, msg message.Message) {
+ am, ok := msg.(binaryMessage)
+ if !ok {
+ t.Skip()
+ }
+
+ a := am.StableMarshal(nil)
+ b := msg.ToGRPCMessage().(encoding.ProtoMarshaler).MarshalProtobuf(nil)
+ if len(a) == 0 {
+ require.Empty(t, b)
+ } else {
+ require.Equal(t, a, b)
+ }
+ }
+ compareJSON := func(t *testing.T, msg message.Message) {
+ am, ok := msg.(jsonMessage)
+ if !ok {
+ t.Skip()
+ }
+
+ a, err := am.MarshalJSON()
+ require.NoError(t, err)
+
+ b, err := json.Marshal(msg.ToGRPCMessage())
+ require.NoError(t, err)
+
+ require.JSONEq(t, string(a), string(b))
+ }
+ t.Run("empty", func(t *testing.T) {
+ msg := msgGen(true)
+ t.Run(fmt.Sprintf("Binary_%T", msg), func(t *testing.T) {
+ compareBinary(t, msg)
+ })
+ t.Run(fmt.Sprintf("JSON_%T", msg), func(t *testing.T) {
+ compareJSON(t, msg)
+ })
+ })
+ t.Run("not empty", func(t *testing.T) {
+ msg := msgGen(false)
+ t.Run(fmt.Sprintf("Binary_%T", msg), func(t *testing.T) {
+ compareBinary(t, msg)
+ })
+ t.Run(fmt.Sprintf("JSON_%T", msg), func(t *testing.T) {
+ compareJSON(t, msg)
+ })
+ })
+}
diff --git a/api/rpc/netmap.go b/api/rpc/netmap.go
new file mode 100644
index 0000000..fe52b2e
--- /dev/null
+++ b/api/rpc/netmap.go
@@ -0,0 +1,62 @@
+package rpc
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/common"
+)
+
+const serviceNetmap = serviceNamePrefix + "netmap.NetmapService"
+
+const (
+ rpcNetmapNodeInfo = "LocalNodeInfo"
+ rpcNetmapNetInfo = "NetworkInfo"
+ rpcNetmapSnapshot = "NetmapSnapshot"
+)
+
+// LocalNodeInfo executes NetmapService.LocalNodeInfo RPC.
+func LocalNodeInfo(
+ cli *client.Client,
+ req *netmap.LocalNodeInfoRequest,
+ opts ...client.CallOption,
+) (*netmap.LocalNodeInfoResponse, error) {
+ resp := new(netmap.LocalNodeInfoResponse)
+
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceNetmap, rpcNetmapNodeInfo), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
+
+// NetworkInfo executes NetmapService.NetworkInfo RPC.
+func NetworkInfo(
+ cli *client.Client,
+ req *netmap.NetworkInfoRequest,
+ opts ...client.CallOption,
+) (*netmap.NetworkInfoResponse, error) {
+ resp := new(netmap.NetworkInfoResponse)
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceNetmap, rpcNetmapNetInfo), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
+
+// NetMapSnapshot executes NetmapService.NetmapSnapshot RPC.
+func NetMapSnapshot(
+ cli *client.Client,
+ req *netmap.SnapshotRequest,
+ opts ...client.CallOption,
+) (*netmap.SnapshotResponse, error) {
+ resp := new(netmap.SnapshotResponse)
+
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceNetmap, rpcNetmapSnapshot), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
diff --git a/api/rpc/object.go b/api/rpc/object.go
new file mode 100644
index 0000000..b6792f0
--- /dev/null
+++ b/api/rpc/object.go
@@ -0,0 +1,243 @@
+package rpc
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/common"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+)
+
+const serviceObject = serviceNamePrefix + "object.ObjectService"
+
+const (
+ rpcObjectPut = "Put"
+ rpcObjectGet = "Get"
+ rpcObjectSearch = "Search"
+ rpcObjectRange = "GetRange"
+ rpcObjectHash = "GetRangeHash"
+ rpcObjectHead = "Head"
+ rpcObjectDelete = "Delete"
+ rpcObjectPutSingle = "PutSingle"
+ rpcObjectPatch = "Patch"
+)
+
+// PutRequestWriter is an object.PutRequest
+// message streaming component.
+type PutRequestWriter struct {
+ wc client.MessageWriterCloser
+
+ resp message.Message
+}
+
+// Write writes req to the stream.
+func (w *PutRequestWriter) Write(req *object.PutRequest) error {
+ return w.wc.WriteMessage(req)
+}
+
+// Close closes the stream.
+func (w *PutRequestWriter) Close() error {
+ return w.wc.Close()
+}
+
+// PutObject executes ObjectService.Put RPC.
+func PutObject(
+ cli *client.Client,
+ resp *object.PutResponse,
+ opts ...client.CallOption,
+) (*PutRequestWriter, error) {
+ wc, err := client.OpenClientStream(cli, common.CallMethodInfoClientStream(serviceObject, rpcObjectPut), resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return &PutRequestWriter{
+ wc: wc,
+ resp: resp,
+ }, nil
+}
+
+// GetResponseReader is an object.GetResponse
+// stream reader.
+type GetResponseReader struct {
+ r client.MessageReader
+}
+
+// Read reads response from the stream.
+//
+// Returns io.EOF of streaming is finished.
+func (r *GetResponseReader) Read(resp *object.GetResponse) error {
+ return r.r.ReadMessage(resp)
+}
+
+// GetObject executes ObjectService.Get RPC.
+func GetObject(
+ cli *client.Client,
+ req *object.GetRequest,
+ opts ...client.CallOption,
+) (*GetResponseReader, error) {
+ wc, err := client.OpenServerStream(cli, common.CallMethodInfoServerStream(serviceObject, rpcObjectGet), req, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return &GetResponseReader{
+ r: wc,
+ }, nil
+}
+
+// GetResponseReader is an object.SearchResponse
+// stream reader.
+type SearchResponseReader struct {
+ r client.MessageReader
+}
+
+// Read reads response from the stream.
+//
+// Returns io.EOF of streaming is finished.
+func (r *SearchResponseReader) Read(resp *object.SearchResponse) error {
+ return r.r.ReadMessage(resp)
+}
+
+// SearchObjects executes ObjectService.Search RPC.
+func SearchObjects(
+ cli *client.Client,
+ req *object.SearchRequest,
+ opts ...client.CallOption,
+) (*SearchResponseReader, error) {
+ wc, err := client.OpenServerStream(cli, common.CallMethodInfoServerStream(serviceObject, rpcObjectSearch), req, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return &SearchResponseReader{
+ r: wc,
+ }, nil
+}
+
+// GetResponseReader is an object.GetRangeResponse
+// stream reader.
+type ObjectRangeResponseReader struct {
+ r client.MessageReader
+}
+
+// Read reads response from the stream.
+//
+// Returns io.EOF of streaming is finished.
+func (r *ObjectRangeResponseReader) Read(resp *object.GetRangeResponse) error {
+ return r.r.ReadMessage(resp)
+}
+
+// GetObjectRange executes ObjectService.GetRange RPC.
+func GetObjectRange(
+ cli *client.Client,
+ req *object.GetRangeRequest,
+ opts ...client.CallOption,
+) (*ObjectRangeResponseReader, error) {
+ wc, err := client.OpenServerStream(cli, common.CallMethodInfoServerStream(serviceObject, rpcObjectRange), req, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return &ObjectRangeResponseReader{
+ r: wc,
+ }, nil
+}
+
+// HeadObject executes ObjectService.Head RPC.
+func HeadObject(
+ cli *client.Client,
+ req *object.HeadRequest,
+ opts ...client.CallOption,
+) (*object.HeadResponse, error) {
+ resp := new(object.HeadResponse)
+
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceObject, rpcObjectHead), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
+
+// DeleteObject executes ObjectService.Delete RPC.
+func DeleteObject(
+ cli *client.Client,
+ req *object.DeleteRequest,
+ opts ...client.CallOption,
+) (*object.DeleteResponse, error) {
+ resp := new(object.DeleteResponse)
+
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceObject, rpcObjectDelete), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
+
+// HashObjectRange executes ObjectService.GetRangeHash RPC.
+func HashObjectRange(
+ cli *client.Client,
+ req *object.GetRangeHashRequest,
+ opts ...client.CallOption,
+) (*object.GetRangeHashResponse, error) {
+ resp := new(object.GetRangeHashResponse)
+
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceObject, rpcObjectHash), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
+
+// PutSingleObject executes ObjectService.PutSingle RPC.
+func PutSingleObject(
+ cli *client.Client,
+ req *object.PutSingleRequest,
+ opts ...client.CallOption,
+) (*object.PutSingleResponse, error) {
+ resp := new(object.PutSingleResponse)
+
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceObject, rpcObjectPutSingle), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
+
+// PatchRequestWriter is an object.PatchRequest
+// message streaming component.
+type PatchRequestWriter struct {
+ wc client.MessageWriterCloser
+
+ resp message.Message
+}
+
+// Write writes req to the stream.
+func (w *PatchRequestWriter) Write(req *object.PatchRequest) error {
+ return w.wc.WriteMessage(req)
+}
+
+// Close closes the stream.
+func (w *PatchRequestWriter) Close() error {
+ return w.wc.Close()
+}
+
+// Patch executes ObjectService.Patch RPC.
+func Patch(
+ cli *client.Client,
+ resp *object.PatchResponse,
+ opts ...client.CallOption,
+) (*PatchRequestWriter, error) {
+ wc, err := client.OpenClientStream(cli, common.CallMethodInfoClientStream(serviceObject, rpcObjectPatch), resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return &PatchRequestWriter{
+ wc: wc,
+ resp: resp,
+ }, nil
+}
diff --git a/api/rpc/session.go b/api/rpc/session.go
new file mode 100644
index 0000000..2477029
--- /dev/null
+++ b/api/rpc/session.go
@@ -0,0 +1,28 @@
+package rpc
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/common"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+)
+
+const serviceSession = serviceNamePrefix + "session.SessionService"
+
+const (
+ rpcSessionCreate = "Create"
+)
+
+func CreateSession(
+ cli *client.Client,
+ req *session.CreateRequest,
+ opts ...client.CallOption,
+) (*session.CreateResponse, error) {
+ resp := new(session.CreateResponse)
+
+ err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceSession, rpcSessionCreate), req, resp, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ return resp, nil
+}
diff --git a/api/session/convert.go b/api/session/convert.go
new file mode 100644
index 0000000..342be4e
--- /dev/null
+++ b/api/session/convert.go
@@ -0,0 +1,898 @@
+package session
+
+import (
+ "fmt"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
+ aclGRPC "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
+ statusGRPC "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status/grpc"
+)
+
+func (c *CreateRequestBody) ToGRPCMessage() grpc.Message {
+ var m *session.CreateRequest_Body
+
+ if c != nil {
+ m = new(session.CreateRequest_Body)
+
+ m.SetOwnerId(c.ownerID.ToGRPCMessage().(*refsGRPC.OwnerID))
+ m.SetExpiration(c.expiration)
+ }
+
+ return m
+}
+
+func (c *CreateRequestBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*session.CreateRequest_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ ownerID := v.GetOwnerId()
+ if ownerID == nil {
+ c.ownerID = nil
+ } else {
+ if c.ownerID == nil {
+ c.ownerID = new(refs.OwnerID)
+ }
+
+ err = c.ownerID.FromGRPCMessage(ownerID)
+ if err != nil {
+ return err
+ }
+ }
+
+ c.expiration = v.GetExpiration()
+
+ return nil
+}
+
+func (c *CreateRequest) ToGRPCMessage() grpc.Message {
+ var m *session.CreateRequest
+
+ if c != nil {
+ m = new(session.CreateRequest)
+
+ m.SetBody(c.body.ToGRPCMessage().(*session.CreateRequest_Body))
+ c.RequestHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (c *CreateRequest) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*session.CreateRequest)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ c.body = nil
+ } else {
+ if c.body == nil {
+ c.body = new(CreateRequestBody)
+ }
+
+ err = c.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return c.RequestHeaders.FromMessage(v)
+}
+
+func (c *CreateResponseBody) ToGRPCMessage() grpc.Message {
+ var m *session.CreateResponse_Body
+
+ if c != nil {
+ m = new(session.CreateResponse_Body)
+
+ m.SetSessionKey(c.sessionKey)
+ m.SetId(c.id)
+ }
+
+ return m
+}
+
+func (c *CreateResponseBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*session.CreateResponse_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ c.sessionKey = v.GetSessionKey()
+ c.id = v.GetId()
+
+ return nil
+}
+
+func (c *CreateResponse) ToGRPCMessage() grpc.Message {
+ var m *session.CreateResponse
+
+ if c != nil {
+ m = new(session.CreateResponse)
+
+ m.SetBody(c.body.ToGRPCMessage().(*session.CreateResponse_Body))
+ c.ResponseHeaders.ToMessage(m)
+ }
+
+ return m
+}
+
+func (c *CreateResponse) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*session.CreateResponse)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ c.body = nil
+ } else {
+ if c.body == nil {
+ c.body = new(CreateResponseBody)
+ }
+
+ err = c.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ return c.ResponseHeaders.FromMessage(v)
+}
+
+func (l *TokenLifetime) ToGRPCMessage() grpc.Message {
+ var m *session.SessionToken_Body_TokenLifetime
+
+ if l != nil {
+ m = new(session.SessionToken_Body_TokenLifetime)
+
+ m.SetExp(l.exp)
+ m.SetIat(l.iat)
+ m.SetNbf(l.nbf)
+ }
+
+ return m
+}
+
+func (l *TokenLifetime) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*session.SessionToken_Body_TokenLifetime)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ l.exp = v.GetExp()
+ l.iat = v.GetIat()
+ l.nbf = v.GetNbf()
+
+ return nil
+}
+
+func (x *XHeader) ToGRPCMessage() grpc.Message {
+ var m *session.XHeader
+
+ if x != nil {
+ m = new(session.XHeader)
+
+ m.SetKey(x.key)
+ m.SetValue(x.val)
+ }
+
+ return m
+}
+
+func (x *XHeader) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*session.XHeader)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ x.key = v.GetKey()
+ x.val = v.GetValue()
+
+ return nil
+}
+
+func XHeadersToGRPC(xs []XHeader) (res []session.XHeader) {
+ if xs != nil {
+ res = make([]session.XHeader, 0, len(xs))
+
+ for i := range xs {
+ res = append(res, *xs[i].ToGRPCMessage().(*session.XHeader))
+ }
+ }
+
+ return
+}
+
+func XHeadersFromGRPC(xs []session.XHeader) (res []XHeader, err error) {
+ if xs != nil {
+ res = make([]XHeader, len(xs))
+
+ for i := range xs {
+ err = res[i].FromGRPCMessage(&xs[i])
+ if err != nil {
+ return
+ }
+ }
+ }
+
+ return
+}
+
+func (t *Token) ToGRPCMessage() grpc.Message {
+ var m *session.SessionToken
+
+ if t != nil {
+ m = new(session.SessionToken)
+
+ m.SetBody(t.body.ToGRPCMessage().(*session.SessionToken_Body))
+ m.SetSignature(t.sig.ToGRPCMessage().(*refsGRPC.Signature))
+ }
+
+ return m
+}
+
+func (t *Token) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*session.SessionToken)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ body := v.GetBody()
+ if body == nil {
+ t.body = nil
+ } else {
+ if t.body == nil {
+ t.body = new(TokenBody)
+ }
+
+ err = t.body.FromGRPCMessage(body)
+ if err != nil {
+ return err
+ }
+ }
+
+ sig := v.GetSignature()
+ if sig == nil {
+ t.sig = nil
+ } else {
+ if t.sig == nil {
+ t.sig = new(refs.Signature)
+ }
+
+ err = t.sig.FromGRPCMessage(sig)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func (r *RequestVerificationHeader) ToGRPCMessage() grpc.Message {
+ var m *session.RequestVerificationHeader
+
+ if r != nil {
+ m = new(session.RequestVerificationHeader)
+
+ m.SetBodySignature(r.bodySig.ToGRPCMessage().(*refsGRPC.Signature))
+ m.SetMetaSignature(r.metaSig.ToGRPCMessage().(*refsGRPC.Signature))
+ m.SetOriginSignature(r.originSig.ToGRPCMessage().(*refsGRPC.Signature))
+ m.SetOrigin(r.origin.ToGRPCMessage().(*session.RequestVerificationHeader))
+ }
+
+ return m
+}
+
+func (r *RequestVerificationHeader) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*session.RequestVerificationHeader)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ originSig := v.GetOriginSignature()
+ if originSig == nil {
+ r.originSig = nil
+ } else {
+ if r.originSig == nil {
+ r.originSig = new(refs.Signature)
+ }
+
+ err = r.originSig.FromGRPCMessage(originSig)
+ if err != nil {
+ return err
+ }
+ }
+
+ metaSig := v.GetMetaSignature()
+ if metaSig == nil {
+ r.metaSig = nil
+ } else {
+ if r.metaSig == nil {
+ r.metaSig = new(refs.Signature)
+ }
+
+ err = r.metaSig.FromGRPCMessage(metaSig)
+ if err != nil {
+ return err
+ }
+ }
+
+ bodySig := v.GetBodySignature()
+ if bodySig == nil {
+ r.bodySig = nil
+ } else {
+ if r.bodySig == nil {
+ r.bodySig = new(refs.Signature)
+ }
+
+ err = r.bodySig.FromGRPCMessage(bodySig)
+ if err != nil {
+ return err
+ }
+ }
+
+ origin := v.GetOrigin()
+ if origin == nil {
+ r.origin = nil
+ } else {
+ if r.origin == nil {
+ r.origin = new(RequestVerificationHeader)
+ }
+
+ err = r.origin.FromGRPCMessage(origin)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func (r *RequestMetaHeader) ToGRPCMessage() grpc.Message {
+ var m *session.RequestMetaHeader
+
+ if r != nil {
+ m = new(session.RequestMetaHeader)
+
+ m.SetVersion(r.version.ToGRPCMessage().(*refsGRPC.Version))
+ m.SetSessionToken(r.sessionToken.ToGRPCMessage().(*session.SessionToken))
+ m.SetBearerToken(r.bearerToken.ToGRPCMessage().(*aclGRPC.BearerToken))
+ m.SetXHeaders(XHeadersToGRPC(r.xHeaders))
+ m.SetEpoch(r.epoch)
+ m.SetTtl(r.ttl)
+ m.SetOrigin(r.origin.ToGRPCMessage().(*session.RequestMetaHeader))
+ m.SetMagicNumber(r.netMagic)
+ }
+
+ return m
+}
+
+func (r *RequestMetaHeader) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*session.RequestMetaHeader)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ version := v.GetVersion()
+ if version == nil {
+ r.version = nil
+ } else {
+ if r.version == nil {
+ r.version = new(refs.Version)
+ }
+
+ err = r.version.FromGRPCMessage(version)
+ if err != nil {
+ return err
+ }
+ }
+
+ sessionToken := v.GetSessionToken()
+ if sessionToken == nil {
+ r.sessionToken = nil
+ } else {
+ if r.sessionToken == nil {
+ r.sessionToken = new(Token)
+ }
+
+ err = r.sessionToken.FromGRPCMessage(sessionToken)
+ if err != nil {
+ return err
+ }
+ }
+
+ bearerToken := v.GetBearerToken()
+ if bearerToken == nil {
+ r.bearerToken = nil
+ } else {
+ if r.bearerToken == nil {
+ r.bearerToken = new(acl.BearerToken)
+ }
+
+ err = r.bearerToken.FromGRPCMessage(bearerToken)
+ if err != nil {
+ return err
+ }
+ }
+
+ origin := v.GetOrigin()
+ if origin == nil {
+ r.origin = nil
+ } else {
+ if r.origin == nil {
+ r.origin = new(RequestMetaHeader)
+ }
+
+ err = r.origin.FromGRPCMessage(origin)
+ if err != nil {
+ return err
+ }
+ }
+
+ r.xHeaders, err = XHeadersFromGRPC(v.GetXHeaders())
+ if err != nil {
+ return err
+ }
+
+ r.epoch = v.GetEpoch()
+ r.ttl = v.GetTtl()
+ r.netMagic = v.GetMagicNumber()
+
+ return nil
+}
+
+func (r *ResponseVerificationHeader) ToGRPCMessage() grpc.Message {
+ var m *session.ResponseVerificationHeader
+
+ if r != nil {
+ m = new(session.ResponseVerificationHeader)
+
+ m.SetBodySignature(r.bodySig.ToGRPCMessage().(*refsGRPC.Signature))
+ m.SetMetaSignature(r.metaSig.ToGRPCMessage().(*refsGRPC.Signature))
+ m.SetOriginSignature(r.originSig.ToGRPCMessage().(*refsGRPC.Signature))
+ m.SetOrigin(r.origin.ToGRPCMessage().(*session.ResponseVerificationHeader))
+ }
+
+ return m
+}
+
+func (r *ResponseVerificationHeader) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*session.ResponseVerificationHeader)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ originSig := v.GetOriginSignature()
+ if originSig == nil {
+ r.originSig = nil
+ } else {
+ if r.originSig == nil {
+ r.originSig = new(refs.Signature)
+ }
+
+ err = r.originSig.FromGRPCMessage(originSig)
+ if err != nil {
+ return err
+ }
+ }
+
+ metaSig := v.GetMetaSignature()
+ if metaSig == nil {
+ r.metaSig = nil
+ } else {
+ if r.metaSig == nil {
+ r.metaSig = new(refs.Signature)
+ }
+
+ err = r.metaSig.FromGRPCMessage(metaSig)
+ if err != nil {
+ return err
+ }
+ }
+
+ bodySig := v.GetBodySignature()
+ if bodySig == nil {
+ r.bodySig = nil
+ } else {
+ if r.bodySig == nil {
+ r.bodySig = new(refs.Signature)
+ }
+
+ err = r.bodySig.FromGRPCMessage(bodySig)
+ if err != nil {
+ return err
+ }
+ }
+
+ origin := v.GetOrigin()
+ if origin == nil {
+ r.origin = nil
+ } else {
+ if r.origin == nil {
+ r.origin = new(ResponseVerificationHeader)
+ }
+
+ err = r.origin.FromGRPCMessage(origin)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func (r *ResponseMetaHeader) ToGRPCMessage() grpc.Message {
+ var m *session.ResponseMetaHeader
+
+ if r != nil {
+ m = new(session.ResponseMetaHeader)
+
+ m.SetVersion(r.version.ToGRPCMessage().(*refsGRPC.Version))
+ m.SetXHeaders(XHeadersToGRPC(r.xHeaders))
+ m.SetEpoch(r.epoch)
+ m.SetTtl(r.ttl)
+ m.SetOrigin(r.origin.ToGRPCMessage().(*session.ResponseMetaHeader))
+ m.SetStatus(r.status.ToGRPCMessage().(*statusGRPC.Status))
+ }
+
+ return m
+}
+
+func (r *ResponseMetaHeader) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*session.ResponseMetaHeader)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ version := v.GetVersion()
+ if version == nil {
+ r.version = nil
+ } else {
+ if r.version == nil {
+ r.version = new(refs.Version)
+ }
+
+ err = r.version.FromGRPCMessage(version)
+ if err != nil {
+ return err
+ }
+ }
+
+ origin := v.GetOrigin()
+ if origin == nil {
+ r.origin = nil
+ } else {
+ if r.origin == nil {
+ r.origin = new(ResponseMetaHeader)
+ }
+
+ err = r.origin.FromGRPCMessage(origin)
+ if err != nil {
+ return err
+ }
+ }
+
+ st := v.GetStatus()
+ if st == nil {
+ r.status = nil
+ } else {
+ if r.status == nil {
+ r.status = new(status.Status)
+ }
+
+ err = r.status.FromGRPCMessage(st)
+ if err != nil {
+ return err
+ }
+ }
+
+ r.xHeaders, err = XHeadersFromGRPC(v.GetXHeaders())
+ if err != nil {
+ return err
+ }
+
+ r.epoch = v.GetEpoch()
+ r.ttl = v.GetTtl()
+
+ return nil
+}
+
+func ObjectSessionVerbToGRPCField(v ObjectSessionVerb) session.ObjectSessionContext_Verb {
+ switch v {
+ case ObjectVerbPut:
+ return session.ObjectSessionContext_PUT
+ case ObjectVerbGet:
+ return session.ObjectSessionContext_GET
+ case ObjectVerbHead:
+ return session.ObjectSessionContext_HEAD
+ case ObjectVerbSearch:
+ return session.ObjectSessionContext_SEARCH
+ case ObjectVerbDelete:
+ return session.ObjectSessionContext_DELETE
+ case ObjectVerbRange:
+ return session.ObjectSessionContext_RANGE
+ case ObjectVerbRangeHash:
+ return session.ObjectSessionContext_RANGEHASH
+ case ObjectVerbPatch:
+ return session.ObjectSessionContext_PATCH
+ default:
+ return session.ObjectSessionContext_VERB_UNSPECIFIED
+ }
+}
+
+func ObjectSessionVerbFromGRPCField(v session.ObjectSessionContext_Verb) ObjectSessionVerb {
+ switch v {
+ case session.ObjectSessionContext_PUT:
+ return ObjectVerbPut
+ case session.ObjectSessionContext_GET:
+ return ObjectVerbGet
+ case session.ObjectSessionContext_HEAD:
+ return ObjectVerbHead
+ case session.ObjectSessionContext_SEARCH:
+ return ObjectVerbSearch
+ case session.ObjectSessionContext_DELETE:
+ return ObjectVerbDelete
+ case session.ObjectSessionContext_RANGE:
+ return ObjectVerbRange
+ case session.ObjectSessionContext_RANGEHASH:
+ return ObjectVerbRangeHash
+ case session.ObjectSessionContext_PATCH:
+ return ObjectVerbPatch
+ default:
+ return ObjectVerbUnknown
+ }
+}
+
+func (c *ObjectSessionContext) ToGRPCMessage() grpc.Message {
+ var m *session.ObjectSessionContext
+
+ if c != nil {
+ m = new(session.ObjectSessionContext)
+
+ m.SetVerb(ObjectSessionVerbToGRPCField(c.verb))
+ m.SetTarget(&session.ObjectSessionContext_Target{
+ Container: c.cnr.ToGRPCMessage().(*refsGRPC.ContainerID),
+ Objects: refs.ObjectIDListToGRPCMessage(c.objs),
+ })
+ }
+
+ return m
+}
+
+func (c *ObjectSessionContext) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*session.ObjectSessionContext)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ cnr := v.GetTarget().GetContainer()
+ if cnr == nil {
+ c.cnr = nil
+ } else {
+ if c.cnr == nil {
+ c.cnr = new(refs.ContainerID)
+ }
+
+ err = c.cnr.FromGRPCMessage(cnr)
+ if err != nil {
+ return err
+ }
+ }
+
+ c.objs, err = refs.ObjectIDListFromGRPCMessage(v.GetTarget().GetObjects())
+ if err != nil {
+ return err
+ }
+
+ c.verb = ObjectSessionVerbFromGRPCField(v.GetVerb())
+
+ return nil
+}
+
+func (t *TokenBody) ToGRPCMessage() grpc.Message {
+ var m *session.SessionToken_Body
+
+ if t != nil {
+ m = new(session.SessionToken_Body)
+
+ switch typ := t.ctx.(type) {
+ default:
+ panic(fmt.Sprintf("unknown session context %T", typ))
+ case nil:
+ m.Context = nil
+ case *ObjectSessionContext:
+ m.SetObject(typ.ToGRPCMessage().(*session.ObjectSessionContext))
+ case *ContainerSessionContext:
+ m.SetContainer(typ.ToGRPCMessage().(*session.ContainerSessionContext))
+ }
+
+ m.SetOwnerId(t.ownerID.ToGRPCMessage().(*refsGRPC.OwnerID))
+ m.SetId(t.id)
+ m.SetSessionKey(t.sessionKey)
+ m.SetLifetime(t.lifetime.ToGRPCMessage().(*session.SessionToken_Body_TokenLifetime))
+ }
+
+ return m
+}
+
+func (t *TokenBody) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*session.SessionToken_Body)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ t.ctx = nil
+
+ switch val := v.GetContext().(type) {
+ default:
+ err = fmt.Errorf("unknown session context %T", val)
+ case nil:
+ case *session.SessionToken_Body_Object:
+ ctx, ok := t.ctx.(*ObjectSessionContext)
+ if !ok {
+ ctx = new(ObjectSessionContext)
+ t.ctx = ctx
+ }
+
+ err = ctx.FromGRPCMessage(val.Object)
+ case *session.SessionToken_Body_Container:
+ ctx, ok := t.ctx.(*ContainerSessionContext)
+ if !ok {
+ ctx = new(ContainerSessionContext)
+ t.ctx = ctx
+ }
+
+ err = ctx.FromGRPCMessage(val.Container)
+ }
+
+ if err != nil {
+ return err
+ }
+
+ ownerID := v.GetOwnerId()
+ if ownerID == nil {
+ t.ownerID = nil
+ } else {
+ if t.ownerID == nil {
+ t.ownerID = new(refs.OwnerID)
+ }
+
+ err = t.ownerID.FromGRPCMessage(ownerID)
+ if err != nil {
+ return err
+ }
+ }
+
+ lifetime := v.GetLifetime()
+ if lifetime == nil {
+ t.lifetime = nil
+ } else {
+ if t.lifetime == nil {
+ t.lifetime = new(TokenLifetime)
+ }
+
+ err = t.lifetime.FromGRPCMessage(lifetime)
+ if err != nil {
+ return err
+ }
+ }
+
+ t.id = v.GetId()
+ t.sessionKey = v.GetSessionKey()
+
+ return nil
+}
+
+// ContainerSessionVerbToGRPCField converts ContainerSessionVerb
+// to gRPC-generated session.ContainerSessionContext_Verb.
+//
+// If v is outside of the ContainerSessionVerb enum,
+// session.ContainerSessionContext_VERB_UNSPECIFIED is returned.
+func ContainerSessionVerbToGRPCField(v ContainerSessionVerb) session.ContainerSessionContext_Verb {
+ switch v {
+ default:
+ return session.ContainerSessionContext_VERB_UNSPECIFIED
+ case ContainerVerbPut:
+ return session.ContainerSessionContext_PUT
+ case ContainerVerbDelete:
+ return session.ContainerSessionContext_DELETE
+ case ContainerVerbSetEACL:
+ return session.ContainerSessionContext_SETEACL
+ }
+}
+
+// ContainerSessionVerbFromGRPCField converts gRPC-generated
+// session.ContainerSessionContext_Verb to ContainerSessionVerb.
+//
+// If v is outside of the session.ContainerSessionContext_Verb enum,
+// ContainerVerbUnknown is returned.
+func ContainerSessionVerbFromGRPCField(v session.ContainerSessionContext_Verb) ContainerSessionVerb {
+ switch v {
+ default:
+ return ContainerVerbUnknown
+ case session.ContainerSessionContext_PUT:
+ return ContainerVerbPut
+ case session.ContainerSessionContext_DELETE:
+ return ContainerVerbDelete
+ case session.ContainerSessionContext_SETEACL:
+ return ContainerVerbSetEACL
+ }
+}
+
+// ToGRPCMessage converts ContainerSessionContext to gRPC-generated
+// session.ContainerSessionContext message.
+func (x *ContainerSessionContext) ToGRPCMessage() grpc.Message {
+ var m *session.ContainerSessionContext
+
+ if x != nil {
+ m = new(session.ContainerSessionContext)
+
+ m.SetVerb(ContainerSessionVerbToGRPCField(x.verb))
+ m.SetWildcard(x.wildcard)
+ m.SetContainerId(x.cid.ToGRPCMessage().(*refsGRPC.ContainerID))
+ }
+
+ return m
+}
+
+// FromGRPCMessage tries to restore ContainerSessionContext from grpc.Message.
+//
+// Returns message.ErrUnexpectedMessageType if m is not
+// a gRPC-generated session.ContainerSessionContext message.
+func (x *ContainerSessionContext) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*session.ContainerSessionContext)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var err error
+
+ cid := v.GetContainerId()
+ if cid == nil {
+ x.cid = nil
+ } else {
+ if x.cid == nil {
+ x.cid = new(refs.ContainerID)
+ }
+
+ err = x.cid.FromGRPCMessage(cid)
+ if err != nil {
+ return err
+ }
+ }
+
+ x.verb = ContainerSessionVerbFromGRPCField(v.GetVerb())
+ x.wildcard = v.GetWildcard()
+
+ return nil
+}
diff --git a/api/session/grpc/service_frostfs.pb.go b/api/session/grpc/service_frostfs.pb.go
new file mode 100644
index 0000000..1c8e02b
--- /dev/null
+++ b/api/session/grpc/service_frostfs.pb.go
@@ -0,0 +1,866 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package session
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ grpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+ strconv "strconv"
+)
+
+type CreateRequest_Body struct {
+ OwnerId *grpc.OwnerID `json:"ownerId"`
+ Expiration uint64 `json:"expiration"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*CreateRequest_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*CreateRequest_Body)(nil)
+ _ json.Marshaler = (*CreateRequest_Body)(nil)
+ _ json.Unmarshaler = (*CreateRequest_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *CreateRequest_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.OwnerId)
+ size += proto.UInt64Size(2, x.Expiration)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *CreateRequest_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *CreateRequest_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.OwnerId != nil {
+ x.OwnerId.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Expiration != 0 {
+ mm.AppendUint64(2, x.Expiration)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *CreateRequest_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "CreateRequest_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // OwnerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "OwnerId")
+ }
+ x.OwnerId = new(grpc.OwnerID)
+ if err := x.OwnerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Expiration
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Expiration")
+ }
+ x.Expiration = data
+ }
+ }
+ return nil
+}
+func (x *CreateRequest_Body) GetOwnerId() *grpc.OwnerID {
+ if x != nil {
+ return x.OwnerId
+ }
+ return nil
+}
+func (x *CreateRequest_Body) SetOwnerId(v *grpc.OwnerID) {
+ x.OwnerId = v
+}
+func (x *CreateRequest_Body) GetExpiration() uint64 {
+ if x != nil {
+ return x.Expiration
+ }
+ return 0
+}
+func (x *CreateRequest_Body) SetExpiration(v uint64) {
+ x.Expiration = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *CreateRequest_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *CreateRequest_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"ownerId\":"
+ out.RawString(prefix)
+ x.OwnerId.MarshalEasyJSON(out)
+ }
+ {
+ 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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *CreateRequest_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *CreateRequest_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "ownerId":
+ {
+ var f *grpc.OwnerID
+ f = new(grpc.OwnerID)
+ f.UnmarshalEasyJSON(in)
+ x.OwnerId = f
+ }
+ case "expiration":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.Expiration = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type CreateRequest struct {
+ Body *CreateRequest_Body `json:"body"`
+ MetaHeader *RequestMetaHeader `json:"metaHeader"`
+ VerifyHeader *RequestVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*CreateRequest)(nil)
+ _ encoding.ProtoUnmarshaler = (*CreateRequest)(nil)
+ _ json.Marshaler = (*CreateRequest)(nil)
+ _ json.Unmarshaler = (*CreateRequest)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *CreateRequest) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *CreateRequest) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *CreateRequest) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *CreateRequest) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *CreateRequest) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *CreateRequest) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "CreateRequest")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(CreateRequest_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(RequestMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(RequestVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *CreateRequest) GetBody() *CreateRequest_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *CreateRequest) SetBody(v *CreateRequest_Body) {
+ x.Body = v
+}
+func (x *CreateRequest) GetMetaHeader() *RequestMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *CreateRequest) SetMetaHeader(v *RequestMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *CreateRequest) GetVerifyHeader() *RequestVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *CreateRequest) SetVerifyHeader(v *RequestVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *CreateRequest) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *CreateRequest) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *CreateRequest) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *CreateRequest) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *CreateRequest_Body
+ f = new(CreateRequest_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *RequestMetaHeader
+ f = new(RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *RequestVerificationHeader
+ f = new(RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type CreateResponse_Body struct {
+ Id []byte `json:"id"`
+ SessionKey []byte `json:"sessionKey"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*CreateResponse_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*CreateResponse_Body)(nil)
+ _ json.Marshaler = (*CreateResponse_Body)(nil)
+ _ json.Unmarshaler = (*CreateResponse_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *CreateResponse_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.BytesSize(1, x.Id)
+ size += proto.BytesSize(2, x.SessionKey)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *CreateResponse_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *CreateResponse_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.Id) != 0 {
+ mm.AppendBytes(1, x.Id)
+ }
+ if len(x.SessionKey) != 0 {
+ mm.AppendBytes(2, x.SessionKey)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *CreateResponse_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "CreateResponse_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Id
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Id")
+ }
+ x.Id = data
+ case 2: // SessionKey
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "SessionKey")
+ }
+ x.SessionKey = data
+ }
+ }
+ return nil
+}
+func (x *CreateResponse_Body) GetId() []byte {
+ if x != nil {
+ return x.Id
+ }
+ return nil
+}
+func (x *CreateResponse_Body) SetId(v []byte) {
+ x.Id = v
+}
+func (x *CreateResponse_Body) GetSessionKey() []byte {
+ if x != nil {
+ return x.SessionKey
+ }
+ return nil
+}
+func (x *CreateResponse_Body) SetSessionKey(v []byte) {
+ x.SessionKey = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *CreateResponse_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *CreateResponse_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"id\":"
+ out.RawString(prefix)
+ if x.Id != nil {
+ out.Base64Bytes(x.Id)
+ } else {
+ out.String("")
+ }
+ }
+ {
+ 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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *CreateResponse_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *CreateResponse_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "id":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Id = f
+ }
+ case "sessionKey":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.SessionKey = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type CreateResponse struct {
+ Body *CreateResponse_Body `json:"body"`
+ MetaHeader *ResponseMetaHeader `json:"metaHeader"`
+ VerifyHeader *ResponseVerificationHeader `json:"verifyHeader"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*CreateResponse)(nil)
+ _ encoding.ProtoUnmarshaler = (*CreateResponse)(nil)
+ _ json.Marshaler = (*CreateResponse)(nil)
+ _ json.Unmarshaler = (*CreateResponse)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *CreateResponse) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.MetaHeader)
+ size += proto.NestedStructureSize(3, x.VerifyHeader)
+ return size
+}
+
+// ReadSignedData fills buf with signed data of x.
+// If buffer length is less than x.SignedDataSize(), new buffer is allocated.
+//
+// Returns any error encountered which did not allow writing the data completely.
+// Otherwise, returns the buffer in which the data is written.
+//
+// Structures with the same field values have the same signed data.
+func (x *CreateResponse) SignedDataSize() int {
+ return x.GetBody().StableSize()
+}
+
+// SignedDataSize returns size of the request signed data in bytes.
+//
+// Structures with the same field values have the same signed data size.
+func (x *CreateResponse) ReadSignedData(buf []byte) ([]byte, error) {
+ return x.GetBody().MarshalProtobuf(buf), nil
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *CreateResponse) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *CreateResponse) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaHeader != nil {
+ x.MetaHeader.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.VerifyHeader != nil {
+ x.VerifyHeader.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *CreateResponse) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "CreateResponse")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(CreateResponse_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaHeader")
+ }
+ x.MetaHeader = new(ResponseMetaHeader)
+ if err := x.MetaHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // VerifyHeader
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "VerifyHeader")
+ }
+ x.VerifyHeader = new(ResponseVerificationHeader)
+ if err := x.VerifyHeader.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *CreateResponse) GetBody() *CreateResponse_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *CreateResponse) SetBody(v *CreateResponse_Body) {
+ x.Body = v
+}
+func (x *CreateResponse) GetMetaHeader() *ResponseMetaHeader {
+ if x != nil {
+ return x.MetaHeader
+ }
+ return nil
+}
+func (x *CreateResponse) SetMetaHeader(v *ResponseMetaHeader) {
+ x.MetaHeader = v
+}
+func (x *CreateResponse) GetVerifyHeader() *ResponseVerificationHeader {
+ if x != nil {
+ return x.VerifyHeader
+ }
+ return nil
+}
+func (x *CreateResponse) SetVerifyHeader(v *ResponseVerificationHeader) {
+ x.VerifyHeader = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *CreateResponse) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *CreateResponse) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"verifyHeader\":"
+ out.RawString(prefix)
+ x.VerifyHeader.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *CreateResponse) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *CreateResponse) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *CreateResponse_Body
+ f = new(CreateResponse_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "metaHeader":
+ {
+ var f *ResponseMetaHeader
+ f = new(ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.MetaHeader = f
+ }
+ case "verifyHeader":
+ {
+ var f *ResponseVerificationHeader
+ f = new(ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.VerifyHeader = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/session/grpc/service_frostfs_fuzz.go b/api/session/grpc/service_frostfs_fuzz.go
new file mode 100644
index 0000000..759361c
--- /dev/null
+++ b/api/session/grpc/service_frostfs_fuzz.go
@@ -0,0 +1,45 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package session
+
+func DoFuzzProtoCreateRequest(data []byte) int {
+ msg := new(CreateRequest)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONCreateRequest(data []byte) int {
+ msg := new(CreateRequest)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoCreateResponse(data []byte) int {
+ msg := new(CreateResponse)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONCreateResponse(data []byte) int {
+ msg := new(CreateResponse)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/session/grpc/service_frostfs_test.go b/api/session/grpc/service_frostfs_test.go
new file mode 100644
index 0000000..fc8664e
--- /dev/null
+++ b/api/session/grpc/service_frostfs_test.go
@@ -0,0 +1,31 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package session
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoCreateRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoCreateRequest(data)
+ })
+}
+func FuzzJSONCreateRequest(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONCreateRequest(data)
+ })
+}
+func FuzzProtoCreateResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoCreateResponse(data)
+ })
+}
+func FuzzJSONCreateResponse(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONCreateResponse(data)
+ })
+}
diff --git a/api/session/grpc/service_grpc.pb.go b/api/session/grpc/service_grpc.pb.go
new file mode 100644
index 0000000..6073111
--- /dev/null
+++ b/api/session/grpc/service_grpc.pb.go
@@ -0,0 +1,119 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.3.0
+// - protoc v5.27.2
+// source: api/session/grpc/service.proto
+
+package session
+
+import (
+ context "context"
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+const (
+ SessionService_Create_FullMethodName = "/neo.fs.v2.session.SessionService/Create"
+)
+
+// SessionServiceClient is the client API for SessionService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type SessionServiceClient interface {
+ // Open a new session between two peers.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS):
+ // session has been successfully opened;
+ // - Common failures (SECTION_FAILURE_COMMON).
+ Create(ctx context.Context, in *CreateRequest, opts ...grpc.CallOption) (*CreateResponse, error)
+}
+
+type sessionServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewSessionServiceClient(cc grpc.ClientConnInterface) SessionServiceClient {
+ return &sessionServiceClient{cc}
+}
+
+func (c *sessionServiceClient) Create(ctx context.Context, in *CreateRequest, opts ...grpc.CallOption) (*CreateResponse, error) {
+ out := new(CreateResponse)
+ err := c.cc.Invoke(ctx, SessionService_Create_FullMethodName, in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// SessionServiceServer is the server API for SessionService service.
+// All implementations should embed UnimplementedSessionServiceServer
+// for forward compatibility
+type SessionServiceServer interface {
+ // Open a new session between two peers.
+ //
+ // Statuses:
+ // - **OK** (0, SECTION_SUCCESS):
+ // session has been successfully opened;
+ // - Common failures (SECTION_FAILURE_COMMON).
+ Create(context.Context, *CreateRequest) (*CreateResponse, error)
+}
+
+// UnimplementedSessionServiceServer should be embedded to have forward compatible implementations.
+type UnimplementedSessionServiceServer struct {
+}
+
+func (UnimplementedSessionServiceServer) Create(context.Context, *CreateRequest) (*CreateResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Create not implemented")
+}
+
+// UnsafeSessionServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to SessionServiceServer will
+// result in compilation errors.
+type UnsafeSessionServiceServer interface {
+ mustEmbedUnimplementedSessionServiceServer()
+}
+
+func RegisterSessionServiceServer(s grpc.ServiceRegistrar, srv SessionServiceServer) {
+ s.RegisterService(&SessionService_ServiceDesc, srv)
+}
+
+func _SessionService_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(CreateRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(SessionServiceServer).Create(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: SessionService_Create_FullMethodName,
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(SessionServiceServer).Create(ctx, req.(*CreateRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// SessionService_ServiceDesc is the grpc.ServiceDesc for SessionService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var SessionService_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "neo.fs.v2.session.SessionService",
+ HandlerType: (*SessionServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Create",
+ Handler: _SessionService_Create_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "api/session/grpc/service.proto",
+}
diff --git a/api/session/grpc/types_frostfs.pb.go b/api/session/grpc/types_frostfs.pb.go
new file mode 100644
index 0000000..c62c1ff
--- /dev/null
+++ b/api/session/grpc/types_frostfs.pb.go
@@ -0,0 +1,3049 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package session
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ grpc1 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl/grpc"
+ grpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/grpc"
+ grpc2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status/grpc"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+ strconv "strconv"
+)
+
+type ObjectSessionContext_Verb int32
+
+const (
+ ObjectSessionContext_VERB_UNSPECIFIED ObjectSessionContext_Verb = 0
+ ObjectSessionContext_PUT ObjectSessionContext_Verb = 1
+ ObjectSessionContext_GET ObjectSessionContext_Verb = 2
+ ObjectSessionContext_HEAD ObjectSessionContext_Verb = 3
+ ObjectSessionContext_SEARCH ObjectSessionContext_Verb = 4
+ ObjectSessionContext_DELETE ObjectSessionContext_Verb = 5
+ ObjectSessionContext_RANGE ObjectSessionContext_Verb = 6
+ ObjectSessionContext_RANGEHASH ObjectSessionContext_Verb = 7
+ ObjectSessionContext_PATCH ObjectSessionContext_Verb = 8
+)
+
+var (
+ ObjectSessionContext_Verb_name = map[int32]string{
+ 0: "VERB_UNSPECIFIED",
+ 1: "PUT",
+ 2: "GET",
+ 3: "HEAD",
+ 4: "SEARCH",
+ 5: "DELETE",
+ 6: "RANGE",
+ 7: "RANGEHASH",
+ 8: "PATCH",
+ }
+ ObjectSessionContext_Verb_value = map[string]int32{
+ "VERB_UNSPECIFIED": 0,
+ "PUT": 1,
+ "GET": 2,
+ "HEAD": 3,
+ "SEARCH": 4,
+ "DELETE": 5,
+ "RANGE": 6,
+ "RANGEHASH": 7,
+ "PATCH": 8,
+ }
+)
+
+func (x ObjectSessionContext_Verb) String() string {
+ if v, ok := ObjectSessionContext_Verb_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *ObjectSessionContext_Verb) FromString(s string) bool {
+ if v, ok := ObjectSessionContext_Verb_value[s]; ok {
+ *x = ObjectSessionContext_Verb(v)
+ return true
+ }
+ return false
+}
+
+type ObjectSessionContext_Target struct {
+ Container *grpc.ContainerID `json:"container"`
+ Objects []grpc.ObjectID `json:"objects"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ObjectSessionContext_Target)(nil)
+ _ encoding.ProtoUnmarshaler = (*ObjectSessionContext_Target)(nil)
+ _ json.Marshaler = (*ObjectSessionContext_Target)(nil)
+ _ json.Unmarshaler = (*ObjectSessionContext_Target)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ObjectSessionContext_Target) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Container)
+ for i := range x.Objects {
+ size += proto.NestedStructureSizeUnchecked(2, &x.Objects[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ObjectSessionContext_Target) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ObjectSessionContext_Target) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Container != nil {
+ x.Container.EmitProtobuf(mm.AppendMessage(1))
+ }
+ for i := range x.Objects {
+ x.Objects[i].EmitProtobuf(mm.AppendMessage(2))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ObjectSessionContext_Target) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ObjectSessionContext_Target")
+ }
+ switch fc.FieldNum {
+ case 1: // Container
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Container")
+ }
+ x.Container = new(grpc.ContainerID)
+ if err := x.Container.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Objects
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Objects")
+ }
+ x.Objects = append(x.Objects, grpc.ObjectID{})
+ ff := &x.Objects[len(x.Objects)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *ObjectSessionContext_Target) GetContainer() *grpc.ContainerID {
+ if x != nil {
+ return x.Container
+ }
+ return nil
+}
+func (x *ObjectSessionContext_Target) SetContainer(v *grpc.ContainerID) {
+ x.Container = v
+}
+func (x *ObjectSessionContext_Target) GetObjects() []grpc.ObjectID {
+ if x != nil {
+ return x.Objects
+ }
+ return nil
+}
+func (x *ObjectSessionContext_Target) SetObjects(v []grpc.ObjectID) {
+ x.Objects = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ObjectSessionContext_Target) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ObjectSessionContext_Target) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"container\":"
+ out.RawString(prefix)
+ x.Container.MarshalEasyJSON(out)
+ }
+ {
+ 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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ObjectSessionContext_Target) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ObjectSessionContext_Target) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "container":
+ {
+ var f *grpc.ContainerID
+ f = new(grpc.ContainerID)
+ f.UnmarshalEasyJSON(in)
+ x.Container = f
+ }
+ case "objects":
+ {
+ var f grpc.ObjectID
+ var list []grpc.ObjectID
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = grpc.ObjectID{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Objects = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ObjectSessionContext struct {
+ Verb ObjectSessionContext_Verb `json:"verb"`
+ Target *ObjectSessionContext_Target `json:"target"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ObjectSessionContext)(nil)
+ _ encoding.ProtoUnmarshaler = (*ObjectSessionContext)(nil)
+ _ json.Marshaler = (*ObjectSessionContext)(nil)
+ _ json.Unmarshaler = (*ObjectSessionContext)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ObjectSessionContext) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.EnumSize(1, int32(x.Verb))
+ size += proto.NestedStructureSize(2, x.Target)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ObjectSessionContext) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ObjectSessionContext) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if int32(x.Verb) != 0 {
+ mm.AppendInt32(1, int32(x.Verb))
+ }
+ if x.Target != nil {
+ x.Target.EmitProtobuf(mm.AppendMessage(2))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ObjectSessionContext) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ObjectSessionContext")
+ }
+ switch fc.FieldNum {
+ case 1: // Verb
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Verb")
+ }
+ x.Verb = ObjectSessionContext_Verb(data)
+ case 2: // Target
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Target")
+ }
+ x.Target = new(ObjectSessionContext_Target)
+ if err := x.Target.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *ObjectSessionContext) GetVerb() ObjectSessionContext_Verb {
+ if x != nil {
+ return x.Verb
+ }
+ return 0
+}
+func (x *ObjectSessionContext) SetVerb(v ObjectSessionContext_Verb) {
+ x.Verb = v
+}
+func (x *ObjectSessionContext) GetTarget() *ObjectSessionContext_Target {
+ if x != nil {
+ return x.Target
+ }
+ return nil
+}
+func (x *ObjectSessionContext) SetTarget(v *ObjectSessionContext_Target) {
+ x.Target = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ObjectSessionContext) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ObjectSessionContext) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"target\":"
+ out.RawString(prefix)
+ x.Target.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ObjectSessionContext) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ObjectSessionContext) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "verb":
+ {
+ var f ObjectSessionContext_Verb
+ var parsedValue ObjectSessionContext_Verb
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := ObjectSessionContext_Verb_value[v]; ok {
+ parsedValue = ObjectSessionContext_Verb(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = ObjectSessionContext_Verb(vv)
+ case float64:
+ parsedValue = ObjectSessionContext_Verb(v)
+ }
+ f = parsedValue
+ x.Verb = f
+ }
+ case "target":
+ {
+ var f *ObjectSessionContext_Target
+ f = new(ObjectSessionContext_Target)
+ f.UnmarshalEasyJSON(in)
+ x.Target = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ContainerSessionContext_Verb int32
+
+const (
+ ContainerSessionContext_VERB_UNSPECIFIED ContainerSessionContext_Verb = 0
+ ContainerSessionContext_PUT ContainerSessionContext_Verb = 1
+ ContainerSessionContext_DELETE ContainerSessionContext_Verb = 2
+ ContainerSessionContext_SETEACL ContainerSessionContext_Verb = 3
+)
+
+var (
+ ContainerSessionContext_Verb_name = map[int32]string{
+ 0: "VERB_UNSPECIFIED",
+ 1: "PUT",
+ 2: "DELETE",
+ 3: "SETEACL",
+ }
+ ContainerSessionContext_Verb_value = map[string]int32{
+ "VERB_UNSPECIFIED": 0,
+ "PUT": 1,
+ "DELETE": 2,
+ "SETEACL": 3,
+ }
+)
+
+func (x ContainerSessionContext_Verb) String() string {
+ if v, ok := ContainerSessionContext_Verb_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *ContainerSessionContext_Verb) FromString(s string) bool {
+ if v, ok := ContainerSessionContext_Verb_value[s]; ok {
+ *x = ContainerSessionContext_Verb(v)
+ return true
+ }
+ return false
+}
+
+type ContainerSessionContext struct {
+ Verb ContainerSessionContext_Verb `json:"verb"`
+ Wildcard bool `json:"wildcard"`
+ ContainerId *grpc.ContainerID `json:"containerID"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ContainerSessionContext)(nil)
+ _ encoding.ProtoUnmarshaler = (*ContainerSessionContext)(nil)
+ _ json.Marshaler = (*ContainerSessionContext)(nil)
+ _ json.Unmarshaler = (*ContainerSessionContext)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ContainerSessionContext) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.EnumSize(1, int32(x.Verb))
+ size += proto.BoolSize(2, x.Wildcard)
+ size += proto.NestedStructureSize(3, x.ContainerId)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ContainerSessionContext) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ContainerSessionContext) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if int32(x.Verb) != 0 {
+ mm.AppendInt32(1, int32(x.Verb))
+ }
+ if x.Wildcard {
+ mm.AppendBool(2, x.Wildcard)
+ }
+ if x.ContainerId != nil {
+ x.ContainerId.EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ContainerSessionContext) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ContainerSessionContext")
+ }
+ switch fc.FieldNum {
+ case 1: // Verb
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Verb")
+ }
+ x.Verb = ContainerSessionContext_Verb(data)
+ case 2: // Wildcard
+ data, ok := fc.Bool()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Wildcard")
+ }
+ x.Wildcard = data
+ case 3: // ContainerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ContainerId")
+ }
+ x.ContainerId = new(grpc.ContainerID)
+ if err := x.ContainerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *ContainerSessionContext) GetVerb() ContainerSessionContext_Verb {
+ if x != nil {
+ return x.Verb
+ }
+ return 0
+}
+func (x *ContainerSessionContext) SetVerb(v ContainerSessionContext_Verb) {
+ x.Verb = v
+}
+func (x *ContainerSessionContext) GetWildcard() bool {
+ if x != nil {
+ return x.Wildcard
+ }
+ return false
+}
+func (x *ContainerSessionContext) SetWildcard(v bool) {
+ x.Wildcard = v
+}
+func (x *ContainerSessionContext) GetContainerId() *grpc.ContainerID {
+ if x != nil {
+ return x.ContainerId
+ }
+ return nil
+}
+func (x *ContainerSessionContext) SetContainerId(v *grpc.ContainerID) {
+ x.ContainerId = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ContainerSessionContext) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ContainerSessionContext) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"wildcard\":"
+ out.RawString(prefix)
+ out.Bool(x.Wildcard)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"containerID\":"
+ out.RawString(prefix)
+ x.ContainerId.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ContainerSessionContext) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ContainerSessionContext) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "verb":
+ {
+ var f ContainerSessionContext_Verb
+ var parsedValue ContainerSessionContext_Verb
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := ContainerSessionContext_Verb_value[v]; ok {
+ parsedValue = ContainerSessionContext_Verb(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = ContainerSessionContext_Verb(vv)
+ case float64:
+ parsedValue = ContainerSessionContext_Verb(v)
+ }
+ f = parsedValue
+ x.Verb = f
+ }
+ case "wildcard":
+ {
+ var f bool
+ f = in.Bool()
+ x.Wildcard = f
+ }
+ case "containerID":
+ {
+ var f *grpc.ContainerID
+ f = new(grpc.ContainerID)
+ f.UnmarshalEasyJSON(in)
+ x.ContainerId = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type SessionToken_Body_TokenLifetime struct {
+ Exp uint64 `json:"exp"`
+ Nbf uint64 `json:"nbf"`
+ Iat uint64 `json:"iat"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*SessionToken_Body_TokenLifetime)(nil)
+ _ encoding.ProtoUnmarshaler = (*SessionToken_Body_TokenLifetime)(nil)
+ _ json.Marshaler = (*SessionToken_Body_TokenLifetime)(nil)
+ _ json.Unmarshaler = (*SessionToken_Body_TokenLifetime)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *SessionToken_Body_TokenLifetime) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.UInt64Size(1, x.Exp)
+ size += proto.UInt64Size(2, x.Nbf)
+ size += proto.UInt64Size(3, x.Iat)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *SessionToken_Body_TokenLifetime) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *SessionToken_Body_TokenLifetime) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Exp != 0 {
+ mm.AppendUint64(1, x.Exp)
+ }
+ if x.Nbf != 0 {
+ mm.AppendUint64(2, x.Nbf)
+ }
+ if x.Iat != 0 {
+ mm.AppendUint64(3, x.Iat)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *SessionToken_Body_TokenLifetime) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "SessionToken_Body_TokenLifetime")
+ }
+ switch fc.FieldNum {
+ case 1: // Exp
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Exp")
+ }
+ x.Exp = data
+ case 2: // Nbf
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Nbf")
+ }
+ x.Nbf = data
+ case 3: // Iat
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Iat")
+ }
+ x.Iat = data
+ }
+ }
+ return nil
+}
+func (x *SessionToken_Body_TokenLifetime) GetExp() uint64 {
+ if x != nil {
+ return x.Exp
+ }
+ return 0
+}
+func (x *SessionToken_Body_TokenLifetime) SetExp(v uint64) {
+ x.Exp = v
+}
+func (x *SessionToken_Body_TokenLifetime) GetNbf() uint64 {
+ if x != nil {
+ return x.Nbf
+ }
+ return 0
+}
+func (x *SessionToken_Body_TokenLifetime) SetNbf(v uint64) {
+ x.Nbf = v
+}
+func (x *SessionToken_Body_TokenLifetime) GetIat() uint64 {
+ if x != nil {
+ return x.Iat
+ }
+ return 0
+}
+func (x *SessionToken_Body_TokenLifetime) SetIat(v uint64) {
+ x.Iat = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *SessionToken_Body_TokenLifetime) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *SessionToken_Body_TokenLifetime) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"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 = "\"iat\":"
+ out.RawString(prefix)
+ out.RawByte('"')
+ out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.Iat, 10)
+ out.RawByte('"')
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *SessionToken_Body_TokenLifetime) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *SessionToken_Body_TokenLifetime) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "exp":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.Exp = f
+ }
+ case "nbf":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.Nbf = f
+ }
+ case "iat":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.Iat = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type SessionToken_Body struct {
+ Id []byte `json:"id"`
+ OwnerId *grpc.OwnerID `json:"ownerID"`
+ Lifetime *SessionToken_Body_TokenLifetime `json:"lifetime"`
+ SessionKey []byte `json:"sessionKey"`
+ Context isSessionToken_Body_Context
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*SessionToken_Body)(nil)
+ _ encoding.ProtoUnmarshaler = (*SessionToken_Body)(nil)
+ _ json.Marshaler = (*SessionToken_Body)(nil)
+ _ json.Unmarshaler = (*SessionToken_Body)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *SessionToken_Body) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.BytesSize(1, x.Id)
+ size += proto.NestedStructureSize(2, x.OwnerId)
+ size += proto.NestedStructureSize(3, x.Lifetime)
+ size += proto.BytesSize(4, x.SessionKey)
+ if inner, ok := x.Context.(*SessionToken_Body_Object); ok {
+ size += proto.NestedStructureSize(5, inner.Object)
+ }
+ if inner, ok := x.Context.(*SessionToken_Body_Container); ok {
+ size += proto.NestedStructureSize(6, inner.Container)
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *SessionToken_Body) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *SessionToken_Body) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.Id) != 0 {
+ mm.AppendBytes(1, x.Id)
+ }
+ if x.OwnerId != nil {
+ x.OwnerId.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.Lifetime != nil {
+ x.Lifetime.EmitProtobuf(mm.AppendMessage(3))
+ }
+ if len(x.SessionKey) != 0 {
+ mm.AppendBytes(4, x.SessionKey)
+ }
+ if inner, ok := x.Context.(*SessionToken_Body_Object); ok {
+ if inner.Object != nil {
+ inner.Object.EmitProtobuf(mm.AppendMessage(5))
+ }
+ }
+ if inner, ok := x.Context.(*SessionToken_Body_Container); ok {
+ if inner.Container != nil {
+ inner.Container.EmitProtobuf(mm.AppendMessage(6))
+ }
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *SessionToken_Body) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "SessionToken_Body")
+ }
+ switch fc.FieldNum {
+ case 1: // Id
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Id")
+ }
+ x.Id = data
+ case 2: // OwnerId
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "OwnerId")
+ }
+ x.OwnerId = new(grpc.OwnerID)
+ if err := x.OwnerId.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // Lifetime
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Lifetime")
+ }
+ x.Lifetime = new(SessionToken_Body_TokenLifetime)
+ if err := x.Lifetime.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 4: // SessionKey
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "SessionKey")
+ }
+ x.SessionKey = data
+ case 5: // Object
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Object")
+ }
+ oneofField := &SessionToken_Body_Object{Object: new(ObjectSessionContext)}
+ if err := oneofField.Object.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ x.Context = oneofField
+ case 6: // Container
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Container")
+ }
+ oneofField := &SessionToken_Body_Container{Container: new(ContainerSessionContext)}
+ if err := oneofField.Container.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ x.Context = oneofField
+ }
+ }
+ return nil
+}
+func (x *SessionToken_Body) GetId() []byte {
+ if x != nil {
+ return x.Id
+ }
+ return nil
+}
+func (x *SessionToken_Body) SetId(v []byte) {
+ x.Id = v
+}
+func (x *SessionToken_Body) GetOwnerId() *grpc.OwnerID {
+ if x != nil {
+ return x.OwnerId
+ }
+ return nil
+}
+func (x *SessionToken_Body) SetOwnerId(v *grpc.OwnerID) {
+ x.OwnerId = v
+}
+func (x *SessionToken_Body) GetLifetime() *SessionToken_Body_TokenLifetime {
+ if x != nil {
+ return x.Lifetime
+ }
+ return nil
+}
+func (x *SessionToken_Body) SetLifetime(v *SessionToken_Body_TokenLifetime) {
+ x.Lifetime = v
+}
+func (x *SessionToken_Body) GetSessionKey() []byte {
+ if x != nil {
+ return x.SessionKey
+ }
+ return nil
+}
+func (x *SessionToken_Body) SetSessionKey(v []byte) {
+ x.SessionKey = v
+}
+func (x *SessionToken_Body) GetContext() isSessionToken_Body_Context {
+ if x != nil {
+ return x.Context
+ }
+ return nil
+}
+func (x *SessionToken_Body) SetContext(v isSessionToken_Body_Context) {
+ x.Context = v
+}
+func (x *SessionToken_Body) GetObject() *ObjectSessionContext {
+ if xx, ok := x.GetContext().(*SessionToken_Body_Object); ok {
+ return xx.Object
+ }
+ return nil
+}
+func (x *SessionToken_Body) SetObject(v *ObjectSessionContext) {
+ x.Context = &SessionToken_Body_Object{Object: v}
+}
+func (x *SessionToken_Body) GetContainer() *ContainerSessionContext {
+ if xx, ok := x.GetContext().(*SessionToken_Body_Container); ok {
+ return xx.Container
+ }
+ return nil
+}
+func (x *SessionToken_Body) SetContainer(v *ContainerSessionContext) {
+ x.Context = &SessionToken_Body_Container{Container: v}
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *SessionToken_Body) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *SessionToken_Body) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"id\":"
+ out.RawString(prefix)
+ if x.Id != nil {
+ out.Base64Bytes(x.Id)
+ } else {
+ out.String("")
+ }
+ }
+ {
+ 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 = "\"lifetime\":"
+ out.RawString(prefix)
+ x.Lifetime.MarshalEasyJSON(out)
+ }
+ {
+ 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 !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"object\":"
+ out.RawString(prefix)
+ xx.Object.MarshalEasyJSON(out)
+ }
+ case *SessionToken_Body_Container:
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"container\":"
+ out.RawString(prefix)
+ xx.Container.MarshalEasyJSON(out)
+ }
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *SessionToken_Body) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *SessionToken_Body) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "id":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Id = f
+ }
+ case "ownerID":
+ {
+ var f *grpc.OwnerID
+ f = new(grpc.OwnerID)
+ f.UnmarshalEasyJSON(in)
+ x.OwnerId = f
+ }
+ case "lifetime":
+ {
+ var f *SessionToken_Body_TokenLifetime
+ f = new(SessionToken_Body_TokenLifetime)
+ f.UnmarshalEasyJSON(in)
+ x.Lifetime = f
+ }
+ case "sessionKey":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.SessionKey = f
+ }
+ case "object":
+ xx := new(SessionToken_Body_Object)
+ x.Context = xx
+ {
+ var f *ObjectSessionContext
+ f = new(ObjectSessionContext)
+ f.UnmarshalEasyJSON(in)
+ xx.Object = f
+ }
+ case "container":
+ xx := new(SessionToken_Body_Container)
+ x.Context = xx
+ {
+ var f *ContainerSessionContext
+ f = new(ContainerSessionContext)
+ f.UnmarshalEasyJSON(in)
+ xx.Container = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type isSessionToken_Body_Context interface {
+ isSessionToken_Body_Context()
+}
+
+type SessionToken_Body_Object struct {
+ Object *ObjectSessionContext
+}
+
+type SessionToken_Body_Container struct {
+ Container *ContainerSessionContext
+}
+
+func (*SessionToken_Body_Object) isSessionToken_Body_Context() {}
+
+func (*SessionToken_Body_Container) isSessionToken_Body_Context() {}
+
+type SessionToken struct {
+ Body *SessionToken_Body `json:"body"`
+ Signature *grpc.Signature `json:"signature"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*SessionToken)(nil)
+ _ encoding.ProtoUnmarshaler = (*SessionToken)(nil)
+ _ json.Marshaler = (*SessionToken)(nil)
+ _ json.Unmarshaler = (*SessionToken)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *SessionToken) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Body)
+ size += proto.NestedStructureSize(2, x.Signature)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *SessionToken) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *SessionToken) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Body != nil {
+ x.Body.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Signature != nil {
+ x.Signature.EmitProtobuf(mm.AppendMessage(2))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *SessionToken) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "SessionToken")
+ }
+ switch fc.FieldNum {
+ case 1: // Body
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Body")
+ }
+ x.Body = new(SessionToken_Body)
+ if err := x.Body.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Signature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Signature")
+ }
+ x.Signature = new(grpc.Signature)
+ if err := x.Signature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *SessionToken) GetBody() *SessionToken_Body {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+func (x *SessionToken) SetBody(v *SessionToken_Body) {
+ x.Body = v
+}
+func (x *SessionToken) GetSignature() *grpc.Signature {
+ if x != nil {
+ return x.Signature
+ }
+ return nil
+}
+func (x *SessionToken) SetSignature(v *grpc.Signature) {
+ x.Signature = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *SessionToken) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *SessionToken) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"body\":"
+ out.RawString(prefix)
+ x.Body.MarshalEasyJSON(out)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"signature\":"
+ out.RawString(prefix)
+ x.Signature.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *SessionToken) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *SessionToken) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "body":
+ {
+ var f *SessionToken_Body
+ f = new(SessionToken_Body)
+ f.UnmarshalEasyJSON(in)
+ x.Body = f
+ }
+ case "signature":
+ {
+ var f *grpc.Signature
+ f = new(grpc.Signature)
+ f.UnmarshalEasyJSON(in)
+ x.Signature = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type XHeader struct {
+ Key string `json:"key"`
+ Value string `json:"value"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*XHeader)(nil)
+ _ encoding.ProtoUnmarshaler = (*XHeader)(nil)
+ _ json.Marshaler = (*XHeader)(nil)
+ _ json.Unmarshaler = (*XHeader)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *XHeader) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.StringSize(1, x.Key)
+ size += proto.StringSize(2, x.Value)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *XHeader) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *XHeader) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.Key) != 0 {
+ mm.AppendString(1, x.Key)
+ }
+ if len(x.Value) != 0 {
+ mm.AppendString(2, x.Value)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *XHeader) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "XHeader")
+ }
+ switch fc.FieldNum {
+ case 1: // Key
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Key")
+ }
+ x.Key = data
+ case 2: // Value
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Value")
+ }
+ x.Value = data
+ }
+ }
+ return nil
+}
+func (x *XHeader) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+func (x *XHeader) SetKey(v string) {
+ x.Key = v
+}
+func (x *XHeader) GetValue() string {
+ if x != nil {
+ return x.Value
+ }
+ return ""
+}
+func (x *XHeader) SetValue(v string) {
+ x.Value = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *XHeader) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *XHeader) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *XHeader) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *XHeader) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "key":
+ {
+ var f string
+ f = in.String()
+ x.Key = f
+ }
+ case "value":
+ {
+ var f string
+ f = in.String()
+ x.Value = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type RequestMetaHeader struct {
+ Version *grpc.Version `json:"version"`
+ Epoch uint64 `json:"epoch"`
+ Ttl uint32 `json:"ttl"`
+ XHeaders []XHeader `json:"xHeaders"`
+ SessionToken *SessionToken `json:"sessionToken"`
+ BearerToken *grpc1.BearerToken `json:"bearerToken"`
+ Origin *RequestMetaHeader `json:"origin"`
+ MagicNumber uint64 `json:"magicNumber"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*RequestMetaHeader)(nil)
+ _ encoding.ProtoUnmarshaler = (*RequestMetaHeader)(nil)
+ _ json.Marshaler = (*RequestMetaHeader)(nil)
+ _ json.Unmarshaler = (*RequestMetaHeader)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *RequestMetaHeader) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Version)
+ size += proto.UInt64Size(2, x.Epoch)
+ size += proto.UInt32Size(3, x.Ttl)
+ for i := range x.XHeaders {
+ size += proto.NestedStructureSizeUnchecked(4, &x.XHeaders[i])
+ }
+ size += proto.NestedStructureSize(5, x.SessionToken)
+ size += proto.NestedStructureSize(6, x.BearerToken)
+ size += proto.NestedStructureSize(7, x.Origin)
+ size += proto.UInt64Size(8, x.MagicNumber)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *RequestMetaHeader) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *RequestMetaHeader) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Version != nil {
+ x.Version.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Epoch != 0 {
+ mm.AppendUint64(2, x.Epoch)
+ }
+ if x.Ttl != 0 {
+ mm.AppendUint32(3, x.Ttl)
+ }
+ for i := range x.XHeaders {
+ x.XHeaders[i].EmitProtobuf(mm.AppendMessage(4))
+ }
+ if x.SessionToken != nil {
+ x.SessionToken.EmitProtobuf(mm.AppendMessage(5))
+ }
+ if x.BearerToken != nil {
+ x.BearerToken.EmitProtobuf(mm.AppendMessage(6))
+ }
+ if x.Origin != nil {
+ x.Origin.EmitProtobuf(mm.AppendMessage(7))
+ }
+ if x.MagicNumber != 0 {
+ mm.AppendUint64(8, x.MagicNumber)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *RequestMetaHeader) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "RequestMetaHeader")
+ }
+ switch fc.FieldNum {
+ case 1: // Version
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Version")
+ }
+ x.Version = new(grpc.Version)
+ if err := x.Version.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Epoch
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Epoch")
+ }
+ x.Epoch = data
+ case 3: // Ttl
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Ttl")
+ }
+ x.Ttl = data
+ case 4: // XHeaders
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "XHeaders")
+ }
+ x.XHeaders = append(x.XHeaders, XHeader{})
+ ff := &x.XHeaders[len(x.XHeaders)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 5: // SessionToken
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "SessionToken")
+ }
+ x.SessionToken = new(SessionToken)
+ if err := x.SessionToken.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 6: // BearerToken
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "BearerToken")
+ }
+ x.BearerToken = new(grpc1.BearerToken)
+ if err := x.BearerToken.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 7: // Origin
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Origin")
+ }
+ x.Origin = new(RequestMetaHeader)
+ if err := x.Origin.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 8: // MagicNumber
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MagicNumber")
+ }
+ x.MagicNumber = data
+ }
+ }
+ return nil
+}
+func (x *RequestMetaHeader) GetVersion() *grpc.Version {
+ if x != nil {
+ return x.Version
+ }
+ return nil
+}
+func (x *RequestMetaHeader) SetVersion(v *grpc.Version) {
+ x.Version = v
+}
+func (x *RequestMetaHeader) GetEpoch() uint64 {
+ if x != nil {
+ return x.Epoch
+ }
+ return 0
+}
+func (x *RequestMetaHeader) SetEpoch(v uint64) {
+ x.Epoch = v
+}
+func (x *RequestMetaHeader) GetTtl() uint32 {
+ if x != nil {
+ return x.Ttl
+ }
+ return 0
+}
+func (x *RequestMetaHeader) SetTtl(v uint32) {
+ x.Ttl = v
+}
+func (x *RequestMetaHeader) GetXHeaders() []XHeader {
+ if x != nil {
+ return x.XHeaders
+ }
+ return nil
+}
+func (x *RequestMetaHeader) SetXHeaders(v []XHeader) {
+ x.XHeaders = v
+}
+func (x *RequestMetaHeader) GetSessionToken() *SessionToken {
+ if x != nil {
+ return x.SessionToken
+ }
+ return nil
+}
+func (x *RequestMetaHeader) SetSessionToken(v *SessionToken) {
+ x.SessionToken = v
+}
+func (x *RequestMetaHeader) GetBearerToken() *grpc1.BearerToken {
+ if x != nil {
+ return x.BearerToken
+ }
+ return nil
+}
+func (x *RequestMetaHeader) SetBearerToken(v *grpc1.BearerToken) {
+ x.BearerToken = v
+}
+func (x *RequestMetaHeader) GetOrigin() *RequestMetaHeader {
+ if x != nil {
+ return x.Origin
+ }
+ return nil
+}
+func (x *RequestMetaHeader) SetOrigin(v *RequestMetaHeader) {
+ x.Origin = v
+}
+func (x *RequestMetaHeader) GetMagicNumber() uint64 {
+ if x != nil {
+ return x.MagicNumber
+ }
+ return 0
+}
+func (x *RequestMetaHeader) SetMagicNumber(v uint64) {
+ x.MagicNumber = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *RequestMetaHeader) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *RequestMetaHeader) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"version\":"
+ out.RawString(prefix)
+ x.Version.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"ttl\":"
+ out.RawString(prefix)
+ out.Uint32(x.Ttl)
+ }
+ {
+ 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 = "\"sessionToken\":"
+ out.RawString(prefix)
+ x.SessionToken.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"origin\":"
+ out.RawString(prefix)
+ x.Origin.MarshalEasyJSON(out)
+ }
+ {
+ 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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *RequestMetaHeader) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *RequestMetaHeader) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "version":
+ {
+ var f *grpc.Version
+ f = new(grpc.Version)
+ f.UnmarshalEasyJSON(in)
+ x.Version = f
+ }
+ case "epoch":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.Epoch = f
+ }
+ case "ttl":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.Ttl = f
+ }
+ case "xHeaders":
+ {
+ var f XHeader
+ var list []XHeader
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = XHeader{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.XHeaders = list
+ in.Delim(']')
+ }
+ case "sessionToken":
+ {
+ var f *SessionToken
+ f = new(SessionToken)
+ f.UnmarshalEasyJSON(in)
+ x.SessionToken = f
+ }
+ case "bearerToken":
+ {
+ var f *grpc1.BearerToken
+ f = new(grpc1.BearerToken)
+ f.UnmarshalEasyJSON(in)
+ x.BearerToken = f
+ }
+ case "origin":
+ {
+ var f *RequestMetaHeader
+ f = new(RequestMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.Origin = f
+ }
+ case "magicNumber":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.MagicNumber = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ResponseMetaHeader struct {
+ Version *grpc.Version `json:"version"`
+ Epoch uint64 `json:"epoch"`
+ Ttl uint32 `json:"ttl"`
+ XHeaders []XHeader `json:"xHeaders"`
+ Origin *ResponseMetaHeader `json:"origin"`
+ Status *grpc2.Status `json:"status"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ResponseMetaHeader)(nil)
+ _ encoding.ProtoUnmarshaler = (*ResponseMetaHeader)(nil)
+ _ json.Marshaler = (*ResponseMetaHeader)(nil)
+ _ json.Unmarshaler = (*ResponseMetaHeader)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ResponseMetaHeader) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.Version)
+ size += proto.UInt64Size(2, x.Epoch)
+ size += proto.UInt32Size(3, x.Ttl)
+ for i := range x.XHeaders {
+ size += proto.NestedStructureSizeUnchecked(4, &x.XHeaders[i])
+ }
+ size += proto.NestedStructureSize(5, x.Origin)
+ size += proto.NestedStructureSize(6, x.Status)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ResponseMetaHeader) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ResponseMetaHeader) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Version != nil {
+ x.Version.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.Epoch != 0 {
+ mm.AppendUint64(2, x.Epoch)
+ }
+ if x.Ttl != 0 {
+ mm.AppendUint32(3, x.Ttl)
+ }
+ for i := range x.XHeaders {
+ x.XHeaders[i].EmitProtobuf(mm.AppendMessage(4))
+ }
+ if x.Origin != nil {
+ x.Origin.EmitProtobuf(mm.AppendMessage(5))
+ }
+ if x.Status != nil {
+ x.Status.EmitProtobuf(mm.AppendMessage(6))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ResponseMetaHeader) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ResponseMetaHeader")
+ }
+ switch fc.FieldNum {
+ case 1: // Version
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Version")
+ }
+ x.Version = new(grpc.Version)
+ if err := x.Version.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // Epoch
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Epoch")
+ }
+ x.Epoch = data
+ case 3: // Ttl
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Ttl")
+ }
+ x.Ttl = data
+ case 4: // XHeaders
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "XHeaders")
+ }
+ x.XHeaders = append(x.XHeaders, XHeader{})
+ ff := &x.XHeaders[len(x.XHeaders)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 5: // Origin
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Origin")
+ }
+ x.Origin = new(ResponseMetaHeader)
+ if err := x.Origin.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 6: // Status
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Status")
+ }
+ x.Status = new(grpc2.Status)
+ if err := x.Status.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *ResponseMetaHeader) GetVersion() *grpc.Version {
+ if x != nil {
+ return x.Version
+ }
+ return nil
+}
+func (x *ResponseMetaHeader) SetVersion(v *grpc.Version) {
+ x.Version = v
+}
+func (x *ResponseMetaHeader) GetEpoch() uint64 {
+ if x != nil {
+ return x.Epoch
+ }
+ return 0
+}
+func (x *ResponseMetaHeader) SetEpoch(v uint64) {
+ x.Epoch = v
+}
+func (x *ResponseMetaHeader) GetTtl() uint32 {
+ if x != nil {
+ return x.Ttl
+ }
+ return 0
+}
+func (x *ResponseMetaHeader) SetTtl(v uint32) {
+ x.Ttl = v
+}
+func (x *ResponseMetaHeader) GetXHeaders() []XHeader {
+ if x != nil {
+ return x.XHeaders
+ }
+ return nil
+}
+func (x *ResponseMetaHeader) SetXHeaders(v []XHeader) {
+ x.XHeaders = v
+}
+func (x *ResponseMetaHeader) GetOrigin() *ResponseMetaHeader {
+ if x != nil {
+ return x.Origin
+ }
+ return nil
+}
+func (x *ResponseMetaHeader) SetOrigin(v *ResponseMetaHeader) {
+ x.Origin = v
+}
+func (x *ResponseMetaHeader) GetStatus() *grpc2.Status {
+ if x != nil {
+ return x.Status
+ }
+ return nil
+}
+func (x *ResponseMetaHeader) SetStatus(v *grpc2.Status) {
+ x.Status = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ResponseMetaHeader) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ResponseMetaHeader) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"version\":"
+ out.RawString(prefix)
+ x.Version.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"ttl\":"
+ out.RawString(prefix)
+ out.Uint32(x.Ttl)
+ }
+ {
+ 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 = "\"origin\":"
+ out.RawString(prefix)
+ x.Origin.MarshalEasyJSON(out)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"status\":"
+ out.RawString(prefix)
+ x.Status.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ResponseMetaHeader) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ResponseMetaHeader) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "version":
+ {
+ var f *grpc.Version
+ f = new(grpc.Version)
+ f.UnmarshalEasyJSON(in)
+ x.Version = f
+ }
+ case "epoch":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.Epoch = f
+ }
+ case "ttl":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.Ttl = f
+ }
+ case "xHeaders":
+ {
+ var f XHeader
+ var list []XHeader
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = XHeader{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.XHeaders = list
+ in.Delim(']')
+ }
+ case "origin":
+ {
+ var f *ResponseMetaHeader
+ f = new(ResponseMetaHeader)
+ f.UnmarshalEasyJSON(in)
+ x.Origin = f
+ }
+ case "status":
+ {
+ var f *grpc2.Status
+ f = new(grpc2.Status)
+ f.UnmarshalEasyJSON(in)
+ x.Status = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type RequestVerificationHeader struct {
+ BodySignature *grpc.Signature `json:"bodySignature"`
+ MetaSignature *grpc.Signature `json:"metaSignature"`
+ OriginSignature *grpc.Signature `json:"originSignature"`
+ Origin *RequestVerificationHeader `json:"origin"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*RequestVerificationHeader)(nil)
+ _ encoding.ProtoUnmarshaler = (*RequestVerificationHeader)(nil)
+ _ json.Marshaler = (*RequestVerificationHeader)(nil)
+ _ json.Unmarshaler = (*RequestVerificationHeader)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *RequestVerificationHeader) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.BodySignature)
+ size += proto.NestedStructureSize(2, x.MetaSignature)
+ size += proto.NestedStructureSize(3, x.OriginSignature)
+ size += proto.NestedStructureSize(4, x.Origin)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *RequestVerificationHeader) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *RequestVerificationHeader) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.BodySignature != nil {
+ x.BodySignature.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaSignature != nil {
+ x.MetaSignature.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.OriginSignature != nil {
+ x.OriginSignature.EmitProtobuf(mm.AppendMessage(3))
+ }
+ if x.Origin != nil {
+ x.Origin.EmitProtobuf(mm.AppendMessage(4))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *RequestVerificationHeader) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "RequestVerificationHeader")
+ }
+ switch fc.FieldNum {
+ case 1: // BodySignature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "BodySignature")
+ }
+ x.BodySignature = new(grpc.Signature)
+ if err := x.BodySignature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaSignature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaSignature")
+ }
+ x.MetaSignature = new(grpc.Signature)
+ if err := x.MetaSignature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // OriginSignature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "OriginSignature")
+ }
+ x.OriginSignature = new(grpc.Signature)
+ if err := x.OriginSignature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 4: // Origin
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Origin")
+ }
+ x.Origin = new(RequestVerificationHeader)
+ if err := x.Origin.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *RequestVerificationHeader) GetBodySignature() *grpc.Signature {
+ if x != nil {
+ return x.BodySignature
+ }
+ return nil
+}
+func (x *RequestVerificationHeader) SetBodySignature(v *grpc.Signature) {
+ x.BodySignature = v
+}
+func (x *RequestVerificationHeader) GetMetaSignature() *grpc.Signature {
+ if x != nil {
+ return x.MetaSignature
+ }
+ return nil
+}
+func (x *RequestVerificationHeader) SetMetaSignature(v *grpc.Signature) {
+ x.MetaSignature = v
+}
+func (x *RequestVerificationHeader) GetOriginSignature() *grpc.Signature {
+ if x != nil {
+ return x.OriginSignature
+ }
+ return nil
+}
+func (x *RequestVerificationHeader) SetOriginSignature(v *grpc.Signature) {
+ x.OriginSignature = v
+}
+func (x *RequestVerificationHeader) GetOrigin() *RequestVerificationHeader {
+ if x != nil {
+ return x.Origin
+ }
+ return nil
+}
+func (x *RequestVerificationHeader) SetOrigin(v *RequestVerificationHeader) {
+ x.Origin = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *RequestVerificationHeader) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *RequestVerificationHeader) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"bodySignature\":"
+ out.RawString(prefix)
+ x.BodySignature.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"originSignature\":"
+ out.RawString(prefix)
+ x.OriginSignature.MarshalEasyJSON(out)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"origin\":"
+ out.RawString(prefix)
+ x.Origin.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *RequestVerificationHeader) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *RequestVerificationHeader) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "bodySignature":
+ {
+ var f *grpc.Signature
+ f = new(grpc.Signature)
+ f.UnmarshalEasyJSON(in)
+ x.BodySignature = f
+ }
+ case "metaSignature":
+ {
+ var f *grpc.Signature
+ f = new(grpc.Signature)
+ f.UnmarshalEasyJSON(in)
+ x.MetaSignature = f
+ }
+ case "originSignature":
+ {
+ var f *grpc.Signature
+ f = new(grpc.Signature)
+ f.UnmarshalEasyJSON(in)
+ x.OriginSignature = f
+ }
+ case "origin":
+ {
+ var f *RequestVerificationHeader
+ f = new(RequestVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.Origin = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type ResponseVerificationHeader struct {
+ BodySignature *grpc.Signature `json:"bodySignature"`
+ MetaSignature *grpc.Signature `json:"metaSignature"`
+ OriginSignature *grpc.Signature `json:"originSignature"`
+ Origin *ResponseVerificationHeader `json:"origin"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*ResponseVerificationHeader)(nil)
+ _ encoding.ProtoUnmarshaler = (*ResponseVerificationHeader)(nil)
+ _ json.Marshaler = (*ResponseVerificationHeader)(nil)
+ _ json.Unmarshaler = (*ResponseVerificationHeader)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *ResponseVerificationHeader) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.NestedStructureSize(1, x.BodySignature)
+ size += proto.NestedStructureSize(2, x.MetaSignature)
+ size += proto.NestedStructureSize(3, x.OriginSignature)
+ size += proto.NestedStructureSize(4, x.Origin)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *ResponseVerificationHeader) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *ResponseVerificationHeader) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.BodySignature != nil {
+ x.BodySignature.EmitProtobuf(mm.AppendMessage(1))
+ }
+ if x.MetaSignature != nil {
+ x.MetaSignature.EmitProtobuf(mm.AppendMessage(2))
+ }
+ if x.OriginSignature != nil {
+ x.OriginSignature.EmitProtobuf(mm.AppendMessage(3))
+ }
+ if x.Origin != nil {
+ x.Origin.EmitProtobuf(mm.AppendMessage(4))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *ResponseVerificationHeader) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "ResponseVerificationHeader")
+ }
+ switch fc.FieldNum {
+ case 1: // BodySignature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "BodySignature")
+ }
+ x.BodySignature = new(grpc.Signature)
+ if err := x.BodySignature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 2: // MetaSignature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "MetaSignature")
+ }
+ x.MetaSignature = new(grpc.Signature)
+ if err := x.MetaSignature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 3: // OriginSignature
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "OriginSignature")
+ }
+ x.OriginSignature = new(grpc.Signature)
+ if err := x.OriginSignature.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ case 4: // Origin
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Origin")
+ }
+ x.Origin = new(ResponseVerificationHeader)
+ if err := x.Origin.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *ResponseVerificationHeader) GetBodySignature() *grpc.Signature {
+ if x != nil {
+ return x.BodySignature
+ }
+ return nil
+}
+func (x *ResponseVerificationHeader) SetBodySignature(v *grpc.Signature) {
+ x.BodySignature = v
+}
+func (x *ResponseVerificationHeader) GetMetaSignature() *grpc.Signature {
+ if x != nil {
+ return x.MetaSignature
+ }
+ return nil
+}
+func (x *ResponseVerificationHeader) SetMetaSignature(v *grpc.Signature) {
+ x.MetaSignature = v
+}
+func (x *ResponseVerificationHeader) GetOriginSignature() *grpc.Signature {
+ if x != nil {
+ return x.OriginSignature
+ }
+ return nil
+}
+func (x *ResponseVerificationHeader) SetOriginSignature(v *grpc.Signature) {
+ x.OriginSignature = v
+}
+func (x *ResponseVerificationHeader) GetOrigin() *ResponseVerificationHeader {
+ if x != nil {
+ return x.Origin
+ }
+ return nil
+}
+func (x *ResponseVerificationHeader) SetOrigin(v *ResponseVerificationHeader) {
+ x.Origin = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *ResponseVerificationHeader) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *ResponseVerificationHeader) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"bodySignature\":"
+ out.RawString(prefix)
+ x.BodySignature.MarshalEasyJSON(out)
+ }
+ {
+ 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 = "\"originSignature\":"
+ out.RawString(prefix)
+ x.OriginSignature.MarshalEasyJSON(out)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"origin\":"
+ out.RawString(prefix)
+ x.Origin.MarshalEasyJSON(out)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *ResponseVerificationHeader) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *ResponseVerificationHeader) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "bodySignature":
+ {
+ var f *grpc.Signature
+ f = new(grpc.Signature)
+ f.UnmarshalEasyJSON(in)
+ x.BodySignature = f
+ }
+ case "metaSignature":
+ {
+ var f *grpc.Signature
+ f = new(grpc.Signature)
+ f.UnmarshalEasyJSON(in)
+ x.MetaSignature = f
+ }
+ case "originSignature":
+ {
+ var f *grpc.Signature
+ f = new(grpc.Signature)
+ f.UnmarshalEasyJSON(in)
+ x.OriginSignature = f
+ }
+ case "origin":
+ {
+ var f *ResponseVerificationHeader
+ f = new(ResponseVerificationHeader)
+ f.UnmarshalEasyJSON(in)
+ x.Origin = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/session/grpc/types_frostfs_fuzz.go b/api/session/grpc/types_frostfs_fuzz.go
new file mode 100644
index 0000000..fae4a05
--- /dev/null
+++ b/api/session/grpc/types_frostfs_fuzz.go
@@ -0,0 +1,159 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package session
+
+func DoFuzzProtoObjectSessionContext(data []byte) int {
+ msg := new(ObjectSessionContext)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONObjectSessionContext(data []byte) int {
+ msg := new(ObjectSessionContext)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoContainerSessionContext(data []byte) int {
+ msg := new(ContainerSessionContext)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONContainerSessionContext(data []byte) int {
+ msg := new(ContainerSessionContext)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoSessionToken(data []byte) int {
+ msg := new(SessionToken)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONSessionToken(data []byte) int {
+ msg := new(SessionToken)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoXHeader(data []byte) int {
+ msg := new(XHeader)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONXHeader(data []byte) int {
+ msg := new(XHeader)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoRequestMetaHeader(data []byte) int {
+ msg := new(RequestMetaHeader)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONRequestMetaHeader(data []byte) int {
+ msg := new(RequestMetaHeader)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoResponseMetaHeader(data []byte) int {
+ msg := new(ResponseMetaHeader)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONResponseMetaHeader(data []byte) int {
+ msg := new(ResponseMetaHeader)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoRequestVerificationHeader(data []byte) int {
+ msg := new(RequestVerificationHeader)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONRequestVerificationHeader(data []byte) int {
+ msg := new(RequestVerificationHeader)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
+func DoFuzzProtoResponseVerificationHeader(data []byte) int {
+ msg := new(ResponseVerificationHeader)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONResponseVerificationHeader(data []byte) int {
+ msg := new(ResponseVerificationHeader)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/session/grpc/types_frostfs_test.go b/api/session/grpc/types_frostfs_test.go
new file mode 100644
index 0000000..5c9b6c2
--- /dev/null
+++ b/api/session/grpc/types_frostfs_test.go
@@ -0,0 +1,91 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package session
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoObjectSessionContext(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoObjectSessionContext(data)
+ })
+}
+func FuzzJSONObjectSessionContext(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONObjectSessionContext(data)
+ })
+}
+func FuzzProtoContainerSessionContext(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoContainerSessionContext(data)
+ })
+}
+func FuzzJSONContainerSessionContext(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONContainerSessionContext(data)
+ })
+}
+func FuzzProtoSessionToken(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoSessionToken(data)
+ })
+}
+func FuzzJSONSessionToken(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONSessionToken(data)
+ })
+}
+func FuzzProtoXHeader(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoXHeader(data)
+ })
+}
+func FuzzJSONXHeader(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONXHeader(data)
+ })
+}
+func FuzzProtoRequestMetaHeader(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoRequestMetaHeader(data)
+ })
+}
+func FuzzJSONRequestMetaHeader(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONRequestMetaHeader(data)
+ })
+}
+func FuzzProtoResponseMetaHeader(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoResponseMetaHeader(data)
+ })
+}
+func FuzzJSONResponseMetaHeader(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONResponseMetaHeader(data)
+ })
+}
+func FuzzProtoRequestVerificationHeader(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoRequestVerificationHeader(data)
+ })
+}
+func FuzzJSONRequestVerificationHeader(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONRequestVerificationHeader(data)
+ })
+}
+func FuzzProtoResponseVerificationHeader(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoResponseVerificationHeader(data)
+ })
+}
+func FuzzJSONResponseVerificationHeader(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONResponseVerificationHeader(data)
+ })
+}
diff --git a/api/session/json.go b/api/session/json.go
new file mode 100644
index 0000000..92602ea
--- /dev/null
+++ b/api/session/json.go
@@ -0,0 +1,86 @@
+package session
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/grpc"
+)
+
+func (c *ObjectSessionContext) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(c)
+}
+
+func (c *ObjectSessionContext) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(c, data, new(session.ObjectSessionContext))
+}
+
+func (l *TokenLifetime) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(l)
+}
+
+func (l *TokenLifetime) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(l, data, new(session.SessionToken_Body_TokenLifetime))
+}
+
+func (t *TokenBody) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(t)
+}
+
+func (t *TokenBody) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(t, data, new(session.SessionToken_Body))
+}
+
+func (t *Token) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(t)
+}
+
+func (t *Token) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(t, data, new(session.SessionToken))
+}
+
+func (x *XHeader) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(x)
+}
+
+func (x *XHeader) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(x, data, new(session.XHeader))
+}
+
+func (r *RequestMetaHeader) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(r)
+}
+
+func (r *RequestMetaHeader) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(r, data, new(session.RequestMetaHeader))
+}
+
+func (r *RequestVerificationHeader) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(r)
+}
+
+func (r *RequestVerificationHeader) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(r, data, new(session.RequestVerificationHeader))
+}
+
+func (r *ResponseMetaHeader) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(r)
+}
+
+func (r *ResponseMetaHeader) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(r, data, new(session.ResponseMetaHeader))
+}
+
+func (r *ResponseVerificationHeader) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(r)
+}
+
+func (r *ResponseVerificationHeader) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(r, data, new(session.ResponseVerificationHeader))
+}
+
+func (x *ContainerSessionContext) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(x)
+}
+
+func (x *ContainerSessionContext) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(x, data, new(session.ContainerSessionContext))
+}
diff --git a/api/session/marshal.go b/api/session/marshal.go
new file mode 100644
index 0000000..d4838b2
--- /dev/null
+++ b/api/session/marshal.go
@@ -0,0 +1,536 @@
+package session
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+)
+
+const (
+ createReqBodyOwnerField = 1
+ createReqBodyExpirationField = 2
+
+ createRespBodyIDField = 1
+ createRespBodyKeyField = 2
+
+ xheaderKeyField = 1
+ xheaderValueField = 2
+
+ lifetimeExpirationField = 1
+ lifetimeNotValidBeforeField = 2
+ lifetimeIssuedAtField = 3
+
+ objectCtxVerbField = 1
+ objectCtxTargetField = 2
+
+ sessionTokenBodyIDField = 1
+ sessionTokenBodyOwnerField = 2
+ sessionTokenBodyLifetimeField = 3
+ sessionTokenBodyKeyField = 4
+ sessionTokenBodyObjectCtxField = 5
+ sessionTokenBodyCnrCtxField = 6
+
+ sessionTokenBodyField = 1
+ sessionTokenSignatureField = 2
+
+ reqMetaHeaderVersionField = 1
+ reqMetaHeaderEpochField = 2
+ reqMetaHeaderTTLField = 3
+ reqMetaHeaderXHeadersField = 4
+ reqMetaHeaderSessionTokenField = 5
+ reqMetaHeaderBearerTokenField = 6
+ reqMetaHeaderOriginField = 7
+ reqMetaHeaderNetMagicField = 8
+
+ reqVerifHeaderBodySignatureField = 1
+ reqVerifHeaderMetaSignatureField = 2
+ reqVerifHeaderOriginSignatureField = 3
+ reqVerifHeaderOriginField = 4
+
+ respMetaHeaderVersionField = 1
+ respMetaHeaderEpochField = 2
+ respMetaHeaderTTLField = 3
+ respMetaHeaderXHeadersField = 4
+ respMetaHeaderOriginField = 5
+ respMetaHeaderStatusField = 6
+
+ respVerifHeaderBodySignatureField = 1
+ respVerifHeaderMetaSignatureField = 2
+ respVerifHeaderOriginSignatureField = 3
+ respVerifHeaderOriginField = 4
+)
+
+func (c *CreateRequestBody) StableMarshal(buf []byte) []byte {
+ if c == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, c.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(createReqBodyOwnerField, buf[offset:], c.ownerID)
+ proto.UInt64Marshal(createReqBodyExpirationField, buf[offset:], c.expiration)
+
+ return buf
+}
+
+func (c *CreateRequestBody) StableSize() (size int) {
+ if c == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(createReqBodyOwnerField, c.ownerID)
+ size += proto.UInt64Size(createReqBodyExpirationField, c.expiration)
+
+ return size
+}
+
+func (c *CreateRequestBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(c, data, new(session.CreateRequest_Body))
+}
+
+func (c *CreateResponseBody) StableMarshal(buf []byte) []byte {
+ if c == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, c.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.BytesMarshal(createRespBodyIDField, buf[offset:], c.id)
+ proto.BytesMarshal(createRespBodyKeyField, buf[offset:], c.sessionKey)
+
+ return buf
+}
+
+func (c *CreateResponseBody) StableSize() (size int) {
+ if c == nil {
+ return 0
+ }
+
+ size += proto.BytesSize(createRespBodyIDField, c.id)
+ size += proto.BytesSize(createRespBodyKeyField, c.sessionKey)
+
+ return size
+}
+
+func (c *CreateResponseBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(c, data, new(session.CreateResponse_Body))
+}
+
+func (x *XHeader) StableMarshal(buf []byte) []byte {
+ if x == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, x.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.StringMarshal(xheaderKeyField, buf[offset:], x.key)
+ proto.StringMarshal(xheaderValueField, buf[offset:], x.val)
+
+ return buf
+}
+
+func (x *XHeader) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+
+ size += proto.StringSize(xheaderKeyField, x.key)
+ size += proto.StringSize(xheaderValueField, x.val)
+
+ return size
+}
+
+func (x *XHeader) Unmarshal(data []byte) error {
+ return message.Unmarshal(x, data, new(session.XHeader))
+}
+
+func (l *TokenLifetime) StableMarshal(buf []byte) []byte {
+ if l == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, l.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.UInt64Marshal(lifetimeExpirationField, buf[offset:], l.exp)
+ offset += proto.UInt64Marshal(lifetimeNotValidBeforeField, buf[offset:], l.nbf)
+ proto.UInt64Marshal(lifetimeIssuedAtField, buf[offset:], l.iat)
+
+ return buf
+}
+
+func (l *TokenLifetime) StableSize() (size int) {
+ if l == nil {
+ return 0
+ }
+
+ size += proto.UInt64Size(lifetimeExpirationField, l.exp)
+ size += proto.UInt64Size(lifetimeNotValidBeforeField, l.nbf)
+ size += proto.UInt64Size(lifetimeIssuedAtField, l.iat)
+
+ return size
+}
+
+func (l *TokenLifetime) Unmarshal(data []byte) error {
+ return message.Unmarshal(l, data, new(session.SessionToken_Body_TokenLifetime))
+}
+
+func (c *ObjectSessionContext) StableMarshal(buf []byte) []byte {
+ if c == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, c.StableSize())
+ }
+
+ offset := proto.EnumMarshal(objectCtxVerbField, buf, int32(c.verb))
+ proto.NestedStructureMarshalUnchecked(objectCtxTargetField, buf[offset:], objectSessionContextTarget{
+ cnr: c.cnr,
+ objs: c.objs,
+ })
+
+ return buf
+}
+
+func (c *ObjectSessionContext) StableSize() (size int) {
+ if c == nil {
+ return 0
+ }
+
+ size += proto.EnumSize(objectCtxVerbField, int32(c.verb))
+ size += proto.NestedStructureSizeUnchecked(objectCtxTargetField, objectSessionContextTarget{
+ cnr: c.cnr,
+ objs: c.objs,
+ })
+
+ return size
+}
+
+func (c *ObjectSessionContext) Unmarshal(data []byte) error {
+ return message.Unmarshal(c, data, new(session.ObjectSessionContext))
+}
+
+const (
+ _ = iota
+ cnrCtxVerbFNum
+ cnrCtxWildcardFNum
+ cnrCtxCidFNum
+)
+
+func (x *ContainerSessionContext) StableMarshal(buf []byte) []byte {
+ if x == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, x.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.EnumMarshal(cnrCtxVerbFNum, buf[offset:], int32(ContainerSessionVerbToGRPCField(x.verb)))
+ offset += proto.BoolMarshal(cnrCtxWildcardFNum, buf[offset:], x.wildcard)
+ proto.NestedStructureMarshal(cnrCtxCidFNum, buf[offset:], x.cid)
+
+ return buf
+}
+
+func (x *ContainerSessionContext) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+
+ size += proto.EnumSize(cnrCtxVerbFNum, int32(ContainerSessionVerbToGRPCField(x.verb)))
+ size += proto.BoolSize(cnrCtxWildcardFNum, x.wildcard)
+ size += proto.NestedStructureSize(cnrCtxCidFNum, x.cid)
+
+ return size
+}
+
+func (x *ContainerSessionContext) Unmarshal(data []byte) error {
+ return message.Unmarshal(x, data, new(session.ContainerSessionContext))
+}
+
+func (t *TokenBody) StableMarshal(buf []byte) []byte {
+ if t == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, t.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.BytesMarshal(sessionTokenBodyIDField, buf[offset:], t.id)
+ offset += proto.NestedStructureMarshal(sessionTokenBodyOwnerField, buf[offset:], t.ownerID)
+ offset += proto.NestedStructureMarshal(sessionTokenBodyLifetimeField, buf[offset:], t.lifetime)
+ offset += proto.BytesMarshal(sessionTokenBodyKeyField, buf[offset:], t.sessionKey)
+
+ if t.ctx != nil {
+ switch v := t.ctx.(type) {
+ case *ObjectSessionContext:
+ proto.NestedStructureMarshal(sessionTokenBodyObjectCtxField, buf[offset:], v)
+ case *ContainerSessionContext:
+ proto.NestedStructureMarshal(sessionTokenBodyCnrCtxField, buf[offset:], v)
+ default:
+ panic("cannot marshal unknown session token context")
+ }
+ }
+
+ return buf
+}
+
+func (t *TokenBody) StableSize() (size int) {
+ if t == nil {
+ return 0
+ }
+
+ size += proto.BytesSize(sessionTokenBodyIDField, t.id)
+ size += proto.NestedStructureSize(sessionTokenBodyOwnerField, t.ownerID)
+ size += proto.NestedStructureSize(sessionTokenBodyLifetimeField, t.lifetime)
+ size += proto.BytesSize(sessionTokenBodyKeyField, t.sessionKey)
+
+ if t.ctx != nil {
+ switch v := t.ctx.(type) {
+ case *ObjectSessionContext:
+ size += proto.NestedStructureSize(sessionTokenBodyObjectCtxField, v)
+ case *ContainerSessionContext:
+ size += proto.NestedStructureSize(sessionTokenBodyCnrCtxField, v)
+ default:
+ panic("cannot marshal unknown session token context")
+ }
+ }
+
+ return size
+}
+
+func (t *TokenBody) Unmarshal(data []byte) error {
+ return message.Unmarshal(t, data, new(session.SessionToken_Body))
+}
+
+func (t *Token) StableMarshal(buf []byte) []byte {
+ if t == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, t.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(sessionTokenBodyField, buf[offset:], t.body)
+ proto.NestedStructureMarshal(sessionTokenSignatureField, buf[offset:], t.sig)
+
+ return buf
+}
+
+func (t *Token) StableSize() (size int) {
+ if t == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(sessionTokenBodyField, t.body)
+ size += proto.NestedStructureSize(sessionTokenSignatureField, t.sig)
+
+ return size
+}
+
+func (t *Token) Unmarshal(data []byte) error {
+ return message.Unmarshal(t, data, new(session.SessionToken))
+}
+
+func (r *RequestMetaHeader) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(reqMetaHeaderVersionField, buf[offset:], r.version)
+ offset += proto.UInt64Marshal(reqMetaHeaderEpochField, buf[offset:], r.epoch)
+ offset += proto.UInt32Marshal(reqMetaHeaderTTLField, buf[offset:], r.ttl)
+
+ for i := range r.xHeaders {
+ offset += proto.NestedStructureMarshal(reqMetaHeaderXHeadersField, buf[offset:], &r.xHeaders[i])
+ }
+
+ offset += proto.NestedStructureMarshal(reqMetaHeaderSessionTokenField, buf[offset:], r.sessionToken)
+ offset += proto.NestedStructureMarshal(reqMetaHeaderBearerTokenField, buf[offset:], r.bearerToken)
+ offset += proto.NestedStructureMarshal(reqMetaHeaderOriginField, buf[offset:], r.origin)
+ proto.UInt64Marshal(reqMetaHeaderNetMagicField, buf[offset:], r.netMagic)
+
+ return buf
+}
+
+func (r *RequestMetaHeader) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ if r.version != nil {
+ size += proto.NestedStructureSize(reqMetaHeaderVersionField, r.version)
+ }
+
+ size += proto.UInt64Size(reqMetaHeaderEpochField, r.epoch)
+ size += proto.UInt32Size(reqMetaHeaderTTLField, r.ttl)
+
+ for i := range r.xHeaders {
+ size += proto.NestedStructureSize(reqMetaHeaderXHeadersField, &r.xHeaders[i])
+ }
+
+ size += proto.NestedStructureSize(reqMetaHeaderSessionTokenField, r.sessionToken)
+ size += proto.NestedStructureSize(reqMetaHeaderBearerTokenField, r.bearerToken)
+ size += proto.NestedStructureSize(reqMetaHeaderOriginField, r.origin)
+ size += proto.UInt64Size(reqMetaHeaderNetMagicField, r.netMagic)
+
+ return size
+}
+
+func (r *RequestMetaHeader) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(session.RequestMetaHeader))
+}
+
+func (r *RequestVerificationHeader) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(reqVerifHeaderBodySignatureField, buf[offset:], r.bodySig)
+ offset += proto.NestedStructureMarshal(reqVerifHeaderMetaSignatureField, buf[offset:], r.metaSig)
+ offset += proto.NestedStructureMarshal(reqVerifHeaderOriginSignatureField, buf[offset:], r.originSig)
+ proto.NestedStructureMarshal(reqVerifHeaderOriginField, buf[offset:], r.origin)
+
+ return buf
+}
+
+func (r *RequestVerificationHeader) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(reqVerifHeaderBodySignatureField, r.bodySig)
+ size += proto.NestedStructureSize(reqVerifHeaderMetaSignatureField, r.metaSig)
+ size += proto.NestedStructureSize(reqVerifHeaderOriginSignatureField, r.originSig)
+ size += proto.NestedStructureSize(reqVerifHeaderOriginField, r.origin)
+
+ return size
+}
+
+func (r *RequestVerificationHeader) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(session.RequestVerificationHeader))
+}
+
+func (r *ResponseMetaHeader) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(respMetaHeaderVersionField, buf[offset:], r.version)
+ offset += proto.UInt64Marshal(respMetaHeaderEpochField, buf[offset:], r.epoch)
+ offset += proto.UInt32Marshal(respMetaHeaderTTLField, buf[offset:], r.ttl)
+
+ for i := range r.xHeaders {
+ offset += proto.NestedStructureMarshal(respMetaHeaderXHeadersField, buf[offset:], &r.xHeaders[i])
+ }
+
+ offset += proto.NestedStructureMarshal(respMetaHeaderOriginField, buf[offset:], r.origin)
+ proto.NestedStructureMarshal(respMetaHeaderStatusField, buf[offset:], r.status)
+
+ return buf
+}
+
+func (r *ResponseMetaHeader) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ if r.version != nil {
+ size += proto.NestedStructureSize(respMetaHeaderVersionField, r.version)
+ }
+
+ size += proto.UInt64Size(respMetaHeaderEpochField, r.epoch)
+ size += proto.UInt32Size(respMetaHeaderTTLField, r.ttl)
+
+ for i := range r.xHeaders {
+ size += proto.NestedStructureSize(respMetaHeaderXHeadersField, &r.xHeaders[i])
+ }
+
+ size += proto.NestedStructureSize(respMetaHeaderOriginField, r.origin)
+ size += proto.NestedStructureSize(respMetaHeaderStatusField, r.status)
+
+ return size
+}
+
+func (r *ResponseMetaHeader) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(session.ResponseMetaHeader))
+}
+
+func (r *ResponseVerificationHeader) StableMarshal(buf []byte) []byte {
+ if r == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, r.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.NestedStructureMarshal(respVerifHeaderBodySignatureField, buf[offset:], r.bodySig)
+ offset += proto.NestedStructureMarshal(respVerifHeaderMetaSignatureField, buf[offset:], r.metaSig)
+ offset += proto.NestedStructureMarshal(respVerifHeaderOriginSignatureField, buf[offset:], r.originSig)
+ proto.NestedStructureMarshal(respVerifHeaderOriginField, buf[offset:], r.origin)
+
+ return buf
+}
+
+func (r *ResponseVerificationHeader) StableSize() (size int) {
+ if r == nil {
+ return 0
+ }
+
+ size += proto.NestedStructureSize(respVerifHeaderBodySignatureField, r.bodySig)
+ size += proto.NestedStructureSize(respVerifHeaderMetaSignatureField, r.metaSig)
+ size += proto.NestedStructureSize(respVerifHeaderOriginSignatureField, r.originSig)
+ size += proto.NestedStructureSize(respVerifHeaderOriginField, r.origin)
+
+ return size
+}
+
+func (r *ResponseVerificationHeader) Unmarshal(data []byte) error {
+ return message.Unmarshal(r, data, new(session.ResponseVerificationHeader))
+}
diff --git a/api/session/message_test.go b/api/session/message_test.go
new file mode 100644
index 0000000..7e5844a
--- /dev/null
+++ b/api/session/message_test.go
@@ -0,0 +1,27 @@
+package session_test
+
+import (
+ "testing"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ rpctest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message/test"
+ sessiontest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/test"
+)
+
+func TestMessageConvert(t *testing.T) {
+ rpctest.TestRPCMessage(t,
+ func(empty bool) message.Message { return sessiontest.GenerateCreateRequestBody(empty) },
+ func(empty bool) message.Message { return sessiontest.GenerateCreateRequest(empty) },
+ func(empty bool) message.Message { return sessiontest.GenerateCreateResponseBody(empty) },
+ func(empty bool) message.Message { return sessiontest.GenerateCreateResponse(empty) },
+ func(empty bool) message.Message { return sessiontest.GenerateTokenLifetime(empty) },
+ func(empty bool) message.Message { return sessiontest.GenerateXHeader(empty) },
+ func(empty bool) message.Message { return sessiontest.GenerateSessionTokenBody(empty) },
+ func(empty bool) message.Message { return sessiontest.GenerateSessionToken(empty) },
+ func(empty bool) message.Message { return sessiontest.GenerateRequestMetaHeader(empty) },
+ func(empty bool) message.Message { return sessiontest.GenerateRequestVerificationHeader(empty) },
+ func(empty bool) message.Message { return sessiontest.GenerateResponseMetaHeader(empty) },
+ func(empty bool) message.Message { return sessiontest.GenerateResponseVerificationHeader(empty) },
+ func(empty bool) message.Message { return sessiontest.GenerateContainerSessionContext(empty) },
+ )
+}
diff --git a/api/session/status.go b/api/session/status.go
new file mode 100644
index 0000000..229a459
--- /dev/null
+++ b/api/session/status.go
@@ -0,0 +1,32 @@
+package session
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
+ statusgrpc "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status/grpc"
+)
+
+// LocalizeFailStatus checks if passed global status.Code is related to session failure and:
+//
+// then localizes the code and returns true,
+// else leaves the code unchanged and returns false.
+//
+// Arg must not be nil.
+func LocalizeFailStatus(c *status.Code) bool {
+ return status.LocalizeIfInSection(c, uint32(statusgrpc.Section_SECTION_SESSION))
+}
+
+// GlobalizeFail globalizes local code of session failure.
+//
+// Arg must not be nil.
+func GlobalizeFail(c *status.Code) {
+ c.GlobalizeSection(uint32(statusgrpc.Section_SECTION_SESSION))
+}
+
+const (
+ // StatusTokenNotFound is a local status.Code value for
+ // TOKEN_NOT_FOUND session failure.
+ StatusTokenNotFound status.Code = iota
+ // StatusTokenExpired is a local status.Code value for
+ // TOKEN_EXPIRED session failure.
+ StatusTokenExpired
+)
diff --git a/api/session/status_test.go b/api/session/status_test.go
new file mode 100644
index 0000000..c984e6f
--- /dev/null
+++ b/api/session/status_test.go
@@ -0,0 +1,15 @@
+package session_test
+
+import (
+ "testing"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ statustest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status/test"
+)
+
+func TestStatusCodes(t *testing.T) {
+ statustest.TestCodes(t, session.LocalizeFailStatus, session.GlobalizeFail,
+ session.StatusTokenNotFound, 4096,
+ session.StatusTokenExpired, 4097,
+ )
+}
diff --git a/api/session/string.go b/api/session/string.go
new file mode 100644
index 0000000..fd2d425
--- /dev/null
+++ b/api/session/string.go
@@ -0,0 +1,47 @@
+package session
+
+import (
+ session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/grpc"
+)
+
+// String returns string representation of ObjectSessionVerb.
+func (x ObjectSessionVerb) String() string {
+ return ObjectSessionVerbToGRPCField(x).String()
+}
+
+// FromString parses ObjectSessionVerb from a string representation.
+// It is a reverse action to String().
+//
+// Returns true if s was parsed successfully.
+func (x *ObjectSessionVerb) FromString(s string) bool {
+ var g session.ObjectSessionContext_Verb
+
+ ok := g.FromString(s)
+
+ if ok {
+ *x = ObjectSessionVerbFromGRPCField(g)
+ }
+
+ return ok
+}
+
+// String returns string representation of ContainerSessionVerb.
+func (x ContainerSessionVerb) String() string {
+ return ContainerSessionVerbToGRPCField(x).String()
+}
+
+// FromString parses ContainerSessionVerb from a string representation.
+// It is a reverse action to String().
+//
+// Returns true if s was parsed successfully.
+func (x *ContainerSessionVerb) FromString(s string) bool {
+ var g session.ContainerSessionContext_Verb
+
+ ok := g.FromString(s)
+
+ if ok {
+ *x = ContainerSessionVerbFromGRPCField(g)
+ }
+
+ return ok
+}
diff --git a/api/session/test/generate.go b/api/session/test/generate.go
new file mode 100644
index 0000000..b35fe07
--- /dev/null
+++ b/api/session/test/generate.go
@@ -0,0 +1,251 @@
+package sessiontest
+
+import (
+ crand "crypto/rand"
+ "math/rand"
+ "time"
+
+ acltest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl/test"
+ refstest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/test"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ statustest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status/test"
+)
+
+func GenerateCreateRequestBody(empty bool) *session.CreateRequestBody {
+ m := new(session.CreateRequestBody)
+
+ if !empty {
+ m.SetExpiration(555)
+ m.SetOwnerID(refstest.GenerateOwnerID(false))
+ }
+
+ return m
+}
+
+func GenerateCreateRequest(empty bool) *session.CreateRequest {
+ m := new(session.CreateRequest)
+
+ if !empty {
+ m.SetBody(GenerateCreateRequestBody(false))
+ }
+
+ m.SetMetaHeader(GenerateRequestMetaHeader(empty))
+ m.SetVerificationHeader(GenerateRequestVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateCreateResponseBody(empty bool) *session.CreateResponseBody {
+ m := new(session.CreateResponseBody)
+
+ if !empty {
+ id := make([]byte, 16)
+ _, _ = crand.Read(id)
+
+ m.SetID(id)
+ m.SetSessionKey([]byte{4, 5, 6})
+ }
+
+ return m
+}
+
+func GenerateCreateResponse(empty bool) *session.CreateResponse {
+ m := new(session.CreateResponse)
+
+ if !empty {
+ m.SetBody(GenerateCreateResponseBody(false))
+ }
+
+ m.SetMetaHeader(GenerateResponseMetaHeader(empty))
+ m.SetVerificationHeader(GenerateResponseVerificationHeader(empty))
+
+ return m
+}
+
+func GenerateResponseVerificationHeader(empty bool) *session.ResponseVerificationHeader {
+ return generateResponseVerificationHeader(empty, true)
+}
+
+func generateResponseVerificationHeader(empty, withOrigin bool) *session.ResponseVerificationHeader {
+ m := new(session.ResponseVerificationHeader)
+
+ if !empty {
+ m.SetBodySignature(refstest.GenerateSignature(false))
+ }
+
+ m.SetMetaSignature(refstest.GenerateSignature(empty))
+ m.SetOriginSignature(refstest.GenerateSignature(empty))
+
+ if withOrigin {
+ m.SetOrigin(generateResponseVerificationHeader(empty, false))
+ }
+
+ return m
+}
+
+func GenerateResponseMetaHeader(empty bool) *session.ResponseMetaHeader {
+ return generateResponseMetaHeader(empty, true)
+}
+
+func generateResponseMetaHeader(empty, withOrigin bool) *session.ResponseMetaHeader {
+ m := new(session.ResponseMetaHeader)
+
+ if !empty {
+ m.SetEpoch(13)
+ m.SetTTL(100)
+ }
+
+ m.SetXHeaders(GenerateXHeaders(empty))
+ m.SetVersion(refstest.GenerateVersion(empty))
+ m.SetStatus(statustest.Status(empty))
+
+ if withOrigin {
+ m.SetOrigin(generateResponseMetaHeader(empty, false))
+ }
+
+ return m
+}
+
+func GenerateRequestVerificationHeader(empty bool) *session.RequestVerificationHeader {
+ return generateRequestVerificationHeader(empty, true)
+}
+
+func generateRequestVerificationHeader(empty, withOrigin bool) *session.RequestVerificationHeader {
+ m := new(session.RequestVerificationHeader)
+
+ if !empty {
+ m.SetBodySignature(refstest.GenerateSignature(false))
+ }
+
+ m.SetMetaSignature(refstest.GenerateSignature(empty))
+ m.SetOriginSignature(refstest.GenerateSignature(empty))
+
+ if withOrigin {
+ m.SetOrigin(generateRequestVerificationHeader(empty, false))
+ }
+
+ return m
+}
+
+func GenerateRequestMetaHeader(empty bool) *session.RequestMetaHeader {
+ return generateRequestMetaHeader(empty, true)
+}
+
+func generateRequestMetaHeader(empty, withOrigin bool) *session.RequestMetaHeader {
+ m := new(session.RequestMetaHeader)
+
+ if !empty {
+ m.SetEpoch(13)
+ m.SetTTL(100)
+ m.SetNetworkMagic(1337)
+ }
+
+ m.SetXHeaders(GenerateXHeaders(empty))
+ m.SetVersion(refstest.GenerateVersion(empty))
+ m.SetSessionToken(GenerateSessionToken(empty))
+ m.SetBearerToken(acltest.GenerateBearerToken(empty))
+
+ if withOrigin {
+ m.SetOrigin(generateRequestMetaHeader(empty, false))
+ }
+
+ return m
+}
+
+func GenerateSessionToken(empty bool) *session.Token {
+ m := new(session.Token)
+
+ if !empty {
+ m.SetBody(GenerateSessionTokenBody(false))
+ }
+
+ m.SetSignature(refstest.GenerateSignature(empty))
+
+ return m
+}
+
+func GenerateSessionTokenBody(empty bool) *session.TokenBody {
+ m := new(session.TokenBody)
+
+ if !empty {
+ id := make([]byte, 16)
+ _, _ = crand.Read(id)
+
+ m.SetID(id)
+ m.SetSessionKey([]byte{2})
+ m.SetOwnerID(refstest.GenerateOwnerID(false))
+ m.SetLifetime(GenerateTokenLifetime(false))
+
+ switch randomInt(2) {
+ case 0:
+ m.SetContext(GenerateObjectSessionContext(false))
+ case 1:
+ m.SetContext(GenerateContainerSessionContext(false))
+ }
+ }
+
+ return m
+}
+
+func GenerateTokenLifetime(empty bool) *session.TokenLifetime {
+ m := new(session.TokenLifetime)
+
+ if !empty {
+ m.SetExp(1)
+ m.SetIat(2)
+ m.SetExp(3)
+ }
+
+ return m
+}
+
+func GenerateObjectSessionContext(empty bool) *session.ObjectSessionContext {
+ m := new(session.ObjectSessionContext)
+
+ if !empty {
+ m.SetVerb(session.ObjectVerbHead)
+ m.SetTarget(refstest.GenerateContainerID(false), refstest.GenerateObjectIDs(false)...)
+ }
+
+ return m
+}
+
+func GenerateContainerSessionContext(empty bool) *session.ContainerSessionContext {
+ m := new(session.ContainerSessionContext)
+
+ if !empty {
+ m.SetVerb(session.ContainerVerbDelete)
+ m.SetWildcard(true)
+ m.SetContainerID(refstest.GenerateContainerID(false))
+ }
+
+ return m
+}
+
+func GenerateXHeader(empty bool) *session.XHeader {
+ m := new(session.XHeader)
+
+ if !empty {
+ m.SetKey("key")
+ m.SetValue("val")
+ }
+
+ return m
+}
+
+func GenerateXHeaders(empty bool) []session.XHeader {
+ var xs []session.XHeader
+
+ if !empty {
+ xs = append(xs,
+ *GenerateXHeader(false),
+ *GenerateXHeader(false),
+ )
+ }
+
+ return xs
+}
+
+func randomInt(n int) int {
+ return rand.New(rand.NewSource(time.Now().UnixNano())).Intn(n)
+}
diff --git a/api/session/types.go b/api/session/types.go
new file mode 100644
index 0000000..838024f
--- /dev/null
+++ b/api/session/types.go
@@ -0,0 +1,836 @@
+package session
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+)
+
+type CreateRequestBody struct {
+ ownerID *refs.OwnerID
+
+ expiration uint64
+}
+
+type CreateRequest struct {
+ body *CreateRequestBody
+
+ RequestHeaders
+}
+
+type CreateResponseBody struct {
+ id []byte
+
+ sessionKey []byte
+}
+
+type CreateResponse struct {
+ body *CreateResponseBody
+
+ ResponseHeaders
+}
+
+type XHeader struct {
+ key, val string
+}
+
+type TokenLifetime struct {
+ exp, nbf, iat uint64
+}
+
+type ObjectSessionVerb uint32
+
+type objectSessionContextTarget struct {
+ cnr *refs.ContainerID
+
+ objs []refs.ObjectID
+}
+
+const (
+ _ = iota
+ fNumObjectTargetContainer
+ fNumObjectTargetObjects
+)
+
+func (x objectSessionContextTarget) StableMarshal(buf []byte) []byte {
+ if buf == nil {
+ buf = make([]byte, x.StableSize())
+ }
+
+ offset := proto.NestedStructureMarshal(fNumObjectTargetContainer, buf, x.cnr)
+
+ for i := range x.objs {
+ offset += proto.NestedStructureMarshal(fNumObjectTargetObjects, buf[offset:], &x.objs[i])
+ }
+
+ return buf
+}
+
+func (x objectSessionContextTarget) StableSize() (size int) {
+ size += proto.NestedStructureSize(fNumObjectTargetContainer, x.cnr)
+
+ for i := range x.objs {
+ size += proto.NestedStructureSize(fNumObjectTargetObjects, &x.objs[i])
+ }
+
+ return size
+}
+
+type ObjectSessionContext struct {
+ verb ObjectSessionVerb
+
+ cnr *refs.ContainerID
+
+ objs []refs.ObjectID
+}
+
+type TokenContext interface {
+ sessionTokenContext()
+}
+
+// Deprecated: use TokenContext instead.
+//
+//nolint:revive
+type SessionTokenContext = TokenContext
+
+type TokenBody struct {
+ id []byte
+
+ ownerID *refs.OwnerID
+
+ lifetime *TokenLifetime
+
+ sessionKey []byte
+
+ ctx TokenContext
+}
+
+// Deprecated: use TokenBody instead.
+//
+//nolint:revive
+type SessionTokenBody = TokenBody
+
+type Token struct {
+ body *TokenBody
+
+ sig *refs.Signature
+}
+
+// Deprecated: use Token instead.
+//
+//nolint:revive
+type SessionToken = Token
+
+type RequestVerificationHeader struct {
+ bodySig, metaSig, originSig *refs.Signature
+
+ origin *RequestVerificationHeader
+}
+
+type RequestMetaHeader struct {
+ version *refs.Version
+
+ ttl uint32
+
+ epoch uint64
+
+ xHeaders []XHeader
+
+ sessionToken *Token
+
+ bearerToken *acl.BearerToken
+
+ origin *RequestMetaHeader
+
+ netMagic uint64
+}
+
+type ResponseVerificationHeader struct {
+ bodySig, metaSig, originSig *refs.Signature
+
+ origin *ResponseVerificationHeader
+}
+
+type ResponseMetaHeader struct {
+ version *refs.Version
+
+ ttl uint32
+
+ epoch uint64
+
+ xHeaders []XHeader
+
+ origin *ResponseMetaHeader
+
+ status *status.Status
+}
+
+const (
+ ObjectVerbUnknown ObjectSessionVerb = iota
+ ObjectVerbPut
+ ObjectVerbGet
+ ObjectVerbHead
+ ObjectVerbSearch
+ ObjectVerbDelete
+ ObjectVerbRange
+ ObjectVerbRangeHash
+ ObjectVerbPatch
+)
+
+func (c *CreateRequestBody) GetOwnerID() *refs.OwnerID {
+ if c != nil {
+ return c.ownerID
+ }
+
+ return nil
+}
+
+func (c *CreateRequestBody) SetOwnerID(v *refs.OwnerID) {
+ c.ownerID = v
+}
+
+func (c *CreateRequestBody) GetExpiration() uint64 {
+ if c != nil {
+ return c.expiration
+ }
+
+ return 0
+}
+
+func (c *CreateRequestBody) SetExpiration(v uint64) {
+ c.expiration = v
+}
+
+func (c *CreateRequest) GetBody() *CreateRequestBody {
+ if c != nil {
+ return c.body
+ }
+
+ return nil
+}
+
+func (c *CreateRequest) SetBody(v *CreateRequestBody) {
+ c.body = v
+}
+
+func (c *CreateRequest) GetMetaHeader() *RequestMetaHeader {
+ if c != nil {
+ return c.metaHeader
+ }
+
+ return nil
+}
+
+func (c *CreateRequest) SetMetaHeader(v *RequestMetaHeader) {
+ c.metaHeader = v
+}
+
+func (c *CreateRequest) GetVerificationHeader() *RequestVerificationHeader {
+ if c != nil {
+ return c.verifyHeader
+ }
+
+ return nil
+}
+
+func (c *CreateRequest) SetVerificationHeader(v *RequestVerificationHeader) {
+ c.verifyHeader = v
+}
+
+func (c *CreateResponseBody) GetID() []byte {
+ if c != nil {
+ return c.id
+ }
+
+ return nil
+}
+
+func (c *CreateResponseBody) SetID(v []byte) {
+ c.id = v
+}
+
+func (c *CreateResponseBody) GetSessionKey() []byte {
+ if c != nil {
+ return c.sessionKey
+ }
+
+ return nil
+}
+
+func (c *CreateResponseBody) SetSessionKey(v []byte) {
+ c.sessionKey = v
+}
+
+func (c *CreateResponse) GetBody() *CreateResponseBody {
+ if c != nil {
+ return c.body
+ }
+
+ return nil
+}
+
+func (c *CreateResponse) SetBody(v *CreateResponseBody) {
+ c.body = v
+}
+
+func (c *CreateResponse) GetMetaHeader() *ResponseMetaHeader {
+ if c != nil {
+ return c.metaHeader
+ }
+
+ return nil
+}
+
+func (c *CreateResponse) SetMetaHeader(v *ResponseMetaHeader) {
+ c.metaHeader = v
+}
+
+func (c *CreateResponse) GetVerificationHeader() *ResponseVerificationHeader {
+ if c != nil {
+ return c.verifyHeader
+ }
+
+ return nil
+}
+
+func (c *CreateResponse) SetVerificationHeader(v *ResponseVerificationHeader) {
+ c.verifyHeader = v
+}
+
+func (x *XHeader) GetKey() string {
+ if x != nil {
+ return x.key
+ }
+
+ return ""
+}
+
+func (x *XHeader) SetKey(v string) {
+ x.key = v
+}
+
+func (x *XHeader) GetValue() string {
+ if x != nil {
+ return x.val
+ }
+
+ return ""
+}
+
+func (x *XHeader) SetValue(v string) {
+ x.val = v
+}
+
+func (r *RequestVerificationHeader) GetBodySignature() *refs.Signature {
+ if r != nil {
+ return r.bodySig
+ }
+
+ return nil
+}
+
+func (r *RequestVerificationHeader) SetBodySignature(v *refs.Signature) {
+ r.bodySig = v
+}
+
+func (r *RequestVerificationHeader) GetMetaSignature() *refs.Signature {
+ if r != nil {
+ return r.metaSig
+ }
+
+ return nil
+}
+
+func (r *RequestVerificationHeader) SetMetaSignature(v *refs.Signature) {
+ r.metaSig = v
+}
+
+func (r *RequestVerificationHeader) GetOriginSignature() *refs.Signature {
+ if r != nil {
+ return r.originSig
+ }
+
+ return nil
+}
+
+func (r *RequestVerificationHeader) SetOriginSignature(v *refs.Signature) {
+ r.originSig = v
+}
+
+func (r *RequestVerificationHeader) GetOrigin() *RequestVerificationHeader {
+ if r != nil {
+ return r.origin
+ }
+
+ return nil
+}
+
+func (r *RequestVerificationHeader) SetOrigin(v *RequestVerificationHeader) {
+ r.origin = v
+}
+
+func (r *RequestMetaHeader) GetVersion() *refs.Version {
+ if r != nil {
+ return r.version
+ }
+
+ return nil
+}
+
+func (r *RequestMetaHeader) SetVersion(v *refs.Version) {
+ r.version = v
+}
+
+func (r *RequestMetaHeader) GetTTL() uint32 {
+ if r != nil {
+ return r.ttl
+ }
+
+ return 0
+}
+
+func (r *RequestMetaHeader) SetTTL(v uint32) {
+ r.ttl = v
+}
+
+func (r *RequestMetaHeader) GetEpoch() uint64 {
+ if r != nil {
+ return r.epoch
+ }
+
+ return 0
+}
+
+func (r *RequestMetaHeader) SetEpoch(v uint64) {
+ r.epoch = v
+}
+
+func (r *RequestMetaHeader) GetXHeaders() []XHeader {
+ if r != nil {
+ return r.xHeaders
+ }
+
+ return nil
+}
+
+func (r *RequestMetaHeader) SetXHeaders(v []XHeader) {
+ r.xHeaders = v
+}
+
+func (r *RequestMetaHeader) GetSessionToken() *Token {
+ if r != nil {
+ return r.sessionToken
+ }
+
+ return nil
+}
+
+func (r *RequestMetaHeader) SetSessionToken(v *Token) {
+ r.sessionToken = v
+}
+
+func (r *RequestMetaHeader) GetBearerToken() *acl.BearerToken {
+ if r != nil {
+ return r.bearerToken
+ }
+
+ return nil
+}
+
+func (r *RequestMetaHeader) SetBearerToken(v *acl.BearerToken) {
+ r.bearerToken = v
+}
+
+func (r *RequestMetaHeader) GetOrigin() *RequestMetaHeader {
+ if r != nil {
+ return r.origin
+ }
+
+ return nil
+}
+
+func (r *RequestMetaHeader) SetOrigin(v *RequestMetaHeader) {
+ r.origin = v
+}
+
+// GetNetworkMagic returns NeoFS network magic.
+func (r *RequestMetaHeader) GetNetworkMagic() uint64 {
+ if r != nil {
+ return r.netMagic
+ }
+
+ return 0
+}
+
+// SetNetworkMagic sets NeoFS network magic.
+func (r *RequestMetaHeader) SetNetworkMagic(v uint64) {
+ r.netMagic = v
+}
+
+func (l *TokenLifetime) GetExp() uint64 {
+ if l != nil {
+ return l.exp
+ }
+
+ return 0
+}
+
+func (l *TokenLifetime) SetExp(v uint64) {
+ l.exp = v
+}
+
+func (l *TokenLifetime) GetNbf() uint64 {
+ if l != nil {
+ return l.nbf
+ }
+
+ return 0
+}
+
+func (l *TokenLifetime) SetNbf(v uint64) {
+ l.nbf = v
+}
+
+func (l *TokenLifetime) GetIat() uint64 {
+ if l != nil {
+ return l.iat
+ }
+
+ return 0
+}
+
+func (l *TokenLifetime) SetIat(v uint64) {
+ l.iat = v
+}
+
+func (r *ResponseVerificationHeader) GetBodySignature() *refs.Signature {
+ if r != nil {
+ return r.bodySig
+ }
+
+ return nil
+}
+
+func (r *ResponseVerificationHeader) SetBodySignature(v *refs.Signature) {
+ r.bodySig = v
+}
+
+func (r *ResponseVerificationHeader) GetMetaSignature() *refs.Signature {
+ if r != nil {
+ return r.metaSig
+ }
+
+ return nil
+}
+
+func (r *ResponseVerificationHeader) SetMetaSignature(v *refs.Signature) {
+ r.metaSig = v
+}
+
+func (r *ResponseVerificationHeader) GetOriginSignature() *refs.Signature {
+ if r != nil {
+ return r.originSig
+ }
+
+ return nil
+}
+
+func (r *ResponseVerificationHeader) SetOriginSignature(v *refs.Signature) {
+ r.originSig = v
+}
+
+func (r *ResponseVerificationHeader) GetOrigin() *ResponseVerificationHeader {
+ if r != nil {
+ return r.origin
+ }
+
+ return nil
+}
+
+func (r *ResponseVerificationHeader) SetOrigin(v *ResponseVerificationHeader) {
+ r.origin = v
+}
+
+func (r *ResponseMetaHeader) GetVersion() *refs.Version {
+ if r != nil {
+ return r.version
+ }
+
+ return nil
+}
+
+func (r *ResponseMetaHeader) SetVersion(v *refs.Version) {
+ r.version = v
+}
+
+func (r *ResponseMetaHeader) GetTTL() uint32 {
+ if r != nil {
+ return r.ttl
+ }
+
+ return 0
+}
+
+func (r *ResponseMetaHeader) SetTTL(v uint32) {
+ r.ttl = v
+}
+
+func (r *ResponseMetaHeader) GetEpoch() uint64 {
+ if r != nil {
+ return r.epoch
+ }
+
+ return 0
+}
+
+func (r *ResponseMetaHeader) SetEpoch(v uint64) {
+ r.epoch = v
+}
+
+func (r *ResponseMetaHeader) GetXHeaders() []XHeader {
+ if r != nil {
+ return r.xHeaders
+ }
+
+ return nil
+}
+
+func (r *ResponseMetaHeader) SetXHeaders(v []XHeader) {
+ r.xHeaders = v
+}
+
+func (r *ResponseMetaHeader) GetOrigin() *ResponseMetaHeader {
+ if r != nil {
+ return r.origin
+ }
+
+ return nil
+}
+
+func (r *ResponseMetaHeader) SetOrigin(v *ResponseMetaHeader) {
+ r.origin = v
+}
+
+// GetStatus returns response status.
+func (r *ResponseMetaHeader) GetStatus() *status.Status {
+ if r != nil {
+ return r.status
+ }
+
+ return nil
+}
+
+// SetStatus sets response status.
+func (r *ResponseMetaHeader) SetStatus(v *status.Status) {
+ r.status = v
+}
+
+// SetStatus sets status of the message which can carry ResponseMetaHeader.
+//
+// Sets status field on the "highest" level of meta headers.
+// If meta header is missing in message, it is allocated.
+func SetStatus(msg interface {
+ GetMetaHeader() *ResponseMetaHeader
+ SetMetaHeader(*ResponseMetaHeader)
+}, st *status.Status,
+) {
+ meta := msg.GetMetaHeader()
+ if meta == nil {
+ meta = new(ResponseMetaHeader)
+ msg.SetMetaHeader(meta)
+ }
+
+ meta.SetStatus(st)
+}
+
+func (c *ObjectSessionContext) sessionTokenContext() {}
+
+func (c *ObjectSessionContext) GetVerb() ObjectSessionVerb {
+ if c != nil {
+ return c.verb
+ }
+
+ return ObjectVerbUnknown
+}
+
+func (c *ObjectSessionContext) SetVerb(v ObjectSessionVerb) {
+ c.verb = v
+}
+
+func (c *ObjectSessionContext) GetContainer() *refs.ContainerID {
+ if c != nil {
+ return c.cnr
+ }
+
+ return nil
+}
+
+func (c *ObjectSessionContext) GetObjects() []refs.ObjectID {
+ if c != nil {
+ return c.objs
+ }
+
+ return nil
+}
+
+func (c *ObjectSessionContext) SetTarget(cnr *refs.ContainerID, objs ...refs.ObjectID) {
+ c.cnr = cnr
+ c.objs = objs
+}
+
+func (t *TokenBody) GetID() []byte {
+ if t != nil {
+ return t.id
+ }
+
+ return nil
+}
+
+func (t *TokenBody) SetID(v []byte) {
+ t.id = v
+}
+
+func (t *TokenBody) GetOwnerID() *refs.OwnerID {
+ if t != nil {
+ return t.ownerID
+ }
+
+ return nil
+}
+
+func (t *TokenBody) SetOwnerID(v *refs.OwnerID) {
+ t.ownerID = v
+}
+
+func (t *TokenBody) GetLifetime() *TokenLifetime {
+ if t != nil {
+ return t.lifetime
+ }
+
+ return nil
+}
+
+func (t *TokenBody) SetLifetime(v *TokenLifetime) {
+ t.lifetime = v
+}
+
+func (t *TokenBody) GetSessionKey() []byte {
+ if t != nil {
+ return t.sessionKey
+ }
+
+ return nil
+}
+
+func (t *TokenBody) SetSessionKey(v []byte) {
+ t.sessionKey = v
+}
+
+func (t *TokenBody) GetContext() TokenContext {
+ if t != nil {
+ return t.ctx
+ }
+
+ return nil
+}
+
+func (t *TokenBody) SetContext(v TokenContext) {
+ t.ctx = v
+}
+
+func (t *Token) GetBody() *TokenBody {
+ if t != nil {
+ return t.body
+ }
+
+ return nil
+}
+
+func (t *Token) SetBody(v *TokenBody) {
+ t.body = v
+}
+
+func (t *Token) GetSignature() *refs.Signature {
+ if t != nil {
+ return t.sig
+ }
+
+ return nil
+}
+
+func (t *Token) SetSignature(v *refs.Signature) {
+ t.sig = v
+}
+
+// ContainerSessionVerb represents NeoFS API v2
+// session.ContainerSessionContext.Verb enumeration.
+type ContainerSessionVerb uint32
+
+const (
+ // ContainerVerbUnknown corresponds to VERB_UNSPECIFIED enum value.
+ ContainerVerbUnknown ContainerSessionVerb = iota
+
+ // ContainerVerbPut corresponds to PUT enum value.
+ ContainerVerbPut
+
+ // ContainerVerbDelete corresponds to DELETE enum value.
+ ContainerVerbDelete
+
+ // ContainerVerbSetEACL corresponds to SETEACL enum value.
+ ContainerVerbSetEACL
+)
+
+// ContainerSessionContext represents structure of the
+// NeoFS API v2 session.ContainerSessionContext message.
+type ContainerSessionContext struct {
+ verb ContainerSessionVerb
+
+ wildcard bool
+
+ cid *refs.ContainerID
+}
+
+func (x *ContainerSessionContext) sessionTokenContext() {}
+
+// Verb returns type of request for which the token is issued.
+func (x *ContainerSessionContext) Verb() ContainerSessionVerb {
+ if x != nil {
+ return x.verb
+ }
+
+ return ContainerVerbUnknown
+}
+
+// SetVerb sets type of request for which the token is issued.
+func (x *ContainerSessionContext) SetVerb(v ContainerSessionVerb) {
+ x.verb = v
+}
+
+// Wildcard returns wildcard flag of the container session.
+func (x *ContainerSessionContext) Wildcard() bool {
+ if x != nil {
+ return x.wildcard
+ }
+
+ return false
+}
+
+// SetWildcard sets wildcard flag of the container session.
+func (x *ContainerSessionContext) SetWildcard(v bool) {
+ x.wildcard = v
+}
+
+// ContainerID returns identifier of the container related to the session.
+func (x *ContainerSessionContext) ContainerID() *refs.ContainerID {
+ if x != nil {
+ return x.cid
+ }
+
+ return nil
+}
+
+// SetContainerID sets identifier of the container related to the session.
+func (x *ContainerSessionContext) SetContainerID(v *refs.ContainerID) {
+ x.cid = v
+}
diff --git a/api/session/util.go b/api/session/util.go
new file mode 100644
index 0000000..ea5aff0
--- /dev/null
+++ b/api/session/util.go
@@ -0,0 +1,167 @@
+package session
+
+import (
+ session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session/grpc"
+)
+
+// RequestHeaders represents common part of
+// all NeoFS requests including headers.
+type RequestHeaders struct {
+ metaHeader *RequestMetaHeader
+
+ verifyHeader *RequestVerificationHeader
+}
+
+// GetMetaHeader returns meta header of the request.
+func (c *RequestHeaders) GetMetaHeader() *RequestMetaHeader {
+ if c != nil {
+ return c.metaHeader
+ }
+
+ return nil
+}
+
+// SetMetaHeader sets meta header of the request.
+func (c *RequestHeaders) SetMetaHeader(v *RequestMetaHeader) {
+ c.metaHeader = v
+}
+
+// GetVerificationHeader returns verification header of the request.
+func (c *RequestHeaders) GetVerificationHeader() *RequestVerificationHeader {
+ if c != nil {
+ return c.verifyHeader
+ }
+
+ return nil
+}
+
+// SetVerificationHeader sets verification header of the request.
+func (c *RequestHeaders) SetVerificationHeader(v *RequestVerificationHeader) {
+ c.verifyHeader = v
+}
+
+func (c *RequestHeaders) ToMessage(m interface {
+ SetMetaHeader(*session.RequestMetaHeader)
+ SetVerifyHeader(*session.RequestVerificationHeader)
+},
+) {
+ m.SetMetaHeader(c.metaHeader.ToGRPCMessage().(*session.RequestMetaHeader))
+ m.SetVerifyHeader(c.verifyHeader.ToGRPCMessage().(*session.RequestVerificationHeader))
+}
+
+func (c *RequestHeaders) FromMessage(m interface {
+ GetMetaHeader() *session.RequestMetaHeader
+ GetVerifyHeader() *session.RequestVerificationHeader
+},
+) error {
+ metaHdr := m.GetMetaHeader()
+ if metaHdr == nil {
+ c.metaHeader = nil
+ } else {
+ if c.metaHeader == nil {
+ c.metaHeader = new(RequestMetaHeader)
+ }
+
+ err := c.metaHeader.FromGRPCMessage(metaHdr)
+ if err != nil {
+ return err
+ }
+ }
+
+ verifyHdr := m.GetVerifyHeader()
+ if verifyHdr == nil {
+ c.verifyHeader = nil
+ } else {
+ if c.verifyHeader == nil {
+ c.verifyHeader = new(RequestVerificationHeader)
+ }
+
+ err := c.verifyHeader.FromGRPCMessage(verifyHdr)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+// ResponseHeaders represents common part of
+// all NeoFS responses including headers.
+type ResponseHeaders struct {
+ metaHeader *ResponseMetaHeader
+
+ verifyHeader *ResponseVerificationHeader
+}
+
+// GetMetaHeader returns meta header of the response.
+func (c *ResponseHeaders) GetMetaHeader() *ResponseMetaHeader {
+ if c != nil {
+ return c.metaHeader
+ }
+
+ return nil
+}
+
+// SetMetaHeader sets meta header of the response.
+func (c *ResponseHeaders) SetMetaHeader(v *ResponseMetaHeader) {
+ c.metaHeader = v
+}
+
+// GetVerificationHeader returns verification header of the response.
+func (c *ResponseHeaders) GetVerificationHeader() *ResponseVerificationHeader {
+ if c != nil {
+ return c.verifyHeader
+ }
+
+ return nil
+}
+
+// SetVerificationHeader sets verification header of the response.
+func (c *ResponseHeaders) SetVerificationHeader(v *ResponseVerificationHeader) {
+ c.verifyHeader = v
+}
+
+func (c *ResponseHeaders) ToMessage(m interface {
+ SetMetaHeader(*session.ResponseMetaHeader)
+ SetVerifyHeader(*session.ResponseVerificationHeader)
+},
+) {
+ m.SetMetaHeader(c.metaHeader.ToGRPCMessage().(*session.ResponseMetaHeader))
+ m.SetVerifyHeader(c.verifyHeader.ToGRPCMessage().(*session.ResponseVerificationHeader))
+}
+
+func (c *ResponseHeaders) FromMessage(m interface {
+ GetMetaHeader() *session.ResponseMetaHeader
+ GetVerifyHeader() *session.ResponseVerificationHeader
+},
+) error {
+ metaHdr := m.GetMetaHeader()
+ if metaHdr == nil {
+ c.metaHeader = nil
+ } else {
+ if c.metaHeader == nil {
+ c.metaHeader = new(ResponseMetaHeader)
+ }
+
+ err := c.metaHeader.FromGRPCMessage(metaHdr)
+ if err != nil {
+ return err
+ }
+ }
+
+ verifyHdr := m.GetVerifyHeader()
+ if verifyHdr == nil {
+ c.verifyHeader = nil
+ } else {
+ if c.verifyHeader == nil {
+ c.verifyHeader = new(ResponseVerificationHeader)
+ }
+
+ err := c.verifyHeader.FromGRPCMessage(verifyHdr)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
diff --git a/api/session/xheaders.go b/api/session/xheaders.go
new file mode 100644
index 0000000..c575d5f
--- /dev/null
+++ b/api/session/xheaders.go
@@ -0,0 +1,34 @@
+package session
+
+// ReservedXHeaderPrefix is a prefix of keys to "well-known" X-headers.
+const ReservedXHeaderPrefix = "__SYSTEM__"
+
+const (
+ // XHeaderNetmapEpoch is a key to the reserved X-header that specifies netmap epoch
+ // to use for object placement calculation. If set to '0' or not set, the current
+ // epoch only will be used.
+ XHeaderNetmapEpoch = ReservedXHeaderPrefix + "NETMAP_EPOCH"
+
+ // XHeaderNetmapLookupDepth is a key to the reserved X-header that limits
+ // how many past epochs back the node will can lookup. If set to '0' or not
+ // set, the current epoch only will be used.
+ XHeaderNetmapLookupDepth = ReservedXHeaderPrefix + "NETMAP_LOOKUP_DEPTH"
+)
+
+// ReservedXHeaderPrefixNeoFS is a prefix of keys to "well-known" X-headers.
+// Deprecated: use ReservedXHeaderPrefix.
+const ReservedXHeaderPrefixNeoFS = "__NEOFS__"
+
+const (
+ // XHeaderNetmapEpochNeoFS is a key to the reserved X-header that specifies netmap epoch
+ // to use for object placement calculation. If set to '0' or not set, the current
+ // epoch only will be used.
+ // Deprecated: use XHeaderNetmapEpoch.
+ XHeaderNetmapEpochNeoFS = ReservedXHeaderPrefixNeoFS + "NETMAP_EPOCH"
+
+ // XHeaderNetmapLookupDepthNeoFS is a key to the reserved X-header that limits
+ // how many past epochs back the node will can lookup. If set to '0' or not
+ // set, the current epoch only will be used.
+ // Deprecated: use XHeaderNetmapLookupDepth.
+ XHeaderNetmapLookupDepthNeoFS = ReservedXHeaderPrefixNeoFS + "NETMAP_LOOKUP_DEPTH"
+)
diff --git a/api/signature/body.go b/api/signature/body.go
new file mode 100644
index 0000000..50a09e9
--- /dev/null
+++ b/api/signature/body.go
@@ -0,0 +1,116 @@
+package signature
+
+import (
+ "fmt"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/accounting"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/apemanager"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+)
+
+// nolint:funlen
+func serviceMessageBody(req any) stableMarshaler {
+ switch v := req.(type) {
+ default:
+ panic(fmt.Sprintf("unsupported session message %T", req))
+
+ /* Accounting */
+ case *accounting.BalanceRequest:
+ return v.GetBody()
+ case *accounting.BalanceResponse:
+ return v.GetBody()
+
+ /* Session */
+ case *session.CreateRequest:
+ return v.GetBody()
+ case *session.CreateResponse:
+ return v.GetBody()
+
+ /* Container */
+ case *container.PutRequest:
+ return v.GetBody()
+ case *container.PutResponse:
+ return v.GetBody()
+ case *container.DeleteRequest:
+ return v.GetBody()
+ case *container.DeleteResponse:
+ return v.GetBody()
+ case *container.GetRequest:
+ return v.GetBody()
+ case *container.GetResponse:
+ return v.GetBody()
+ case *container.ListRequest:
+ return v.GetBody()
+ case *container.ListResponse:
+ return v.GetBody()
+
+ /* Object */
+ case *object.PutRequest:
+ return v.GetBody()
+ case *object.PutResponse:
+ return v.GetBody()
+ case *object.GetRequest:
+ return v.GetBody()
+ case *object.GetResponse:
+ return v.GetBody()
+ case *object.HeadRequest:
+ return v.GetBody()
+ case *object.HeadResponse:
+ return v.GetBody()
+ case *object.SearchRequest:
+ return v.GetBody()
+ case *object.SearchResponse:
+ return v.GetBody()
+ case *object.DeleteRequest:
+ return v.GetBody()
+ case *object.DeleteResponse:
+ return v.GetBody()
+ case *object.GetRangeRequest:
+ return v.GetBody()
+ case *object.GetRangeResponse:
+ return v.GetBody()
+ case *object.GetRangeHashRequest:
+ return v.GetBody()
+ case *object.GetRangeHashResponse:
+ return v.GetBody()
+ case *object.PutSingleRequest:
+ return v.GetBody()
+ case *object.PutSingleResponse:
+ return v.GetBody()
+ case *object.PatchRequest:
+ return v.GetBody()
+ case *object.PatchResponse:
+ return v.GetBody()
+
+ /* Netmap */
+ case *netmap.LocalNodeInfoRequest:
+ return v.GetBody()
+ case *netmap.LocalNodeInfoResponse:
+ return v.GetBody()
+ case *netmap.NetworkInfoRequest:
+ return v.GetBody()
+ case *netmap.NetworkInfoResponse:
+ return v.GetBody()
+ case *netmap.SnapshotRequest:
+ return v.GetBody()
+ case *netmap.SnapshotResponse:
+ return v.GetBody()
+
+ /* APEManager */
+ case *apemanager.AddChainRequest:
+ return v.GetBody()
+ case *apemanager.AddChainResponse:
+ return v.GetBody()
+ case *apemanager.RemoveChainRequest:
+ return v.GetBody()
+ case *apemanager.RemoveChainResponse:
+ return v.GetBody()
+ case *apemanager.ListChainsRequest:
+ return v.GetBody()
+ case *apemanager.ListChainsResponse:
+ return v.GetBody()
+ }
+}
diff --git a/api/signature/marshaller.go b/api/signature/marshaller.go
new file mode 100644
index 0000000..ff9beb3
--- /dev/null
+++ b/api/signature/marshaller.go
@@ -0,0 +1,26 @@
+package signature
+
+type stableMarshaler interface {
+ StableMarshal([]byte) []byte
+ StableSize() int
+}
+
+type StableMarshalerWrapper struct {
+ SM stableMarshaler
+}
+
+func (s StableMarshalerWrapper) ReadSignedData(buf []byte) ([]byte, error) {
+ if s.SM != nil {
+ return s.SM.StableMarshal(buf), nil
+ }
+
+ return nil, nil
+}
+
+func (s StableMarshalerWrapper) SignedDataSize() int {
+ if s.SM != nil {
+ return s.SM.StableSize()
+ }
+
+ return 0
+}
diff --git a/api/signature/sign.go b/api/signature/sign.go
new file mode 100644
index 0000000..04b8d36
--- /dev/null
+++ b/api/signature/sign.go
@@ -0,0 +1,122 @@
+package signature
+
+import (
+ "crypto/ecdsa"
+ "fmt"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/signature"
+ "golang.org/x/sync/errgroup"
+)
+
+type serviceRequest interface {
+ GetMetaHeader() *session.RequestMetaHeader
+ GetVerificationHeader() *session.RequestVerificationHeader
+ SetVerificationHeader(*session.RequestVerificationHeader)
+}
+
+type serviceResponse interface {
+ GetMetaHeader() *session.ResponseMetaHeader
+ GetVerificationHeader() *session.ResponseVerificationHeader
+ SetVerificationHeader(*session.ResponseVerificationHeader)
+}
+
+type signatureReceiver interface {
+ SetBodySignature(*refs.Signature)
+ SetMetaSignature(*refs.Signature)
+ SetOriginSignature(*refs.Signature)
+}
+
+// SignServiceMessage signes service message with key.
+func SignServiceMessage(key *ecdsa.PrivateKey, msg any) error {
+ switch v := msg.(type) {
+ case nil:
+ return nil
+ case serviceRequest:
+ return signServiceRequest(key, v)
+ case serviceResponse:
+ return signServiceResponse(key, v)
+ default:
+ panic(fmt.Sprintf("unsupported session message %T", v))
+ }
+}
+
+func signServiceRequest(key *ecdsa.PrivateKey, v serviceRequest) error {
+ result := &session.RequestVerificationHeader{}
+ body := serviceMessageBody(v)
+ meta := v.GetMetaHeader()
+ header := v.GetVerificationHeader()
+ if err := signMessageParts(key, body, meta, header, header != nil, result); err != nil {
+ return err
+ }
+ result.SetOrigin(header)
+ v.SetVerificationHeader(result)
+ return nil
+}
+
+func signServiceResponse(key *ecdsa.PrivateKey, v serviceResponse) error {
+ result := &session.ResponseVerificationHeader{}
+ body := serviceMessageBody(v)
+ meta := v.GetMetaHeader()
+ header := v.GetVerificationHeader()
+ if err := signMessageParts(key, body, meta, header, header != nil, result); err != nil {
+ return err
+ }
+ result.SetOrigin(header)
+ v.SetVerificationHeader(result)
+ return nil
+}
+
+func signMessageParts(key *ecdsa.PrivateKey, body, meta, header stableMarshaler, hasHeader bool, result signatureReceiver) error {
+ eg := &errgroup.Group{}
+ if !hasHeader {
+ // sign session message body
+ eg.Go(func() error {
+ if err := signServiceMessagePart(key, body, result.SetBodySignature); err != nil {
+ return fmt.Errorf("could not sign body: %w", err)
+ }
+ return nil
+ })
+ }
+
+ // sign meta header
+ eg.Go(func() error {
+ if err := signServiceMessagePart(key, meta, result.SetMetaSignature); err != nil {
+ return fmt.Errorf("could not sign meta header: %w", err)
+ }
+ return nil
+ })
+
+ // sign verification header origin
+ eg.Go(func() error {
+ if err := signServiceMessagePart(key, header, result.SetOriginSignature); err != nil {
+ return fmt.Errorf("could not sign origin of verification header: %w", err)
+ }
+ return nil
+ })
+ return eg.Wait()
+}
+
+func signServiceMessagePart(key *ecdsa.PrivateKey, part stableMarshaler, sigWrite func(*refs.Signature)) error {
+ var sig *refs.Signature
+
+ wrapper := StableMarshalerWrapper{
+ SM: part,
+ }
+ // sign part
+ if err := signature.SignDataWithHandler(
+ key,
+ wrapper,
+ func(s *refs.Signature) {
+ sig = s
+ },
+ ); err != nil {
+ return err
+ }
+
+ // write part signature
+ sigWrite(sig)
+
+ return nil
+}
diff --git a/api/signature/sign_test.go b/api/signature/sign_test.go
new file mode 100644
index 0000000..23779c4
--- /dev/null
+++ b/api/signature/sign_test.go
@@ -0,0 +1,125 @@
+package signature
+
+import (
+ "testing"
+
+ crypto "git.frostfs.info/TrueCloudLab/frostfs-crypto"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/accounting"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "github.com/stretchr/testify/require"
+)
+
+func TestBalanceResponse(t *testing.T) {
+ dec := new(accounting.Decimal)
+ dec.SetValue(100)
+
+ body := new(accounting.BalanceResponseBody)
+ body.SetBalance(dec)
+
+ meta := new(session.ResponseMetaHeader)
+ meta.SetTTL(1)
+
+ req := new(accounting.BalanceResponse)
+ req.SetBody(body)
+ req.SetMetaHeader(meta)
+
+ // verify unsigned request
+ require.Error(t, VerifyServiceMessage(req))
+
+ key, err := crypto.LoadPrivateKey("Kwk6k2eC3L3QuPvD8aiaNyoSXgQ2YL1bwS5CP1oKoA9waeAze97s")
+ require.NoError(t, err)
+
+ // sign request
+ require.NoError(t, SignServiceMessage(key, req))
+
+ // verification must pass
+ require.NoError(t, VerifyServiceMessage(req))
+
+ // add level to meta header matryoshka
+ meta = new(session.ResponseMetaHeader)
+ meta.SetOrigin(req.GetMetaHeader())
+ req.SetMetaHeader(meta)
+
+ // sign request
+ require.NoError(t, SignServiceMessage(key, req))
+
+ // verification must pass
+ require.NoError(t, VerifyServiceMessage(req))
+
+ // corrupt body
+ dec.SetValue(dec.GetValue() + 1)
+
+ // verification must fail
+ require.Error(t, VerifyServiceMessage(req))
+
+ // restore body
+ dec.SetValue(dec.GetValue() - 1)
+
+ // corrupt meta header
+ meta.SetTTL(meta.GetTTL() + 1)
+
+ // verification must fail
+ require.Error(t, VerifyServiceMessage(req))
+
+ // restore meta header
+ meta.SetTTL(meta.GetTTL() - 1)
+
+ // corrupt origin verification header
+ req.GetVerificationHeader().SetOrigin(nil)
+
+ // verification must fail
+ require.Error(t, VerifyServiceMessage(req))
+}
+
+func BenchmarkSignRequest(b *testing.B) {
+ key, _ := crypto.LoadPrivateKey("Kwk6k2eC3L3QuPvD8aiaNyoSXgQ2YL1bwS5CP1oKoA9waeAze97s")
+
+ b.ResetTimer()
+ b.ReportAllocs()
+
+ for range b.N {
+ b.StopTimer()
+ dec := new(accounting.Decimal)
+ dec.SetValue(100)
+
+ body := new(accounting.BalanceResponseBody)
+ body.SetBalance(dec)
+
+ meta := new(session.ResponseMetaHeader)
+ meta.SetTTL(1)
+
+ resp := new(accounting.BalanceResponse)
+ resp.SetBody(body)
+ resp.SetMetaHeader(meta)
+
+ b.StartTimer()
+ SignServiceMessage(key, resp)
+ }
+}
+
+func BenchmarkVerifyRequest(b *testing.B) {
+ key, _ := crypto.LoadPrivateKey("Kwk6k2eC3L3QuPvD8aiaNyoSXgQ2YL1bwS5CP1oKoA9waeAze97s")
+
+ b.ResetTimer()
+ b.ReportAllocs()
+
+ for range b.N {
+ b.StopTimer()
+ dec := new(accounting.Decimal)
+ dec.SetValue(100)
+
+ body := new(accounting.BalanceResponseBody)
+ body.SetBalance(dec)
+
+ meta := new(session.ResponseMetaHeader)
+ meta.SetTTL(1)
+
+ resp := new(accounting.BalanceResponse)
+ resp.SetBody(body)
+ resp.SetMetaHeader(meta)
+ SignServiceMessage(key, resp)
+ b.StartTimer()
+
+ VerifyServiceMessage(resp)
+ }
+}
diff --git a/api/signature/verify.go b/api/signature/verify.go
new file mode 100644
index 0000000..26dda83
--- /dev/null
+++ b/api/signature/verify.go
@@ -0,0 +1,127 @@
+package signature
+
+import (
+ "errors"
+ "fmt"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/signature"
+ "golang.org/x/sync/errgroup"
+)
+
+type signatureProvider interface {
+ GetBodySignature() *refs.Signature
+ GetMetaSignature() *refs.Signature
+ GetOriginSignature() *refs.Signature
+}
+
+// VerifyServiceMessage verifies service message.
+func VerifyServiceMessage(msg any) error {
+ switch v := msg.(type) {
+ case nil:
+ return nil
+ case serviceRequest:
+ return verifyServiceRequest(v)
+ case serviceResponse:
+ return verifyServiceResponse(v)
+ default:
+ panic(fmt.Sprintf("unsupported session message %T", v))
+ }
+}
+
+func verifyServiceRequest(v serviceRequest) error {
+ meta := v.GetMetaHeader()
+ verificationHeader := v.GetVerificationHeader()
+ body := serviceMessageBody(v)
+ return verifyServiceRequestRecursive(body, meta, verificationHeader)
+}
+
+func verifyServiceRequestRecursive(body stableMarshaler, meta *session.RequestMetaHeader, verify *session.RequestVerificationHeader) error {
+ verificationHeaderOrigin := verify.GetOrigin()
+ metaOrigin := meta.GetOrigin()
+
+ stop, err := verifyMessageParts(body, meta, verificationHeaderOrigin, verificationHeaderOrigin != nil, verify)
+ if err != nil {
+ return err
+ }
+ if stop {
+ return nil
+ }
+
+ return verifyServiceRequestRecursive(body, metaOrigin, verificationHeaderOrigin)
+}
+
+func verifyMessageParts(body, meta, originHeader stableMarshaler, hasOriginHeader bool, sigProvider signatureProvider) (stop bool, err error) {
+ eg := &errgroup.Group{}
+
+ eg.Go(func() error {
+ if err := verifyServiceMessagePart(meta, sigProvider.GetMetaSignature); err != nil {
+ return fmt.Errorf("could not verify meta header: %w", err)
+ }
+ return nil
+ })
+
+ eg.Go(func() error {
+ if err := verifyServiceMessagePart(originHeader, sigProvider.GetOriginSignature); err != nil {
+ return fmt.Errorf("could not verify origin of verification header: %w", err)
+ }
+ return nil
+ })
+
+ if !hasOriginHeader {
+ eg.Go(func() error {
+ if err := verifyServiceMessagePart(body, sigProvider.GetBodySignature); err != nil {
+ return fmt.Errorf("could not verify body: %w", err)
+ }
+ return nil
+ })
+ }
+
+ if err := eg.Wait(); err != nil {
+ return false, err
+ }
+
+ if !hasOriginHeader {
+ return true, nil
+ }
+
+ if sigProvider.GetBodySignature() != nil {
+ return false, errors.New("body signature misses at the matryoshka upper level")
+ }
+
+ return false, nil
+}
+
+func verifyServiceResponse(v serviceResponse) error {
+ meta := v.GetMetaHeader()
+ verificationHeader := v.GetVerificationHeader()
+ body := serviceMessageBody(v)
+ return verifyServiceResponseRecursive(body, meta, verificationHeader)
+}
+
+func verifyServiceResponseRecursive(body stableMarshaler, meta *session.ResponseMetaHeader, verify *session.ResponseVerificationHeader) error {
+ verificationHeaderOrigin := verify.GetOrigin()
+ metaOrigin := meta.GetOrigin()
+
+ stop, err := verifyMessageParts(body, meta, verificationHeaderOrigin, verificationHeaderOrigin != nil, verify)
+ if err != nil {
+ return err
+ }
+ if stop {
+ return nil
+ }
+
+ return verifyServiceResponseRecursive(body, metaOrigin, verificationHeaderOrigin)
+}
+
+func verifyServiceMessagePart(part stableMarshaler, sigRdr func() *refs.Signature) error {
+ wrapper := StableMarshalerWrapper{
+ SM: part,
+ }
+
+ return signature.VerifyDataWithSource(
+ wrapper,
+ sigRdr,
+ )
+}
diff --git a/api/status/convert.go b/api/status/convert.go
new file mode 100644
index 0000000..2612c52
--- /dev/null
+++ b/api/status/convert.go
@@ -0,0 +1,95 @@
+package status
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ status "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status/grpc"
+)
+
+func (x *Detail) ToGRPCMessage() grpc.Message {
+ var m *status.Status_Detail
+
+ if x != nil {
+ m = new(status.Status_Detail)
+
+ m.SetId(x.id)
+ m.SetValue(x.val)
+ }
+
+ return m
+}
+
+func (x *Detail) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*status.Status_Detail)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ x.id = v.GetId()
+ x.val = v.GetValue()
+
+ return nil
+}
+
+func CodeFromGRPC(v uint32) Code {
+ return Code(v)
+}
+
+func CodeToGRPC(v Code) uint32 {
+ return uint32(v)
+}
+
+func (x *Status) ToGRPCMessage() grpc.Message {
+ var m *status.Status
+
+ if x != nil {
+ m = new(status.Status)
+
+ m.SetCode(CodeToGRPC(x.code))
+ m.SetMessage(x.msg)
+
+ var ds []status.Status_Detail
+
+ if ln := len(x.details); ln > 0 {
+ ds = make([]status.Status_Detail, 0, ln)
+
+ for i := range ln {
+ ds = append(ds, *x.details[i].ToGRPCMessage().(*status.Status_Detail))
+ }
+ }
+
+ m.SetDetails(ds)
+ }
+
+ return m
+}
+
+func (x *Status) FromGRPCMessage(m grpc.Message) error {
+ v, ok := m.(*status.Status)
+ if !ok {
+ return message.NewUnexpectedMessageType(m, v)
+ }
+
+ var (
+ ds []Detail
+ dsV2 = v.GetDetails()
+ )
+
+ if dsV2 != nil {
+ ln := len(dsV2)
+
+ ds = make([]Detail, ln)
+
+ for i := range ln {
+ if err := ds[i].FromGRPCMessage(&dsV2[i]); err != nil {
+ return err
+ }
+ }
+ }
+
+ x.details = ds
+ x.msg = v.GetMessage()
+ x.code = CodeFromGRPC(v.GetCode())
+
+ return nil
+}
diff --git a/api/status/details.go b/api/status/details.go
new file mode 100644
index 0000000..5b8f460
--- /dev/null
+++ b/api/status/details.go
@@ -0,0 +1,8 @@
+package status
+
+// details for WrongMagicNumber code.
+const (
+ // DetailIDCorrectMagic is an identifier of details with correct network magic
+ // which can be attached to WrongMagicNumber code.
+ DetailIDCorrectMagic = iota
+)
diff --git a/api/status/grpc/types_frostfs.pb.go b/api/status/grpc/types_frostfs.pb.go
new file mode 100644
index 0000000..35dec11
--- /dev/null
+++ b/api/status/grpc/types_frostfs.pb.go
@@ -0,0 +1,694 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package status
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+ strconv "strconv"
+)
+
+type Section int32
+
+const (
+ Section_SECTION_SUCCESS Section = 0
+ Section_SECTION_FAILURE_COMMON Section = 1
+ Section_SECTION_OBJECT Section = 2
+ Section_SECTION_CONTAINER Section = 3
+ Section_SECTION_SESSION Section = 4
+ Section_SECTION_APE_MANAGER Section = 5
+)
+
+var (
+ Section_name = map[int32]string{
+ 0: "SECTION_SUCCESS",
+ 1: "SECTION_FAILURE_COMMON",
+ 2: "SECTION_OBJECT",
+ 3: "SECTION_CONTAINER",
+ 4: "SECTION_SESSION",
+ 5: "SECTION_APE_MANAGER",
+ }
+ Section_value = map[string]int32{
+ "SECTION_SUCCESS": 0,
+ "SECTION_FAILURE_COMMON": 1,
+ "SECTION_OBJECT": 2,
+ "SECTION_CONTAINER": 3,
+ "SECTION_SESSION": 4,
+ "SECTION_APE_MANAGER": 5,
+ }
+)
+
+func (x Section) String() string {
+ if v, ok := Section_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *Section) FromString(s string) bool {
+ if v, ok := Section_value[s]; ok {
+ *x = Section(v)
+ return true
+ }
+ return false
+}
+
+type Success int32
+
+const (
+ Success_OK Success = 0
+)
+
+var (
+ Success_name = map[int32]string{
+ 0: "OK",
+ }
+ Success_value = map[string]int32{
+ "OK": 0,
+ }
+)
+
+func (x Success) String() string {
+ if v, ok := Success_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *Success) FromString(s string) bool {
+ if v, ok := Success_value[s]; ok {
+ *x = Success(v)
+ return true
+ }
+ return false
+}
+
+type CommonFail int32
+
+const (
+ CommonFail_INTERNAL CommonFail = 0
+ CommonFail_WRONG_MAGIC_NUMBER CommonFail = 1
+ CommonFail_SIGNATURE_VERIFICATION_FAIL CommonFail = 2
+ CommonFail_NODE_UNDER_MAINTENANCE CommonFail = 3
+ CommonFail_INVALID_ARGUMENT CommonFail = 4
+)
+
+var (
+ CommonFail_name = map[int32]string{
+ 0: "INTERNAL",
+ 1: "WRONG_MAGIC_NUMBER",
+ 2: "SIGNATURE_VERIFICATION_FAIL",
+ 3: "NODE_UNDER_MAINTENANCE",
+ 4: "INVALID_ARGUMENT",
+ }
+ CommonFail_value = map[string]int32{
+ "INTERNAL": 0,
+ "WRONG_MAGIC_NUMBER": 1,
+ "SIGNATURE_VERIFICATION_FAIL": 2,
+ "NODE_UNDER_MAINTENANCE": 3,
+ "INVALID_ARGUMENT": 4,
+ }
+)
+
+func (x CommonFail) String() string {
+ if v, ok := CommonFail_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *CommonFail) FromString(s string) bool {
+ if v, ok := CommonFail_value[s]; ok {
+ *x = CommonFail(v)
+ return true
+ }
+ return false
+}
+
+type Object int32
+
+const (
+ Object_ACCESS_DENIED Object = 0
+ Object_OBJECT_NOT_FOUND Object = 1
+ Object_LOCKED Object = 2
+ Object_LOCK_NON_REGULAR_OBJECT Object = 3
+ Object_OBJECT_ALREADY_REMOVED Object = 4
+ Object_OUT_OF_RANGE Object = 5
+)
+
+var (
+ Object_name = map[int32]string{
+ 0: "ACCESS_DENIED",
+ 1: "OBJECT_NOT_FOUND",
+ 2: "LOCKED",
+ 3: "LOCK_NON_REGULAR_OBJECT",
+ 4: "OBJECT_ALREADY_REMOVED",
+ 5: "OUT_OF_RANGE",
+ }
+ Object_value = map[string]int32{
+ "ACCESS_DENIED": 0,
+ "OBJECT_NOT_FOUND": 1,
+ "LOCKED": 2,
+ "LOCK_NON_REGULAR_OBJECT": 3,
+ "OBJECT_ALREADY_REMOVED": 4,
+ "OUT_OF_RANGE": 5,
+ }
+)
+
+func (x Object) String() string {
+ if v, ok := Object_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *Object) FromString(s string) bool {
+ if v, ok := Object_value[s]; ok {
+ *x = Object(v)
+ return true
+ }
+ return false
+}
+
+type Container int32
+
+const (
+ Container_CONTAINER_NOT_FOUND Container = 0
+ Container_EACL_NOT_FOUND Container = 1
+ Container_CONTAINER_ACCESS_DENIED Container = 2
+)
+
+var (
+ Container_name = map[int32]string{
+ 0: "CONTAINER_NOT_FOUND",
+ 1: "EACL_NOT_FOUND",
+ 2: "CONTAINER_ACCESS_DENIED",
+ }
+ Container_value = map[string]int32{
+ "CONTAINER_NOT_FOUND": 0,
+ "EACL_NOT_FOUND": 1,
+ "CONTAINER_ACCESS_DENIED": 2,
+ }
+)
+
+func (x Container) String() string {
+ if v, ok := Container_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *Container) FromString(s string) bool {
+ if v, ok := Container_value[s]; ok {
+ *x = Container(v)
+ return true
+ }
+ return false
+}
+
+type Session int32
+
+const (
+ Session_TOKEN_NOT_FOUND Session = 0
+ Session_TOKEN_EXPIRED Session = 1
+)
+
+var (
+ Session_name = map[int32]string{
+ 0: "TOKEN_NOT_FOUND",
+ 1: "TOKEN_EXPIRED",
+ }
+ Session_value = map[string]int32{
+ "TOKEN_NOT_FOUND": 0,
+ "TOKEN_EXPIRED": 1,
+ }
+)
+
+func (x Session) String() string {
+ if v, ok := Session_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *Session) FromString(s string) bool {
+ if v, ok := Session_value[s]; ok {
+ *x = Session(v)
+ return true
+ }
+ return false
+}
+
+type APEManager int32
+
+const (
+ APEManager_APE_MANAGER_ACCESS_DENIED APEManager = 0
+)
+
+var (
+ APEManager_name = map[int32]string{
+ 0: "APE_MANAGER_ACCESS_DENIED",
+ }
+ APEManager_value = map[string]int32{
+ "APE_MANAGER_ACCESS_DENIED": 0,
+ }
+)
+
+func (x APEManager) String() string {
+ if v, ok := APEManager_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *APEManager) FromString(s string) bool {
+ if v, ok := APEManager_value[s]; ok {
+ *x = APEManager(v)
+ return true
+ }
+ return false
+}
+
+type Status_Detail struct {
+ Id uint32 `json:"id"`
+ Value []byte `json:"value"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Status_Detail)(nil)
+ _ encoding.ProtoUnmarshaler = (*Status_Detail)(nil)
+ _ json.Marshaler = (*Status_Detail)(nil)
+ _ json.Unmarshaler = (*Status_Detail)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Status_Detail) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.UInt32Size(1, x.Id)
+ size += proto.BytesSize(2, x.Value)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Status_Detail) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Status_Detail) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Id != 0 {
+ mm.AppendUint32(1, x.Id)
+ }
+ if len(x.Value) != 0 {
+ mm.AppendBytes(2, x.Value)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Status_Detail) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Status_Detail")
+ }
+ switch fc.FieldNum {
+ case 1: // Id
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Id")
+ }
+ x.Id = data
+ case 2: // Value
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Value")
+ }
+ x.Value = data
+ }
+ }
+ return nil
+}
+func (x *Status_Detail) GetId() uint32 {
+ if x != nil {
+ return x.Id
+ }
+ return 0
+}
+func (x *Status_Detail) SetId(v uint32) {
+ x.Id = v
+}
+func (x *Status_Detail) GetValue() []byte {
+ if x != nil {
+ return x.Value
+ }
+ return nil
+}
+func (x *Status_Detail) SetValue(v []byte) {
+ x.Value = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Status_Detail) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Status_Detail) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"id\":"
+ out.RawString(prefix)
+ out.Uint32(x.Id)
+ }
+ {
+ 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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Status_Detail) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Status_Detail) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "id":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.Id = f
+ }
+ case "value":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.Value = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Status struct {
+ Code uint32 `json:"code"`
+ Message string `json:"message"`
+ Details []Status_Detail `json:"details"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Status)(nil)
+ _ encoding.ProtoUnmarshaler = (*Status)(nil)
+ _ json.Marshaler = (*Status)(nil)
+ _ json.Unmarshaler = (*Status)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Status) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.UInt32Size(1, x.Code)
+ size += proto.StringSize(2, x.Message)
+ for i := range x.Details {
+ size += proto.NestedStructureSizeUnchecked(3, &x.Details[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Status) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Status) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.Code != 0 {
+ mm.AppendUint32(1, x.Code)
+ }
+ if len(x.Message) != 0 {
+ mm.AppendString(2, x.Message)
+ }
+ for i := range x.Details {
+ x.Details[i].EmitProtobuf(mm.AppendMessage(3))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Status) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Status")
+ }
+ switch fc.FieldNum {
+ case 1: // Code
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Code")
+ }
+ x.Code = data
+ case 2: // Message
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Message")
+ }
+ x.Message = data
+ case 3: // Details
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Details")
+ }
+ x.Details = append(x.Details, Status_Detail{})
+ ff := &x.Details[len(x.Details)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *Status) GetCode() uint32 {
+ if x != nil {
+ return x.Code
+ }
+ return 0
+}
+func (x *Status) SetCode(v uint32) {
+ x.Code = v
+}
+func (x *Status) GetMessage() string {
+ if x != nil {
+ return x.Message
+ }
+ return ""
+}
+func (x *Status) SetMessage(v string) {
+ x.Message = v
+}
+func (x *Status) GetDetails() []Status_Detail {
+ if x != nil {
+ return x.Details
+ }
+ return nil
+}
+func (x *Status) SetDetails(v []Status_Detail) {
+ x.Details = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Status) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Status) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"code\":"
+ out.RawString(prefix)
+ out.Uint32(x.Code)
+ }
+ {
+ 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 = "\"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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Status) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Status) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "code":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.Code = f
+ }
+ case "message":
+ {
+ var f string
+ f = in.String()
+ x.Message = f
+ }
+ case "details":
+ {
+ var f Status_Detail
+ var list []Status_Detail
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = Status_Detail{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Details = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/status/grpc/types_frostfs_fuzz.go b/api/status/grpc/types_frostfs_fuzz.go
new file mode 100644
index 0000000..ce9d84e
--- /dev/null
+++ b/api/status/grpc/types_frostfs_fuzz.go
@@ -0,0 +1,26 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package status
+
+func DoFuzzProtoStatus(data []byte) int {
+ msg := new(Status)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONStatus(data []byte) int {
+ msg := new(Status)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/status/grpc/types_frostfs_test.go b/api/status/grpc/types_frostfs_test.go
new file mode 100644
index 0000000..dfc5631
--- /dev/null
+++ b/api/status/grpc/types_frostfs_test.go
@@ -0,0 +1,21 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package status
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoStatus(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoStatus(data)
+ })
+}
+func FuzzJSONStatus(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONStatus(data)
+ })
+}
diff --git a/api/status/marshal.go b/api/status/marshal.go
new file mode 100644
index 0000000..663ead7
--- /dev/null
+++ b/api/status/marshal.go
@@ -0,0 +1,92 @@
+package status
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ status "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status/grpc"
+ protoutil "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+)
+
+const (
+ _ = iota
+ detailIDFNum
+ detailValueFNum
+)
+
+func (x *Detail) StableMarshal(buf []byte) []byte {
+ if x == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, x.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.UInt32Marshal(detailIDFNum, buf[offset:], x.id)
+ protoutil.BytesMarshal(detailValueFNum, buf[offset:], x.val)
+
+ return buf
+}
+
+func (x *Detail) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+
+ size += protoutil.UInt32Size(detailIDFNum, x.id)
+ size += protoutil.BytesSize(detailValueFNum, x.val)
+
+ return size
+}
+
+func (x *Detail) Unmarshal(data []byte) error {
+ return message.Unmarshal(x, data, new(status.Status_Detail))
+}
+
+const (
+ _ = iota
+ statusCodeFNum
+ statusMsgFNum
+ statusDetailsFNum
+)
+
+func (x *Status) StableMarshal(buf []byte) []byte {
+ if x == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, x.StableSize())
+ }
+
+ var offset int
+
+ offset += protoutil.UInt32Marshal(statusCodeFNum, buf[offset:], CodeToGRPC(x.code))
+ offset += protoutil.StringMarshal(statusMsgFNum, buf[offset:], x.msg)
+
+ for i := range x.details {
+ offset += protoutil.NestedStructureMarshal(statusDetailsFNum, buf[offset:], &x.details[i])
+ }
+
+ return buf
+}
+
+func (x *Status) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+
+ size += protoutil.UInt32Size(statusCodeFNum, CodeToGRPC(x.code))
+ size += protoutil.StringSize(statusMsgFNum, x.msg)
+
+ for i := range x.details {
+ size += protoutil.NestedStructureSize(statusDetailsFNum, &x.details[i])
+ }
+
+ return size
+}
+
+func (x *Status) Unmarshal(data []byte) error {
+ return message.Unmarshal(x, data, new(status.Status))
+}
diff --git a/api/status/message_test.go b/api/status/message_test.go
new file mode 100644
index 0000000..0185032
--- /dev/null
+++ b/api/status/message_test.go
@@ -0,0 +1,16 @@
+package status_test
+
+import (
+ "testing"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ messagetest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message/test"
+ statustest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status/test"
+)
+
+func TestMessageConvert(t *testing.T) {
+ messagetest.TestRPCMessage(t,
+ func(empty bool) message.Message { return statustest.Detail(empty) },
+ func(empty bool) message.Message { return statustest.Status(empty) },
+ )
+}
diff --git a/api/status/status.go b/api/status/status.go
new file mode 100644
index 0000000..53d361e
--- /dev/null
+++ b/api/status/status.go
@@ -0,0 +1,103 @@
+package status
+
+const sectionBitSize = 10
+
+// InSections checks if the Code is in [i,j] section list.
+func (x Code) InSections(i, j uint32) bool {
+ return uint32(x) >= i< 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Tombstone")
+ }
+ switch fc.FieldNum {
+ case 1: // ExpirationEpoch
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "ExpirationEpoch")
+ }
+ x.ExpirationEpoch = data
+ case 2: // SplitId
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "SplitId")
+ }
+ x.SplitId = data
+ case 3: // Members
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "Members")
+ }
+ x.Members = append(x.Members, grpc.ObjectID{})
+ ff := &x.Members[len(x.Members)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *Tombstone) GetExpirationEpoch() uint64 {
+ if x != nil {
+ return x.ExpirationEpoch
+ }
+ return 0
+}
+func (x *Tombstone) SetExpirationEpoch(v uint64) {
+ x.ExpirationEpoch = v
+}
+func (x *Tombstone) GetSplitId() []byte {
+ if x != nil {
+ return x.SplitId
+ }
+ return nil
+}
+func (x *Tombstone) SetSplitId(v []byte) {
+ x.SplitId = v
+}
+func (x *Tombstone) GetMembers() []grpc.ObjectID {
+ if x != nil {
+ return x.Members
+ }
+ return nil
+}
+func (x *Tombstone) SetMembers(v []grpc.ObjectID) {
+ x.Members = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Tombstone) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Tombstone) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"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 = "\"splitID\":"
+ out.RawString(prefix)
+ if x.SplitId != nil {
+ out.Base64Bytes(x.SplitId)
+ } else {
+ out.String("")
+ }
+ }
+ {
+ 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('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Tombstone) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Tombstone) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "expirationEpoch":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.ExpirationEpoch = f
+ }
+ case "splitID":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.SplitId = f
+ }
+ case "members":
+ {
+ var f grpc.ObjectID
+ var list []grpc.ObjectID
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = grpc.ObjectID{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.Members = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/tombstone/grpc/types_frostfs_fuzz.go b/api/tombstone/grpc/types_frostfs_fuzz.go
new file mode 100644
index 0000000..57cfb58
--- /dev/null
+++ b/api/tombstone/grpc/types_frostfs_fuzz.go
@@ -0,0 +1,26 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package tombstone
+
+func DoFuzzProtoTombstone(data []byte) int {
+ msg := new(Tombstone)
+ if err := msg.UnmarshalProtobuf(data); err != nil {
+ return 0
+ }
+ _ = msg.MarshalProtobuf(nil)
+ return 1
+}
+func DoFuzzJSONTombstone(data []byte) int {
+ msg := new(Tombstone)
+ if err := msg.UnmarshalJSON(data); err != nil {
+ return 0
+ }
+ _, err := msg.MarshalJSON()
+ if err != nil {
+ panic(err)
+ }
+ return 1
+}
diff --git a/api/tombstone/grpc/types_frostfs_test.go b/api/tombstone/grpc/types_frostfs_test.go
new file mode 100644
index 0000000..8264824
--- /dev/null
+++ b/api/tombstone/grpc/types_frostfs_test.go
@@ -0,0 +1,21 @@
+//go:build gofuzz
+// +build gofuzz
+
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package tombstone
+
+import (
+ testing "testing"
+)
+
+func FuzzProtoTombstone(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzProtoTombstone(data)
+ })
+}
+func FuzzJSONTombstone(f *testing.F) {
+ f.Fuzz(func(t *testing.T, data []byte) {
+ DoFuzzJSONTombstone(data)
+ })
+}
diff --git a/api/tombstone/json.go b/api/tombstone/json.go
new file mode 100644
index 0000000..9b816fe
--- /dev/null
+++ b/api/tombstone/json.go
@@ -0,0 +1,14 @@
+package tombstone
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ tombstone "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/tombstone/grpc"
+)
+
+func (s *Tombstone) MarshalJSON() ([]byte, error) {
+ return message.MarshalJSON(s)
+}
+
+func (s *Tombstone) UnmarshalJSON(data []byte) error {
+ return message.UnmarshalJSON(s, data, new(tombstone.Tombstone))
+}
diff --git a/api/tombstone/marshal.go b/api/tombstone/marshal.go
new file mode 100644
index 0000000..dda9469
--- /dev/null
+++ b/api/tombstone/marshal.go
@@ -0,0 +1,56 @@
+package tombstone
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ tombstone "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/tombstone/grpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+)
+
+const (
+ expFNum = 1
+ splitIDFNum = 2
+ membersFNum = 3
+)
+
+// StableMarshal marshals unified tombstone message in a protobuf
+// compatible way without field order shuffle.
+func (s *Tombstone) StableMarshal(buf []byte) []byte {
+ if s == nil {
+ return []byte{}
+ }
+
+ if buf == nil {
+ buf = make([]byte, s.StableSize())
+ }
+
+ var offset int
+
+ offset += proto.UInt64Marshal(expFNum, buf[offset:], s.exp)
+ offset += proto.BytesMarshal(splitIDFNum, buf[offset:], s.splitID)
+
+ for i := range s.members {
+ offset += proto.NestedStructureMarshal(membersFNum, buf[offset:], &s.members[i])
+ }
+
+ return buf
+}
+
+// StableSize returns size of tombstone message marshalled by StableMarshal function.
+func (s *Tombstone) StableSize() (size int) {
+ if s == nil {
+ return 0
+ }
+
+ size += proto.UInt64Size(expFNum, s.exp)
+ size += proto.BytesSize(splitIDFNum, s.splitID)
+ for i := range s.members {
+ size += proto.NestedStructureSize(membersFNum, &s.members[i])
+ }
+
+ return size
+}
+
+// Unmarshal unmarshal tombstone message from its binary representation.
+func (s *Tombstone) Unmarshal(data []byte) error {
+ return message.Unmarshal(s, data, new(tombstone.Tombstone))
+}
diff --git a/api/tombstone/message_test.go b/api/tombstone/message_test.go
new file mode 100644
index 0000000..dec17cc
--- /dev/null
+++ b/api/tombstone/message_test.go
@@ -0,0 +1,15 @@
+package tombstone_test
+
+import (
+ "testing"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message"
+ messagetest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/message/test"
+ tombstonetest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/tombstone/test"
+)
+
+func TestMessageConvert(t *testing.T) {
+ messagetest.TestRPCMessage(t,
+ func(empty bool) message.Message { return tombstonetest.GenerateTombstone(empty) },
+ )
+}
diff --git a/api/tombstone/test/generate.go b/api/tombstone/test/generate.go
new file mode 100644
index 0000000..c71bd81
--- /dev/null
+++ b/api/tombstone/test/generate.go
@@ -0,0 +1,23 @@
+package tombstonetest
+
+import (
+ "crypto/rand"
+
+ refstest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs/test"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/tombstone"
+)
+
+func GenerateTombstone(empty bool) *tombstone.Tombstone {
+ m := new(tombstone.Tombstone)
+
+ if !empty {
+ id := make([]byte, 16)
+ _, _ = rand.Read(id)
+
+ m.SetExpirationEpoch(89)
+ m.SetSplitID(id)
+ m.SetMembers(refstest.GenerateObjectIDs(false))
+ }
+
+ return m
+}
diff --git a/api/tombstone/types.go b/api/tombstone/types.go
new file mode 100644
index 0000000..f28c69d
--- /dev/null
+++ b/api/tombstone/types.go
@@ -0,0 +1,57 @@
+package tombstone
+
+import (
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+)
+
+// Tombstone is a unified structure of Tombstone
+// message from proto definition.
+type Tombstone struct {
+ exp uint64
+
+ splitID []byte
+
+ members []refs.ObjectID
+}
+
+// GetExpirationEpoch returns number of tombstone expiration epoch.
+func (s *Tombstone) GetExpirationEpoch() uint64 {
+ if s != nil {
+ return s.exp
+ }
+
+ return 0
+}
+
+// SetExpirationEpoch sets number of tombstone expiration epoch.
+func (s *Tombstone) SetExpirationEpoch(v uint64) {
+ s.exp = v
+}
+
+// GetSplitID returns identifier of split object hierarchy.
+func (s *Tombstone) GetSplitID() []byte {
+ if s != nil {
+ return s.splitID
+ }
+
+ return nil
+}
+
+// SetSplitID sets identifier of split object hierarchy.
+func (s *Tombstone) SetSplitID(v []byte) {
+ s.splitID = v
+}
+
+// GetMembers returns list of objects to be deleted.
+func (s *Tombstone) GetMembers() []refs.ObjectID {
+ if s != nil {
+ return s.members
+ }
+
+ return nil
+}
+
+// SetMembers sets list of objects to be deleted.
+func (s *Tombstone) SetMembers(v []refs.ObjectID) {
+ s.members = v
+}
diff --git a/api/util/pool/buffer.go b/api/util/pool/buffer.go
new file mode 100644
index 0000000..e0a7185
--- /dev/null
+++ b/api/util/pool/buffer.go
@@ -0,0 +1,54 @@
+package pool
+
+import (
+ "sync"
+)
+
+// Buffer contains a byte slice.
+type Buffer struct {
+ Data []byte
+}
+
+// BufferPool manages a pool of Buffers.
+type BufferPool struct {
+ poolSliceSize uint32 // Size for the buffer slices in the pool.
+ buffersPool *sync.Pool
+}
+
+// NewBufferPool creates a BufferPool with a specified size.
+func NewBufferPool(poolSliceSize uint32) BufferPool {
+ pool := sync.Pool{
+ New: func() any {
+ return new(Buffer)
+ },
+ }
+ return BufferPool{poolSliceSize: poolSliceSize, buffersPool: &pool}
+}
+
+// Get retrieves a Buffer from the pool or creates a new one if necessary.
+// It ensures the buffer's capacity is at least the specified size.
+func (pool BufferPool) Get(size uint32) *Buffer {
+ result := pool.buffersPool.Get().(*Buffer)
+
+ if cap(result.Data) < int(size) {
+ result.Data = make([]byte, size)
+ } else {
+ result.Data = result.Data[:size]
+ }
+ return result
+}
+
+// Put returns a Buffer to the pool if its capacity does not exceed poolSliceSize.
+func (pool BufferPool) Put(buf *Buffer) {
+ if cap(buf.Data) > int(pool.poolSliceSize) {
+ return
+ }
+
+ buf.Data = buf.Data[:0]
+ pool.buffersPool.Put(buf)
+}
+
+// PoolSliceSize returns the size for buffer slices in the pool.
+func (pool BufferPool) PoolSliceSize() uint32 {
+ return uint32(pool.poolSliceSize)
+}
diff --git a/api/util/pool/marshal.go b/api/util/pool/marshal.go
new file mode 100644
index 0000000..107df28
--- /dev/null
+++ b/api/util/pool/marshal.go
@@ -0,0 +1,7 @@
+package pool
+
+import (
+ "github.com/VictoriaMetrics/easyproto"
+)
+
+var MarshalerPool easyproto.MarshalerPool
diff --git a/api/util/proto/encoding/compat.go b/api/util/proto/encoding/compat.go
new file mode 100644
index 0000000..09d45e6
--- /dev/null
+++ b/api/util/proto/encoding/compat.go
@@ -0,0 +1,22 @@
+package encoding
+
+import (
+ _ "google.golang.org/grpc/encoding/proto" // Ensure default codec is registered before our one.
+ "google.golang.org/protobuf/proto"
+ "google.golang.org/protobuf/protoadapt"
+)
+
+// messageV2Of converts v to a proto.Message.
+// This is needed for this library to continue working in presence of external gRPC packages,
+// such as opentelemetry gRPC exporter.
+// Copied from https://github.com/grpc/grpc-go/blob/e524655becd8d4c7ba9e8687faef456e495e341e/encoding/proto/proto.go#L59.
+func messageV2Of(v any) proto.Message {
+ switch v := v.(type) {
+ case protoadapt.MessageV1:
+ return protoadapt.MessageV2Of(v)
+ case protoadapt.MessageV2:
+ return v
+ }
+
+ return nil
+}
diff --git a/api/util/proto/encoding/json.go b/api/util/proto/encoding/json.go
new file mode 100644
index 0000000..3456a40
--- /dev/null
+++ b/api/util/proto/encoding/json.go
@@ -0,0 +1,48 @@
+package encoding
+
+import (
+ "encoding/json"
+ "fmt"
+
+ "google.golang.org/grpc/encoding"
+ "google.golang.org/protobuf/encoding/protojson"
+)
+
+// JSONCodec is easyjson codec used for code generated by protogen.
+// It is binary-level compatible with the standard protojson format, thus uses the same name.
+type JSONCodec struct{}
+
+var _ encoding.Codec = JSONCodec{}
+
+func init() {
+ encoding.RegisterCodec(JSONCodec{})
+}
+
+// Name implements the encoding.Codec interface.
+func (JSONCodec) Name() string { return "json" }
+
+// Marshal implements the encoding.Codec interface.
+func (JSONCodec) Marshal(v any) ([]byte, error) {
+ switch v := v.(type) {
+ case json.Marshaler:
+ return json.Marshal(v)
+ default:
+ if v := messageV2Of(v); v != nil {
+ return protojson.Marshal(v)
+ }
+ return nil, fmt.Errorf("failed to marshal, message is %T, want proto.Message", v)
+ }
+}
+
+// Unmarshal implements the encoding.Codec interface.
+func (JSONCodec) Unmarshal(data []byte, v any) error {
+ switch v := v.(type) {
+ case json.Unmarshaler:
+ return json.Unmarshal(data, v)
+ default:
+ if v := messageV2Of(v); v != nil {
+ return protojson.Unmarshal(data, v)
+ }
+ return fmt.Errorf("failed to unmarshal, message is %T, want proto.Message", v)
+ }
+}
diff --git a/api/util/proto/encoding/proto.go b/api/util/proto/encoding/proto.go
new file mode 100644
index 0000000..5f3c556
--- /dev/null
+++ b/api/util/proto/encoding/proto.go
@@ -0,0 +1,57 @@
+package encoding
+
+import (
+ "fmt"
+
+ "google.golang.org/grpc/encoding"
+ "google.golang.org/protobuf/proto"
+)
+
+// ProtoCodec is easyproto codec used for code generated by protogen.
+// It is binary-level compatible with the standard proto codec, thus uses the same name.
+type ProtoCodec struct{}
+
+// ProtoMarshaler is an interface accepted by ProtoCodec.Marshal.
+type ProtoMarshaler interface {
+ MarshalProtobuf([]byte) []byte
+}
+
+// ProtoUnmarshaler is an interface accepted by ProtoCodec.Unmarshal.
+type ProtoUnmarshaler interface {
+ UnmarshalProtobuf([]byte) error
+}
+
+var _ encoding.Codec = ProtoCodec{}
+
+func init() {
+ encoding.RegisterCodec(ProtoCodec{})
+}
+
+// Name implements the encoding.Codec interface.
+func (ProtoCodec) Name() string { return "proto" }
+
+// Marshal implements the encoding.Codec interface.
+func (ProtoCodec) Marshal(v any) ([]byte, error) {
+ switch v := v.(type) {
+ case ProtoMarshaler:
+ return v.MarshalProtobuf(nil), nil
+ default:
+ if v := messageV2Of(v); v != nil {
+ return proto.Marshal(v)
+ }
+ return nil, fmt.Errorf("failed to marshal, message is %T, want proto.Message", v)
+ }
+}
+
+// Unmarshal implements the encoding.Codec interface.
+func (ProtoCodec) Unmarshal(data []byte, v any) error {
+ switch v := v.(type) {
+ case ProtoUnmarshaler:
+ return v.UnmarshalProtobuf(data)
+ default:
+ if v := messageV2Of(v); v != nil {
+ return proto.Unmarshal(data, v)
+ }
+ return fmt.Errorf("failed to unmarshal, message is %T, want proto.Message", v)
+ }
+}
diff --git a/api/util/proto/marshal.go b/api/util/proto/marshal.go
new file mode 100644
index 0000000..5016255
--- /dev/null
+++ b/api/util/proto/marshal.go
@@ -0,0 +1,413 @@
+/*
+This package contains help functions for stable marshaller. Their usage is
+totally optional. One can implement fast stable marshaller without these
+runtime function calls.
+*/
+
+package proto
+
+import (
+ "encoding/binary"
+ "math"
+ "math/bits"
+
+ "google.golang.org/protobuf/encoding/protowire"
+)
+
+type (
+ stableMarshaler interface {
+ StableMarshal([]byte) []byte
+ stableSizer
+ }
+
+ stableSizer interface {
+ StableSize() int
+ }
+
+ setMarshalData[T any] interface {
+ SetMarshalData([]byte)
+ StableSize() int
+ ~*T
+ }
+)
+
+func BytesMarshal(field int, buf, v []byte) int {
+ return bytesMarshal(field, buf, v)
+}
+
+func BytesSize(field int, v []byte) int {
+ return bytesSize(field, v)
+}
+
+func bytesMarshal[T ~[]byte | ~string](field int, buf []byte, v T) int {
+ if len(v) == 0 {
+ return 0
+ }
+ return bytesMarshalNoCheck(field, buf, v)
+}
+
+func bytesMarshalNoCheck[T ~[]byte | ~string](field int, buf []byte, v T) int {
+ prefix := protowire.EncodeTag(protowire.Number(field), protowire.BytesType)
+
+ // buf length check can prevent panic at PutUvarint, but it will make
+ // marshaller a bit slower.
+ i := binary.PutUvarint(buf, uint64(prefix))
+ i += binary.PutUvarint(buf[i:], uint64(len(v)))
+ i += copy(buf[i:], v)
+
+ return i
+}
+
+func bytesSize[T ~[]byte | ~string](field int, v T) int {
+ if len(v) == 0 {
+ return 0
+ }
+ return bytesSizeNoCheck(field, v)
+}
+
+func bytesSizeNoCheck[T ~[]byte | ~string](field int, v T) int {
+ return protowire.SizeGroup(protowire.Number(field), protowire.SizeBytes(len(v)))
+}
+
+func StringMarshal(field int, buf []byte, v string) int {
+ return bytesMarshal(field, buf, v)
+}
+
+func StringSize(field int, v string) int {
+ return bytesSize(field, v)
+}
+
+func BoolMarshal(field int, buf []byte, v bool) int {
+ if !v {
+ return 0
+ }
+
+ prefix := protowire.EncodeTag(protowire.Number(field), protowire.VarintType)
+
+ // buf length check can prevent panic at PutUvarint, but it will make
+ // marshaller a bit slower.
+ i := binary.PutUvarint(buf, uint64(prefix))
+ const boolTrueValue = 0x1
+ buf[i] = boolTrueValue
+
+ return i + 1
+}
+
+func BoolSize(field int, v bool) int {
+ if !v {
+ return 0
+ }
+ const boolLength = 1
+ return protowire.SizeGroup(protowire.Number(field), boolLength)
+}
+
+func UInt64Marshal(field int, buf []byte, v uint64) int {
+ if v == 0 {
+ return 0
+ }
+
+ prefix := protowire.EncodeTag(protowire.Number(field), protowire.VarintType)
+
+ // buf length check can prevent panic at PutUvarint, but it will make
+ // marshaller a bit slower.
+ i := binary.PutUvarint(buf, uint64(prefix))
+ i += binary.PutUvarint(buf[i:], v)
+
+ return i
+}
+
+func UInt64Size(field int, v uint64) int {
+ if v == 0 {
+ return 0
+ }
+ return protowire.SizeGroup(protowire.Number(field), protowire.SizeVarint(v))
+}
+
+func Int64Marshal(field int, buf []byte, v int64) int {
+ return UInt64Marshal(field, buf, uint64(v))
+}
+
+func Int64Size(field int, v int64) int {
+ return UInt64Size(field, uint64(v))
+}
+
+func UInt32Marshal(field int, buf []byte, v uint32) int {
+ return UInt64Marshal(field, buf, uint64(v))
+}
+
+func UInt32Size(field int, v uint32) int {
+ return UInt64Size(field, uint64(v))
+}
+
+func Int32Marshal(field int, buf []byte, v int32) int {
+ return UInt64Marshal(field, buf, uint64(uint32(v)))
+}
+
+func Int32Size(field int, v int32) int {
+ return UInt64Size(field, uint64(uint32(v)))
+}
+
+func EnumMarshal(field int, buf []byte, v int32) int {
+ return UInt64Marshal(field, buf, uint64(uint32(v)))
+}
+
+func EnumSize(field int, v int32) int {
+ return UInt64Size(field, uint64(uint32(v)))
+}
+
+func RepeatedBytesMarshal(field int, buf []byte, v [][]byte) int {
+ var offset int
+
+ for i := range v {
+ offset += bytesMarshalNoCheck(field, buf[offset:], v[i])
+ }
+
+ return offset
+}
+
+func RepeatedBytesSize(field int, v [][]byte) (size int) {
+ for i := range v {
+ size += bytesSizeNoCheck(field, v[i])
+ }
+
+ return size
+}
+
+func RepeatedStringMarshal(field int, buf []byte, v []string) int {
+ var offset int
+
+ for i := range v {
+ offset += bytesMarshalNoCheck(field, buf[offset:], v[i])
+ }
+
+ return offset
+}
+
+func RepeatedStringSize(field int, v []string) (size int) {
+ for i := range v {
+ size += bytesSizeNoCheck(field, v[i])
+ }
+
+ return size
+}
+
+func repeatedUIntSize[T ~uint64 | ~int64 | ~uint32 | ~int32](field int, v []T) (size, arraySize int) {
+ if len(v) == 0 {
+ return 0, 0
+ }
+
+ for i := range v {
+ arraySize += protowire.SizeVarint(uint64(v[i]))
+ }
+
+ size = protowire.SizeGroup(protowire.Number(field), protowire.SizeBytes(arraySize))
+
+ return
+}
+
+func repeatedUIntMarshal[T ~uint64 | ~int64 | ~uint32 | ~int32](field int, buf []byte, v []T) int {
+ if len(v) == 0 {
+ return 0
+ }
+
+ prefix := protowire.EncodeTag(protowire.Number(field), protowire.BytesType)
+ offset := binary.PutUvarint(buf, uint64(prefix))
+
+ _, arrSize := repeatedUIntSize(field, v)
+ offset += binary.PutUvarint(buf[offset:], uint64(arrSize))
+ for i := range v {
+ offset += binary.PutUvarint(buf[offset:], uint64(v[i]))
+ }
+
+ return offset
+}
+
+func RepeatedUInt64Marshal(field int, buf []byte, v []uint64) int {
+ return repeatedUIntMarshal(field, buf, v)
+}
+
+func RepeatedUInt64Size(field int, v []uint64) (size, arraySize int) {
+ return repeatedUIntSize(field, v)
+}
+
+func RepeatedInt64Marshal(field int, buf []byte, v []int64) int {
+ return repeatedUIntMarshal(field, buf, v)
+}
+
+func RepeatedInt64Size(field int, v []int64) (size, arraySize int) {
+ return repeatedUIntSize(field, v)
+}
+
+func RepeatedUInt32Marshal(field int, buf []byte, v []uint32) int {
+ return repeatedUIntMarshal(field, buf, v)
+}
+
+func RepeatedUInt32Size(field int, v []uint32) (size, arraySize int) {
+ return repeatedUIntSize(field, v)
+}
+
+func RepeatedInt32Marshal(field int, buf []byte, v []int32) int {
+ if len(v) == 0 {
+ return 0
+ }
+
+ prefix := protowire.EncodeTag(protowire.Number(field), protowire.BytesType)
+ offset := binary.PutUvarint(buf, uint64(prefix))
+ _, arrSize := RepeatedInt32Size(field, v)
+ offset += binary.PutUvarint(buf[offset:], uint64(arrSize))
+ for i := range v {
+ offset += binary.PutUvarint(buf[offset:], uint64(uint32(v[i])))
+ }
+ return offset
+}
+
+func RepeatedInt32Size(field int, v []int32) (size, arraySize int) {
+ if len(v) == 0 {
+ return 0, 0
+ }
+ for i := range v {
+ arraySize += protowire.SizeVarint(uint64(uint32(v[i])))
+ }
+ return protowire.SizeGroup(protowire.Number(field), protowire.SizeBytes(arraySize)), arraySize
+}
+
+// VarUIntSize returns length of varint byte sequence for uint64 value 'x'.
+func VarUIntSize(x uint64) int {
+ return (bits.Len64(x|1) + 6) / 7
+}
+
+type ptrStableMarshaler[T any] interface {
+ stableMarshaler
+ ~*T
+}
+
+type ptrStableSizer[T any] interface {
+ stableSizer
+ ~*T
+}
+
+func NestedStructureMarshal[T any, M ptrStableMarshaler[T]](field int64, buf []byte, v M) int {
+ if v == nil {
+ return 0
+ }
+
+ return NestedStructureMarshalUnchecked(field, buf, v)
+}
+
+func NestedStructureMarshalUnchecked[T stableMarshaler](field int64, buf []byte, v T) int {
+ n := v.StableSize()
+ prefix := protowire.EncodeTag(protowire.Number(field), protowire.BytesType)
+ offset := binary.PutUvarint(buf, prefix)
+ offset += binary.PutUvarint(buf[offset:], uint64(n))
+ v.StableMarshal(buf[offset:])
+
+ return offset + n
+}
+
+// NestedStructureSetMarshalData calculates offset for field in parentData
+// and calls SetMarshalData for nested structure.
+//
+// Returns marshalled data length of nested structure.
+func NestedStructureSetMarshalData[T any, M setMarshalData[T]](field int64, parentData []byte, v M) int {
+ if v == nil {
+ return 0
+ }
+
+ if parentData == nil {
+ v.SetMarshalData(nil)
+ return 0
+ }
+
+ n := v.StableSize()
+ buf := make([]byte, binary.MaxVarintLen64)
+ prefix := protowire.EncodeTag(protowire.Number(field), protowire.BytesType)
+ offset := binary.PutUvarint(buf, prefix)
+ offset += binary.PutUvarint(buf, uint64(n))
+
+ v.SetMarshalData(parentData[offset : offset+n])
+
+ return offset + n
+}
+
+func NestedStructureSize[T any, M ptrStableSizer[T]](field int64, v M) (size int) {
+ if v == nil {
+ return 0
+ }
+
+ return NestedStructureSizeUnchecked(field, v)
+}
+
+func NestedStructureSizeUnchecked[T stableSizer](field int64, v T) int {
+ n := v.StableSize()
+ return protowire.SizeGroup(protowire.Number(field), protowire.SizeBytes(n))
+}
+
+func Fixed64Marshal(field int, buf []byte, v uint64) int {
+ if v == 0 {
+ return 0
+ }
+
+ prefix := protowire.EncodeTag(protowire.Number(field), protowire.Fixed64Type)
+
+ // buf length check can prevent panic at PutUvarint, but it will make
+ // marshaller a bit slower.
+ i := binary.PutUvarint(buf, uint64(prefix))
+ binary.LittleEndian.PutUint64(buf[i:], v)
+
+ return i + 8
+}
+
+func Fixed64Size(fNum int, v uint64) int {
+ if v == 0 {
+ return 0
+ }
+ return protowire.SizeGroup(protowire.Number(fNum), protowire.SizeFixed64())
+}
+
+func Float64Marshal(field int, buf []byte, v float64) int {
+ if v == 0 {
+ return 0
+ }
+
+ prefix := protowire.EncodeTag(protowire.Number(field), protowire.Fixed64Type)
+
+ i := binary.PutUvarint(buf, uint64(prefix))
+ binary.LittleEndian.PutUint64(buf[i:], math.Float64bits(v))
+
+ return i + 8
+}
+
+func Float64Size(fNum int, v float64) int {
+ if v == 0 {
+ return 0
+ }
+ return protowire.SizeGroup(protowire.Number(fNum), protowire.SizeFixed64())
+}
+
+// Fixed32Marshal encodes uint32 value to Protocol Buffers fixed32 field with specified number,
+// and writes it to specified buffer. Returns number of bytes written.
+//
+// Panics if the buffer is undersized.
+func Fixed32Marshal(field int, buf []byte, v uint32) int {
+ if v == 0 {
+ return 0
+ }
+
+ prefix := protowire.EncodeTag(protowire.Number(field), protowire.Fixed32Type)
+
+ // buf length check can prevent panic at PutUvarint, but it will make
+ // marshaller a bit slower.
+ i := binary.PutUvarint(buf, uint64(prefix))
+ binary.LittleEndian.PutUint32(buf[i:], v)
+
+ return i + 4
+}
+
+// Fixed32Size returns number of bytes required to encode uint32 value to Protocol Buffers fixed32 field
+// with specified number.
+func Fixed32Size(fNum int, v uint32) int {
+ if v == 0 {
+ return 0
+ }
+ return protowire.SizeGroup(protowire.Number(fNum), protowire.SizeFixed32())
+}
diff --git a/api/util/proto/marshal_test.go b/api/util/proto/marshal_test.go
new file mode 100644
index 0000000..a635bb6
--- /dev/null
+++ b/api/util/proto/marshal_test.go
@@ -0,0 +1,247 @@
+package proto_test
+
+import (
+ "math"
+ "math/rand"
+ "testing"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/test"
+ generated "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/test/custom"
+ "github.com/stretchr/testify/require"
+ "google.golang.org/protobuf/encoding/protojson"
+ goproto "google.golang.org/protobuf/proto"
+)
+
+type protoInt interface {
+ ~int32 | ~uint32 | ~int64 | ~uint64
+}
+
+func nonZero[T protoInt]() T {
+ var r T
+ for r == 0 {
+ r = T(rand.Uint64())
+ }
+ return r
+}
+
+func TestStableMarshalSingle(t *testing.T) {
+ t.Run("empty", func(t *testing.T) {
+ t.Run("proto", func(t *testing.T) {
+ input := &generated.Primitives{}
+ require.Zero(t, input.StableSize())
+
+ 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))
+ require.Equal(t, input, &actualFrostfs)
+
+ primitivesEqual(t, input, &actual)
+ })
+ })
+
+ marshalCases := []struct {
+ name string
+ input *generated.Primitives
+ }{
+ {name: "bytes", input: &generated.Primitives{FieldA: []byte{1, 2, 3}}},
+ {name: "string", input: &generated.Primitives{FieldB: "123"}},
+ {name: "bool", input: &generated.Primitives{FieldC: true}},
+ {name: "int32", input: &generated.Primitives{FieldD: -10}},
+ {name: "uint32", input: &generated.Primitives{FieldE: nonZero[uint32]()}},
+ {name: "int64", input: &generated.Primitives{FieldF: nonZero[int64]()}},
+ {name: "uint64", input: &generated.Primitives{FieldG: nonZero[uint64]()}},
+ {name: "uint64", input: &generated.Primitives{FieldI: nonZero[uint64]()}},
+ {name: "float64", input: &generated.Primitives{FieldJ: math.Float64frombits(12345677890)}},
+ {name: "fixed32", input: &generated.Primitives{FieldK: nonZero[uint32]()}},
+ {name: "enum, positive", input: &generated.Primitives{FieldH: generated.Primitives_POSITIVE}},
+ {name: "enum, negative", input: &generated.Primitives{FieldH: generated.Primitives_NEGATIVE}},
+ {name: "oneof, first", input: &generated.Primitives{FieldM: &generated.Primitives_FieldMa{FieldMa: []byte{4, 2}}}},
+ {name: "oneof, second", input: &generated.Primitives{FieldM: &generated.Primitives_FieldMe{FieldMe: nonZero[uint32]()}}},
+ }
+ for _, tc := range marshalCases {
+ t.Run(tc.name, func(t *testing.T) {
+ t.Run("proto", func(t *testing.T) {
+ r := tc.input.MarshalProtobuf(nil)
+ require.Equal(t, len(r), tc.input.StableSize())
+ require.NotEmpty(t, r)
+
+ var actual test.Primitives
+ require.NoError(t, goproto.Unmarshal(r, &actual))
+
+ var actualFrostfs generated.Primitives
+ require.NoError(t, actualFrostfs.UnmarshalProtobuf(r))
+ require.Equal(t, tc.input, &actualFrostfs)
+
+ primitivesEqual(t, tc.input, &actual)
+ })
+ t.Run("json", func(t *testing.T) {
+ r, err := tc.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))
+ require.Equal(t, tc.input, &actualFrostfs)
+
+ primitivesEqual(t, tc.input, &actual)
+ })
+ })
+ }
+}
+
+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, len(a.FieldA), len(b.FieldA))
+ 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)
+ require.Equal(t, a.FieldE, b.FieldE)
+ require.Equal(t, a.FieldF, b.FieldF)
+ require.Equal(t, a.FieldG, b.FieldG)
+ require.Equal(t, a.FieldI, b.FieldI)
+ require.Equal(t, a.FieldJ, b.FieldJ)
+ require.Equal(t, a.FieldK, b.FieldK)
+ require.EqualValues(t, a.FieldH, b.FieldH)
+ require.Equal(t, a.GetFieldMa(), b.GetFieldMa())
+ require.Equal(t, a.GetFieldMe(), b.GetFieldMe())
+ require.Equal(t, a.GetFieldAux().GetInnerField(), b.GetFieldAux().GetInnerField())
+}
+
+func repPrimitivesEqual(t *testing.T, a *generated.RepPrimitives, b *test.RepPrimitives) {
+ // Compare each field directly, because proto-generated code has private fields.
+ 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)
+ require.Equal(t, a.FieldE, b.FieldE)
+ require.Equal(t, a.FieldF, b.FieldF)
+ require.Equal(t, a.FieldFu, b.FieldFu)
+ require.Equal(t, len(a.GetFieldAux()), len(b.GetFieldAux()))
+ for i := range a.FieldAux {
+ require.Equal(t, a.GetFieldAux()[i].GetInnerField(), b.GetFieldAux()[i].GetInnerField())
+ }
+}
+
+func randIntSlice[T protoInt](n int, includeZero bool) []T {
+ r := make([]T, n)
+ if n == 0 {
+ return r
+ }
+ for i := range r {
+ r[i] = T(rand.Uint64())
+ }
+ if includeZero {
+ r[0] = 0
+ }
+ return r
+}
+
+func uint32SliceToAux(s []uint32) []generated.RepPrimitives_Aux {
+ r := make([]generated.RepPrimitives_Aux, len(s))
+ for i := range s {
+ r[i] = generated.RepPrimitives_Aux{InnerField: s[i]}
+ }
+ return r
+}
+
+func TestStableMarshalRep(t *testing.T) {
+ t.Run("empty", func(t *testing.T) {
+ marshalCases := []struct {
+ name string
+ input *generated.RepPrimitives
+ }{
+ {name: "default", input: &generated.RepPrimitives{}},
+ {name: "bytes", input: &generated.RepPrimitives{FieldA: [][]byte{}}},
+ {name: "string", input: &generated.RepPrimitives{FieldB: []string{}}},
+ {name: "int32", input: &generated.RepPrimitives{FieldC: []int32{}}},
+ {name: "uint32", input: &generated.RepPrimitives{FieldD: []uint32{}}},
+ {name: "int64", input: &generated.RepPrimitives{FieldE: []int64{}}},
+ {name: "uint64", input: &generated.RepPrimitives{FieldF: []uint64{}}},
+ {name: "uint64", input: &generated.RepPrimitives{FieldFu: []uint64{}}},
+ }
+
+ for _, tc := range marshalCases {
+ t.Run(tc.name, func(t *testing.T) {
+ require.Zero(t, tc.input.StableSize())
+
+ r := tc.input.MarshalProtobuf(nil)
+ require.Empty(t, r)
+ })
+ }
+ })
+
+ marshalCases := []struct {
+ name string
+ input *generated.RepPrimitives
+ }{
+ {name: "bytes", input: &generated.RepPrimitives{FieldA: [][]byte{{1, 2, 3}}}},
+ {name: "string", input: &generated.RepPrimitives{FieldB: []string{"123"}}},
+ {name: "int32", input: &generated.RepPrimitives{FieldC: randIntSlice[int32](1, true)}},
+ {name: "int32", input: &generated.RepPrimitives{FieldC: randIntSlice[int32](2, true)}},
+ {name: "int32", input: &generated.RepPrimitives{FieldC: randIntSlice[int32](2, false)}},
+ {name: "uint32", input: &generated.RepPrimitives{FieldD: randIntSlice[uint32](1, true)}},
+ {name: "uint32", input: &generated.RepPrimitives{FieldD: randIntSlice[uint32](2, true)}},
+ {name: "uint32", input: &generated.RepPrimitives{FieldD: randIntSlice[uint32](2, false)}},
+ {name: "int64", input: &generated.RepPrimitives{FieldE: randIntSlice[int64](1, true)}},
+ {name: "int64", input: &generated.RepPrimitives{FieldE: randIntSlice[int64](2, true)}},
+ {name: "int64", input: &generated.RepPrimitives{FieldE: randIntSlice[int64](2, false)}},
+ {name: "uint64", input: &generated.RepPrimitives{FieldF: randIntSlice[uint64](1, true)}},
+ {name: "uint64", input: &generated.RepPrimitives{FieldF: randIntSlice[uint64](2, true)}},
+ {name: "uint64", input: &generated.RepPrimitives{FieldF: randIntSlice[uint64](2, false)}},
+ {name: "uint64", input: &generated.RepPrimitives{FieldFu: randIntSlice[uint64](1, true)}},
+ {name: "uint64", input: &generated.RepPrimitives{FieldFu: randIntSlice[uint64](2, true)}},
+ {name: "uint64", input: &generated.RepPrimitives{FieldFu: randIntSlice[uint64](2, false)}},
+ {name: "message", input: &generated.RepPrimitives{FieldAux: uint32SliceToAux(randIntSlice[uint32](1, true))}},
+ {name: "message", input: &generated.RepPrimitives{FieldAux: uint32SliceToAux(randIntSlice[uint32](2, true))}},
+ {name: "message", input: &generated.RepPrimitives{FieldAux: uint32SliceToAux(randIntSlice[uint32](2, false))}},
+ }
+ for _, tc := range marshalCases {
+ t.Run(tc.name, func(t *testing.T) {
+ t.Run("proto", func(t *testing.T) {
+ r := tc.input.MarshalProtobuf(nil)
+ require.Equal(t, len(r), tc.input.StableSize())
+ require.NotEmpty(t, r)
+
+ var actual test.RepPrimitives
+ require.NoError(t, goproto.Unmarshal(r, &actual))
+ repPrimitivesEqual(t, tc.input, &actual)
+ })
+ t.Run("json", func(t *testing.T) {
+ r, err := tc.input.MarshalJSON()
+ require.NoError(t, err)
+ require.NotEmpty(t, r)
+
+ var actual test.RepPrimitives
+ require.NoError(t, protojson.Unmarshal(r, &actual))
+ repPrimitivesEqual(t, tc.input, &actual)
+ })
+ })
+ }
+}
diff --git a/api/util/proto/test/custom/test_frostfs.pb.go b/api/util/proto/test/custom/test_frostfs.pb.go
new file mode 100644
index 0000000..c9b2699
--- /dev/null
+++ b/api/util/proto/test/custom/test_frostfs.pb.go
@@ -0,0 +1,1687 @@
+// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.
+
+package test
+
+import (
+ json "encoding/json"
+ fmt "fmt"
+ pool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+ proto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
+ encoding "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding"
+ easyproto "github.com/VictoriaMetrics/easyproto"
+ jlexer "github.com/mailru/easyjson/jlexer"
+ jwriter "github.com/mailru/easyjson/jwriter"
+ protowire "google.golang.org/protobuf/encoding/protowire"
+ strconv "strconv"
+)
+
+type Primitives_SomeEnum int32
+
+const (
+ Primitives_UNKNOWN Primitives_SomeEnum = 0
+ Primitives_POSITIVE Primitives_SomeEnum = 1
+ Primitives_NEGATIVE Primitives_SomeEnum = -1
+)
+
+var (
+ Primitives_SomeEnum_name = map[int32]string{
+ 0: "UNKNOWN",
+ 1: "POSITIVE",
+ -1: "NEGATIVE",
+ }
+ Primitives_SomeEnum_value = map[string]int32{
+ "UNKNOWN": 0,
+ "POSITIVE": 1,
+ "NEGATIVE": -1,
+ }
+)
+
+func (x Primitives_SomeEnum) String() string {
+ if v, ok := Primitives_SomeEnum_name[int32(x)]; ok {
+ return v
+ }
+ return strconv.FormatInt(int64(x), 10)
+}
+func (x *Primitives_SomeEnum) FromString(s string) bool {
+ if v, ok := Primitives_SomeEnum_value[s]; ok {
+ *x = Primitives_SomeEnum(v)
+ return true
+ }
+ return false
+}
+
+type Primitives_Aux struct {
+ InnerField uint32 `json:"innerField"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Primitives_Aux)(nil)
+ _ encoding.ProtoUnmarshaler = (*Primitives_Aux)(nil)
+ _ json.Marshaler = (*Primitives_Aux)(nil)
+ _ json.Unmarshaler = (*Primitives_Aux)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Primitives_Aux) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.UInt32Size(1, x.InnerField)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Primitives_Aux) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Primitives_Aux) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.InnerField != 0 {
+ mm.AppendUint32(1, x.InnerField)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Primitives_Aux) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Primitives_Aux")
+ }
+ switch fc.FieldNum {
+ case 1: // InnerField
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "InnerField")
+ }
+ x.InnerField = data
+ }
+ }
+ return nil
+}
+func (x *Primitives_Aux) GetInnerField() uint32 {
+ if x != nil {
+ return x.InnerField
+ }
+ return 0
+}
+func (x *Primitives_Aux) SetInnerField(v uint32) {
+ x.InnerField = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Primitives_Aux) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Primitives_Aux) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"innerField\":"
+ out.RawString(prefix)
+ out.Uint32(x.InnerField)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Primitives_Aux) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Primitives_Aux) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "innerField":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.InnerField = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type Primitives struct {
+ FieldA []byte `json:"fieldA"`
+ FieldB string `json:"fieldB"`
+ FieldC bool `json:"fieldC"`
+ FieldD int32 `json:"fieldD"`
+ FieldE uint32 `json:"fieldE"`
+ FieldF int64 `json:"fieldF"`
+ FieldG uint64 `json:"fieldG"`
+ FieldI uint64 `json:"fieldI"`
+ FieldJ float64 `json:"fieldJ"`
+ FieldK uint32 `json:"fieldK"`
+ FieldH Primitives_SomeEnum `json:"fieldH"`
+ FieldM isPrimitives_FieldM
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*Primitives)(nil)
+ _ encoding.ProtoUnmarshaler = (*Primitives)(nil)
+ _ json.Marshaler = (*Primitives)(nil)
+ _ json.Unmarshaler = (*Primitives)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *Primitives) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.BytesSize(1, x.FieldA)
+ size += proto.StringSize(2, x.FieldB)
+ size += proto.BoolSize(200, x.FieldC)
+ size += proto.Int32Size(201, x.FieldD)
+ size += proto.UInt32Size(202, x.FieldE)
+ size += proto.Int64Size(203, x.FieldF)
+ size += proto.UInt64Size(204, x.FieldG)
+ size += proto.Fixed64Size(205, x.FieldI)
+ size += proto.Float64Size(206, x.FieldJ)
+ size += proto.Fixed32Size(207, x.FieldK)
+ size += proto.EnumSize(300, int32(x.FieldH))
+ if inner, ok := x.FieldM.(*Primitives_FieldMa); ok {
+ size += proto.BytesSize(401, inner.FieldMa)
+ }
+ if inner, ok := x.FieldM.(*Primitives_FieldMe); ok {
+ size += proto.UInt32Size(402, inner.FieldMe)
+ }
+ if inner, ok := x.FieldM.(*Primitives_FieldAux); ok {
+ size += proto.NestedStructureSize(403, inner.FieldAux)
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *Primitives) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *Primitives) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if len(x.FieldA) != 0 {
+ mm.AppendBytes(1, x.FieldA)
+ }
+ if len(x.FieldB) != 0 {
+ mm.AppendString(2, x.FieldB)
+ }
+ if x.FieldC {
+ mm.AppendBool(200, x.FieldC)
+ }
+ if x.FieldD != 0 {
+ mm.AppendInt32(201, x.FieldD)
+ }
+ if x.FieldE != 0 {
+ mm.AppendUint32(202, x.FieldE)
+ }
+ if x.FieldF != 0 {
+ mm.AppendInt64(203, x.FieldF)
+ }
+ if x.FieldG != 0 {
+ mm.AppendUint64(204, x.FieldG)
+ }
+ if x.FieldI != 0 {
+ mm.AppendFixed64(205, x.FieldI)
+ }
+ if x.FieldJ != 0 {
+ mm.AppendDouble(206, x.FieldJ)
+ }
+ if x.FieldK != 0 {
+ mm.AppendFixed32(207, x.FieldK)
+ }
+ if int32(x.FieldH) != 0 {
+ mm.AppendInt32(300, int32(x.FieldH))
+ }
+ if inner, ok := x.FieldM.(*Primitives_FieldMa); ok {
+ if len(inner.FieldMa) != 0 {
+ mm.AppendBytes(401, inner.FieldMa)
+ }
+ }
+ if inner, ok := x.FieldM.(*Primitives_FieldMe); ok {
+ if inner.FieldMe != 0 {
+ mm.AppendUint32(402, inner.FieldMe)
+ }
+ }
+ if inner, ok := x.FieldM.(*Primitives_FieldAux); ok {
+ if inner.FieldAux != nil {
+ inner.FieldAux.EmitProtobuf(mm.AppendMessage(403))
+ }
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *Primitives) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "Primitives")
+ }
+ switch fc.FieldNum {
+ case 1: // FieldA
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldA")
+ }
+ x.FieldA = data
+ case 2: // FieldB
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldB")
+ }
+ x.FieldB = data
+ case 200: // FieldC
+ data, ok := fc.Bool()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldC")
+ }
+ x.FieldC = data
+ case 201: // FieldD
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldD")
+ }
+ x.FieldD = data
+ case 202: // FieldE
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldE")
+ }
+ x.FieldE = data
+ case 203: // FieldF
+ data, ok := fc.Int64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldF")
+ }
+ x.FieldF = data
+ case 204: // FieldG
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldG")
+ }
+ x.FieldG = data
+ case 205: // FieldI
+ data, ok := fc.Fixed64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldI")
+ }
+ x.FieldI = data
+ case 206: // FieldJ
+ data, ok := fc.Double()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldJ")
+ }
+ x.FieldJ = data
+ case 207: // FieldK
+ data, ok := fc.Fixed32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldK")
+ }
+ x.FieldK = data
+ case 300: // FieldH
+ data, ok := fc.Int32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldH")
+ }
+ x.FieldH = Primitives_SomeEnum(data)
+ case 401: // FieldMa
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldMa")
+ }
+ x.FieldM = &Primitives_FieldMa{FieldMa: data}
+ case 402: // FieldMe
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldMe")
+ }
+ x.FieldM = &Primitives_FieldMe{FieldMe: data}
+ case 403: // FieldAux
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldAux")
+ }
+ oneofField := &Primitives_FieldAux{FieldAux: new(Primitives_Aux)}
+ if err := oneofField.FieldAux.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ x.FieldM = oneofField
+ }
+ }
+ return nil
+}
+func (x *Primitives) GetFieldA() []byte {
+ if x != nil {
+ return x.FieldA
+ }
+ return nil
+}
+func (x *Primitives) SetFieldA(v []byte) {
+ x.FieldA = v
+}
+func (x *Primitives) GetFieldB() string {
+ if x != nil {
+ return x.FieldB
+ }
+ return ""
+}
+func (x *Primitives) SetFieldB(v string) {
+ x.FieldB = v
+}
+func (x *Primitives) GetFieldC() bool {
+ if x != nil {
+ return x.FieldC
+ }
+ return false
+}
+func (x *Primitives) SetFieldC(v bool) {
+ x.FieldC = v
+}
+func (x *Primitives) GetFieldD() int32 {
+ if x != nil {
+ return x.FieldD
+ }
+ return 0
+}
+func (x *Primitives) SetFieldD(v int32) {
+ x.FieldD = v
+}
+func (x *Primitives) GetFieldE() uint32 {
+ if x != nil {
+ return x.FieldE
+ }
+ return 0
+}
+func (x *Primitives) SetFieldE(v uint32) {
+ x.FieldE = v
+}
+func (x *Primitives) GetFieldF() int64 {
+ if x != nil {
+ return x.FieldF
+ }
+ return 0
+}
+func (x *Primitives) SetFieldF(v int64) {
+ x.FieldF = v
+}
+func (x *Primitives) GetFieldG() uint64 {
+ if x != nil {
+ return x.FieldG
+ }
+ return 0
+}
+func (x *Primitives) SetFieldG(v uint64) {
+ x.FieldG = v
+}
+func (x *Primitives) GetFieldI() uint64 {
+ if x != nil {
+ return x.FieldI
+ }
+ return 0
+}
+func (x *Primitives) SetFieldI(v uint64) {
+ x.FieldI = v
+}
+func (x *Primitives) GetFieldJ() float64 {
+ if x != nil {
+ return x.FieldJ
+ }
+ return 0
+}
+func (x *Primitives) SetFieldJ(v float64) {
+ x.FieldJ = v
+}
+func (x *Primitives) GetFieldK() uint32 {
+ if x != nil {
+ return x.FieldK
+ }
+ return 0
+}
+func (x *Primitives) SetFieldK(v uint32) {
+ x.FieldK = v
+}
+func (x *Primitives) GetFieldH() Primitives_SomeEnum {
+ if x != nil {
+ return x.FieldH
+ }
+ return 0
+}
+func (x *Primitives) SetFieldH(v Primitives_SomeEnum) {
+ x.FieldH = v
+}
+func (x *Primitives) GetFieldM() isPrimitives_FieldM {
+ if x != nil {
+ return x.FieldM
+ }
+ return nil
+}
+func (x *Primitives) SetFieldM(v isPrimitives_FieldM) {
+ x.FieldM = v
+}
+func (x *Primitives) GetFieldMa() []byte {
+ if xx, ok := x.GetFieldM().(*Primitives_FieldMa); ok {
+ return xx.FieldMa
+ }
+ return nil
+}
+func (x *Primitives) SetFieldMa(v *Primitives_FieldMa) {
+ x.FieldM = v
+}
+func (x *Primitives_FieldMa) GetFieldMa() []byte {
+ if x != nil {
+ return x.FieldMa
+ }
+ return nil
+}
+func (x *Primitives_FieldMa) SetFieldMa(v []byte) {
+ x.FieldMa = v
+}
+func (x *Primitives) GetFieldMe() uint32 {
+ if xx, ok := x.GetFieldM().(*Primitives_FieldMe); ok {
+ return xx.FieldMe
+ }
+ return 0
+}
+func (x *Primitives) SetFieldMe(v *Primitives_FieldMe) {
+ x.FieldM = v
+}
+func (x *Primitives_FieldMe) GetFieldMe() uint32 {
+ if x != nil {
+ return x.FieldMe
+ }
+ return 0
+}
+func (x *Primitives_FieldMe) SetFieldMe(v uint32) {
+ x.FieldMe = v
+}
+func (x *Primitives) GetFieldAux() *Primitives_Aux {
+ if xx, ok := x.GetFieldM().(*Primitives_FieldAux); ok {
+ return xx.FieldAux
+ }
+ return nil
+}
+func (x *Primitives) SetFieldAux(v *Primitives_Aux) {
+ x.FieldM = &Primitives_FieldAux{FieldAux: v}
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *Primitives) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *Primitives) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldA\":"
+ out.RawString(prefix)
+ if x.FieldA != nil {
+ out.Base64Bytes(x.FieldA)
+ } else {
+ out.String("")
+ }
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldB\":"
+ out.RawString(prefix)
+ out.String(x.FieldB)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldC\":"
+ out.RawString(prefix)
+ out.Bool(x.FieldC)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldD\":"
+ out.RawString(prefix)
+ out.Int32(x.FieldD)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldE\":"
+ out.RawString(prefix)
+ out.Uint32(x.FieldE)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldF\":"
+ out.RawString(prefix)
+ out.RawByte('"')
+ out.Buffer.Buf = strconv.AppendInt(out.Buffer.Buf, x.FieldF, 10)
+ out.RawByte('"')
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldG\":"
+ out.RawString(prefix)
+ out.RawByte('"')
+ out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.FieldG, 10)
+ out.RawByte('"')
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldI\":"
+ out.RawString(prefix)
+ out.RawByte('"')
+ out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.FieldI, 10)
+ out.RawByte('"')
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldJ\":"
+ out.RawString(prefix)
+ out.Float64(x.FieldJ)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldK\":"
+ out.RawString(prefix)
+ out.Uint32(x.FieldK)
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldH\":"
+ out.RawString(prefix)
+ v := int32(x.FieldH)
+ if vv, ok := Primitives_SomeEnum_name[v]; ok {
+ out.String(vv)
+ } else {
+ out.Int32(v)
+ }
+ }
+ switch xx := x.FieldM.(type) {
+ case *Primitives_FieldMa:
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldMa\":"
+ out.RawString(prefix)
+ if xx.FieldMa != nil {
+ out.Base64Bytes(xx.FieldMa)
+ } else {
+ out.String("")
+ }
+ }
+ case *Primitives_FieldMe:
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldMe\":"
+ out.RawString(prefix)
+ out.Uint32(xx.FieldMe)
+ }
+ case *Primitives_FieldAux:
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldAux\":"
+ out.RawString(prefix)
+ xx.FieldAux.MarshalEasyJSON(out)
+ }
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *Primitives) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *Primitives) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "fieldA":
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ x.FieldA = f
+ }
+ case "fieldB":
+ {
+ var f string
+ f = in.String()
+ x.FieldB = f
+ }
+ case "fieldC":
+ {
+ var f bool
+ f = in.Bool()
+ x.FieldC = f
+ }
+ case "fieldD":
+ {
+ var f int32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseInt(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := int32(v)
+ f = pv
+ x.FieldD = f
+ }
+ case "fieldE":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.FieldE = f
+ }
+ case "fieldF":
+ {
+ var f int64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseInt(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := int64(v)
+ f = pv
+ x.FieldF = f
+ }
+ case "fieldG":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.FieldG = f
+ }
+ case "fieldI":
+ {
+ var f uint64
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ x.FieldI = f
+ }
+ case "fieldJ":
+ {
+ var f float64
+ f = in.Float64()
+ x.FieldJ = f
+ }
+ case "fieldK":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.FieldK = f
+ }
+ case "fieldH":
+ {
+ var f Primitives_SomeEnum
+ var parsedValue Primitives_SomeEnum
+ switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := Primitives_SomeEnum_value[v]; ok {
+ parsedValue = Primitives_SomeEnum(vv)
+ break
+ }
+ vv, err := strconv.ParseInt(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ parsedValue = Primitives_SomeEnum(vv)
+ case float64:
+ parsedValue = Primitives_SomeEnum(v)
+ }
+ f = parsedValue
+ x.FieldH = f
+ }
+ case "fieldMa":
+ xx := new(Primitives_FieldMa)
+ x.FieldM = xx
+ {
+ var f []byte
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ xx.FieldMa = f
+ }
+ case "fieldMe":
+ xx := new(Primitives_FieldMe)
+ x.FieldM = xx
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ xx.FieldMe = f
+ }
+ case "fieldAux":
+ xx := new(Primitives_FieldAux)
+ x.FieldM = xx
+ {
+ var f *Primitives_Aux
+ f = new(Primitives_Aux)
+ f.UnmarshalEasyJSON(in)
+ xx.FieldAux = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type isPrimitives_FieldM interface {
+ isPrimitives_FieldM()
+}
+
+type Primitives_FieldMa struct {
+ FieldMa []byte
+}
+
+type Primitives_FieldMe struct {
+ FieldMe uint32
+}
+
+type Primitives_FieldAux struct {
+ FieldAux *Primitives_Aux
+}
+
+func (*Primitives_FieldMa) isPrimitives_FieldM() {}
+
+func (*Primitives_FieldMe) isPrimitives_FieldM() {}
+
+func (*Primitives_FieldAux) isPrimitives_FieldM() {}
+
+type RepPrimitives_Aux struct {
+ InnerField uint32 `json:"innerField"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*RepPrimitives_Aux)(nil)
+ _ encoding.ProtoUnmarshaler = (*RepPrimitives_Aux)(nil)
+ _ json.Marshaler = (*RepPrimitives_Aux)(nil)
+ _ json.Unmarshaler = (*RepPrimitives_Aux)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *RepPrimitives_Aux) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ size += proto.UInt32Size(1, x.InnerField)
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *RepPrimitives_Aux) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *RepPrimitives_Aux) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ if x.InnerField != 0 {
+ mm.AppendUint32(1, x.InnerField)
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *RepPrimitives_Aux) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "RepPrimitives_Aux")
+ }
+ switch fc.FieldNum {
+ case 1: // InnerField
+ data, ok := fc.Uint32()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "InnerField")
+ }
+ x.InnerField = data
+ }
+ }
+ return nil
+}
+func (x *RepPrimitives_Aux) GetInnerField() uint32 {
+ if x != nil {
+ return x.InnerField
+ }
+ return 0
+}
+func (x *RepPrimitives_Aux) SetInnerField(v uint32) {
+ x.InnerField = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *RepPrimitives_Aux) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *RepPrimitives_Aux) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"innerField\":"
+ out.RawString(prefix)
+ out.Uint32(x.InnerField)
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *RepPrimitives_Aux) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *RepPrimitives_Aux) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "innerField":
+ {
+ var f uint32
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ x.InnerField = f
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
+
+type RepPrimitives struct {
+ FieldA [][]byte `json:"fieldA"`
+ FieldB []string `json:"fieldB"`
+ FieldC []int32 `json:"fieldC"`
+ FieldD []uint32 `json:"fieldD"`
+ FieldE []int64 `json:"fieldE"`
+ FieldF []uint64 `json:"fieldF"`
+ FieldFu []uint64 `json:"fieldFu"`
+ FieldAux []RepPrimitives_Aux `json:"fieldAux"`
+}
+
+var (
+ _ encoding.ProtoMarshaler = (*RepPrimitives)(nil)
+ _ encoding.ProtoUnmarshaler = (*RepPrimitives)(nil)
+ _ json.Marshaler = (*RepPrimitives)(nil)
+ _ json.Unmarshaler = (*RepPrimitives)(nil)
+)
+
+// StableSize returns the size of x in protobuf format.
+//
+// Structures with the same field values have the same binary size.
+func (x *RepPrimitives) StableSize() (size int) {
+ if x == nil {
+ return 0
+ }
+ var n int
+ size += proto.RepeatedBytesSize(1, x.FieldA)
+ size += proto.RepeatedStringSize(2, x.FieldB)
+ n, _ = proto.RepeatedInt32Size(3, x.FieldC)
+ size += n
+ n, _ = proto.RepeatedUInt32Size(4, x.FieldD)
+ size += n
+ n, _ = proto.RepeatedInt64Size(5, x.FieldE)
+ size += n
+ n, _ = proto.RepeatedUInt64Size(6, x.FieldF)
+ size += n
+ for i := range x.FieldFu {
+ size += protowire.SizeGroup(protowire.Number(7), protowire.SizeVarint(x.FieldFu[i]))
+ }
+ for i := range x.FieldAux {
+ size += proto.NestedStructureSizeUnchecked(8, &x.FieldAux[i])
+ }
+ return size
+}
+
+// MarshalProtobuf implements the encoding.ProtoMarshaler interface.
+func (x *RepPrimitives) MarshalProtobuf(dst []byte) []byte {
+ m := pool.MarshalerPool.Get()
+ defer pool.MarshalerPool.Put(m)
+ x.EmitProtobuf(m.MessageMarshaler())
+ dst = m.Marshal(dst)
+ return dst
+}
+
+func (x *RepPrimitives) EmitProtobuf(mm *easyproto.MessageMarshaler) {
+ if x == nil {
+ return
+ }
+ for j := range x.FieldA {
+ mm.AppendBytes(1, x.FieldA[j])
+ }
+ for j := range x.FieldB {
+ mm.AppendString(2, x.FieldB[j])
+ }
+ if len(x.FieldC) != 0 {
+ mm.AppendInt32s(3, x.FieldC)
+ }
+ if len(x.FieldD) != 0 {
+ mm.AppendUint32s(4, x.FieldD)
+ }
+ if len(x.FieldE) != 0 {
+ mm.AppendInt64s(5, x.FieldE)
+ }
+ if len(x.FieldF) != 0 {
+ mm.AppendUint64s(6, x.FieldF)
+ }
+ for j := range x.FieldFu {
+ mm.AppendUint64(7, x.FieldFu[j])
+ }
+ for i := range x.FieldAux {
+ x.FieldAux[i].EmitProtobuf(mm.AppendMessage(8))
+ }
+}
+
+// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.
+func (x *RepPrimitives) UnmarshalProtobuf(src []byte) (err error) {
+ var fc easyproto.FieldContext
+ for len(src) > 0 {
+ src, err = fc.NextField(src)
+ if err != nil {
+ return fmt.Errorf("cannot read next field in %s", "RepPrimitives")
+ }
+ switch fc.FieldNum {
+ case 1: // FieldA
+ data, ok := fc.Bytes()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldA")
+ }
+ x.FieldA = append(x.FieldA, data)
+ case 2: // FieldB
+ data, ok := fc.String()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldB")
+ }
+ x.FieldB = append(x.FieldB, data)
+ case 3: // FieldC
+ data, ok := fc.UnpackInt32s(nil)
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldC")
+ }
+ x.FieldC = data
+ case 4: // FieldD
+ data, ok := fc.UnpackUint32s(nil)
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldD")
+ }
+ x.FieldD = data
+ case 5: // FieldE
+ data, ok := fc.UnpackInt64s(nil)
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldE")
+ }
+ x.FieldE = data
+ case 6: // FieldF
+ data, ok := fc.UnpackUint64s(nil)
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldF")
+ }
+ x.FieldF = data
+ case 7: // FieldFu
+ data, ok := fc.Uint64()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldFu")
+ }
+ x.FieldFu = append(x.FieldFu, data)
+ case 8: // FieldAux
+ data, ok := fc.MessageData()
+ if !ok {
+ return fmt.Errorf("cannot unmarshal field %s", "FieldAux")
+ }
+ x.FieldAux = append(x.FieldAux, RepPrimitives_Aux{})
+ ff := &x.FieldAux[len(x.FieldAux)-1]
+ if err := ff.UnmarshalProtobuf(data); err != nil {
+ return fmt.Errorf("unmarshal: %w", err)
+ }
+ }
+ }
+ return nil
+}
+func (x *RepPrimitives) GetFieldA() [][]byte {
+ if x != nil {
+ return x.FieldA
+ }
+ return nil
+}
+func (x *RepPrimitives) SetFieldA(v [][]byte) {
+ x.FieldA = v
+}
+func (x *RepPrimitives) GetFieldB() []string {
+ if x != nil {
+ return x.FieldB
+ }
+ return nil
+}
+func (x *RepPrimitives) SetFieldB(v []string) {
+ x.FieldB = v
+}
+func (x *RepPrimitives) GetFieldC() []int32 {
+ if x != nil {
+ return x.FieldC
+ }
+ return nil
+}
+func (x *RepPrimitives) SetFieldC(v []int32) {
+ x.FieldC = v
+}
+func (x *RepPrimitives) GetFieldD() []uint32 {
+ if x != nil {
+ return x.FieldD
+ }
+ return nil
+}
+func (x *RepPrimitives) SetFieldD(v []uint32) {
+ x.FieldD = v
+}
+func (x *RepPrimitives) GetFieldE() []int64 {
+ if x != nil {
+ return x.FieldE
+ }
+ return nil
+}
+func (x *RepPrimitives) SetFieldE(v []int64) {
+ x.FieldE = v
+}
+func (x *RepPrimitives) GetFieldF() []uint64 {
+ if x != nil {
+ return x.FieldF
+ }
+ return nil
+}
+func (x *RepPrimitives) SetFieldF(v []uint64) {
+ x.FieldF = v
+}
+func (x *RepPrimitives) GetFieldFu() []uint64 {
+ if x != nil {
+ return x.FieldFu
+ }
+ return nil
+}
+func (x *RepPrimitives) SetFieldFu(v []uint64) {
+ x.FieldFu = v
+}
+func (x *RepPrimitives) GetFieldAux() []RepPrimitives_Aux {
+ if x != nil {
+ return x.FieldAux
+ }
+ return nil
+}
+func (x *RepPrimitives) SetFieldAux(v []RepPrimitives_Aux) {
+ x.FieldAux = v
+}
+
+// MarshalJSON implements the json.Marshaler interface.
+func (x *RepPrimitives) MarshalJSON() ([]byte, error) {
+ w := jwriter.Writer{}
+ x.MarshalEasyJSON(&w)
+ return w.Buffer.BuildBytes(), w.Error
+}
+func (x *RepPrimitives) MarshalEasyJSON(out *jwriter.Writer) {
+ if x == nil {
+ out.RawString("null")
+ return
+ }
+ first := true
+ out.RawByte('{')
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldA\":"
+ out.RawString(prefix)
+ out.RawByte('[')
+ for i := range x.FieldA {
+ if i != 0 {
+ out.RawByte(',')
+ }
+ if x.FieldA[i] != nil {
+ out.Base64Bytes(x.FieldA[i])
+ } else {
+ out.String("")
+ }
+ }
+ out.RawByte(']')
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldB\":"
+ out.RawString(prefix)
+ out.RawByte('[')
+ for i := range x.FieldB {
+ if i != 0 {
+ out.RawByte(',')
+ }
+ out.String(x.FieldB[i])
+ }
+ out.RawByte(']')
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldC\":"
+ out.RawString(prefix)
+ out.RawByte('[')
+ for i := range x.FieldC {
+ if i != 0 {
+ out.RawByte(',')
+ }
+ out.Int32(x.FieldC[i])
+ }
+ out.RawByte(']')
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldD\":"
+ out.RawString(prefix)
+ out.RawByte('[')
+ for i := range x.FieldD {
+ if i != 0 {
+ out.RawByte(',')
+ }
+ out.Uint32(x.FieldD[i])
+ }
+ out.RawByte(']')
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldE\":"
+ out.RawString(prefix)
+ out.RawByte('[')
+ for i := range x.FieldE {
+ if i != 0 {
+ out.RawByte(',')
+ }
+ out.RawByte('"')
+ out.Buffer.Buf = strconv.AppendInt(out.Buffer.Buf, x.FieldE[i], 10)
+ out.RawByte('"')
+ }
+ out.RawByte(']')
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldF\":"
+ out.RawString(prefix)
+ out.RawByte('[')
+ for i := range x.FieldF {
+ if i != 0 {
+ out.RawByte(',')
+ }
+ out.RawByte('"')
+ out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.FieldF[i], 10)
+ out.RawByte('"')
+ }
+ out.RawByte(']')
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldFu\":"
+ out.RawString(prefix)
+ out.RawByte('[')
+ for i := range x.FieldFu {
+ if i != 0 {
+ out.RawByte(',')
+ }
+ out.RawByte('"')
+ out.Buffer.Buf = strconv.AppendUint(out.Buffer.Buf, x.FieldFu[i], 10)
+ out.RawByte('"')
+ }
+ out.RawByte(']')
+ }
+ {
+ if !first {
+ out.RawByte(',')
+ } else {
+ first = false
+ }
+ const prefix string = "\"fieldAux\":"
+ out.RawString(prefix)
+ out.RawByte('[')
+ for i := range x.FieldAux {
+ if i != 0 {
+ out.RawByte(',')
+ }
+ x.FieldAux[i].MarshalEasyJSON(out)
+ }
+ out.RawByte(']')
+ }
+ out.RawByte('}')
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface.
+func (x *RepPrimitives) UnmarshalJSON(data []byte) error {
+ r := jlexer.Lexer{Data: data}
+ x.UnmarshalEasyJSON(&r)
+ return r.Error()
+}
+func (x *RepPrimitives) UnmarshalEasyJSON(in *jlexer.Lexer) {
+ isTopLevel := in.IsStart()
+ if in.IsNull() {
+ if isTopLevel {
+ in.Consumed()
+ }
+ in.Skip()
+ return
+ }
+ in.Delim('{')
+ for !in.IsDelim('}') {
+ key := in.UnsafeFieldName(false)
+ in.WantColon()
+ if in.IsNull() {
+ in.Skip()
+ in.WantComma()
+ continue
+ }
+ switch key {
+ case "fieldA":
+ {
+ var f []byte
+ var list [][]byte
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ {
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ f = tmp
+ }
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.FieldA = list
+ in.Delim(']')
+ }
+ case "fieldB":
+ {
+ var f string
+ var list []string
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = in.String()
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.FieldB = list
+ in.Delim(']')
+ }
+ case "fieldC":
+ {
+ var f int32
+ var list []int32
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseInt(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := int32(v)
+ f = pv
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.FieldC = list
+ in.Delim(']')
+ }
+ case "fieldD":
+ {
+ var f uint32
+ var list []uint32
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint32(v)
+ f = pv
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.FieldD = list
+ in.Delim(']')
+ }
+ case "fieldE":
+ {
+ var f int64
+ var list []int64
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseInt(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := int64(v)
+ f = pv
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.FieldE = list
+ in.Delim(']')
+ }
+ case "fieldF":
+ {
+ var f uint64
+ var list []uint64
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.FieldF = list
+ in.Delim(']')
+ }
+ case "fieldFu":
+ {
+ var f uint64
+ var list []uint64
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ r := in.JsonNumber()
+ n := r.String()
+ v, err := strconv.ParseUint(n, 10, 64)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ pv := uint64(v)
+ f = pv
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.FieldFu = list
+ in.Delim(']')
+ }
+ case "fieldAux":
+ {
+ var f RepPrimitives_Aux
+ var list []RepPrimitives_Aux
+ in.Delim('[')
+ for !in.IsDelim(']') {
+ f = RepPrimitives_Aux{}
+ f.UnmarshalEasyJSON(in)
+ list = append(list, f)
+ in.WantComma()
+ }
+ x.FieldAux = list
+ in.Delim(']')
+ }
+ }
+ in.WantComma()
+ }
+ in.Delim('}')
+ if isTopLevel {
+ in.Consumed()
+ }
+}
diff --git a/api/util/proto/test/test.pb.go b/api/util/proto/test/test.pb.go
new file mode 100644
index 0000000..e7d5699
--- /dev/null
+++ b/api/util/proto/test/test.pb.go
@@ -0,0 +1,625 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.33.0
+// protoc v5.27.2
+// source: util/proto/test/test.proto
+
+package test
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type Primitives_SomeEnum int32
+
+const (
+ Primitives_UNKNOWN Primitives_SomeEnum = 0
+ Primitives_POSITIVE Primitives_SomeEnum = 1
+ Primitives_NEGATIVE Primitives_SomeEnum = -1
+)
+
+// Enum value maps for Primitives_SomeEnum.
+var (
+ Primitives_SomeEnum_name = map[int32]string{
+ 0: "UNKNOWN",
+ 1: "POSITIVE",
+ -1: "NEGATIVE",
+ }
+ Primitives_SomeEnum_value = map[string]int32{
+ "UNKNOWN": 0,
+ "POSITIVE": 1,
+ "NEGATIVE": -1,
+ }
+)
+
+func (x Primitives_SomeEnum) Enum() *Primitives_SomeEnum {
+ p := new(Primitives_SomeEnum)
+ *p = x
+ return p
+}
+
+func (x Primitives_SomeEnum) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Primitives_SomeEnum) Descriptor() protoreflect.EnumDescriptor {
+ return file_util_proto_test_test_proto_enumTypes[0].Descriptor()
+}
+
+func (Primitives_SomeEnum) Type() protoreflect.EnumType {
+ return &file_util_proto_test_test_proto_enumTypes[0]
+}
+
+func (x Primitives_SomeEnum) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Primitives_SomeEnum.Descriptor instead.
+func (Primitives_SomeEnum) EnumDescriptor() ([]byte, []int) {
+ return file_util_proto_test_test_proto_rawDescGZIP(), []int{0, 0}
+}
+
+type Primitives struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ FieldA []byte `protobuf:"bytes,1,opt,name=field_a,json=fieldA,proto3" json:"field_a,omitempty"`
+ FieldB string `protobuf:"bytes,2,opt,name=field_b,json=fieldB,proto3" json:"field_b,omitempty"`
+ FieldC bool `protobuf:"varint,200,opt,name=field_c,json=fieldC,proto3" json:"field_c,omitempty"`
+ FieldD int32 `protobuf:"varint,201,opt,name=field_d,json=fieldD,proto3" json:"field_d,omitempty"`
+ FieldE uint32 `protobuf:"varint,202,opt,name=field_e,json=fieldE,proto3" json:"field_e,omitempty"`
+ FieldF int64 `protobuf:"varint,203,opt,name=field_f,json=fieldF,proto3" json:"field_f,omitempty"`
+ FieldG uint64 `protobuf:"varint,204,opt,name=field_g,json=fieldG,proto3" json:"field_g,omitempty"`
+ FieldI uint64 `protobuf:"fixed64,205,opt,name=field_i,json=fieldI,proto3" json:"field_i,omitempty"`
+ FieldJ float64 `protobuf:"fixed64,206,opt,name=field_j,json=fieldJ,proto3" json:"field_j,omitempty"`
+ FieldK uint32 `protobuf:"fixed32,207,opt,name=field_k,json=fieldK,proto3" json:"field_k,omitempty"`
+ FieldH Primitives_SomeEnum `protobuf:"varint,300,opt,name=field_h,json=fieldH,proto3,enum=test.Primitives_SomeEnum" json:"field_h,omitempty"`
+ // Types that are assignable to FieldM:
+ //
+ // *Primitives_FieldMa
+ // *Primitives_FieldMe
+ // *Primitives_FieldAux
+ FieldM isPrimitives_FieldM `protobuf_oneof:"field_m"`
+}
+
+func (x *Primitives) Reset() {
+ *x = Primitives{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_util_proto_test_test_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Primitives) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Primitives) ProtoMessage() {}
+
+func (x *Primitives) ProtoReflect() protoreflect.Message {
+ mi := &file_util_proto_test_test_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Primitives.ProtoReflect.Descriptor instead.
+func (*Primitives) Descriptor() ([]byte, []int) {
+ return file_util_proto_test_test_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Primitives) GetFieldA() []byte {
+ if x != nil {
+ return x.FieldA
+ }
+ return nil
+}
+
+func (x *Primitives) GetFieldB() string {
+ if x != nil {
+ return x.FieldB
+ }
+ return ""
+}
+
+func (x *Primitives) GetFieldC() bool {
+ if x != nil {
+ return x.FieldC
+ }
+ return false
+}
+
+func (x *Primitives) GetFieldD() int32 {
+ if x != nil {
+ return x.FieldD
+ }
+ return 0
+}
+
+func (x *Primitives) GetFieldE() uint32 {
+ if x != nil {
+ return x.FieldE
+ }
+ return 0
+}
+
+func (x *Primitives) GetFieldF() int64 {
+ if x != nil {
+ return x.FieldF
+ }
+ return 0
+}
+
+func (x *Primitives) GetFieldG() uint64 {
+ if x != nil {
+ return x.FieldG
+ }
+ return 0
+}
+
+func (x *Primitives) GetFieldI() uint64 {
+ if x != nil {
+ return x.FieldI
+ }
+ return 0
+}
+
+func (x *Primitives) GetFieldJ() float64 {
+ if x != nil {
+ return x.FieldJ
+ }
+ return 0
+}
+
+func (x *Primitives) GetFieldK() uint32 {
+ if x != nil {
+ return x.FieldK
+ }
+ return 0
+}
+
+func (x *Primitives) GetFieldH() Primitives_SomeEnum {
+ if x != nil {
+ return x.FieldH
+ }
+ return Primitives_UNKNOWN
+}
+
+func (m *Primitives) GetFieldM() isPrimitives_FieldM {
+ if m != nil {
+ return m.FieldM
+ }
+ return nil
+}
+
+func (x *Primitives) GetFieldMa() []byte {
+ if x, ok := x.GetFieldM().(*Primitives_FieldMa); ok {
+ return x.FieldMa
+ }
+ return nil
+}
+
+func (x *Primitives) GetFieldMe() uint32 {
+ if x, ok := x.GetFieldM().(*Primitives_FieldMe); ok {
+ return x.FieldMe
+ }
+ return 0
+}
+
+func (x *Primitives) GetFieldAux() *Primitives_Aux {
+ if x, ok := x.GetFieldM().(*Primitives_FieldAux); ok {
+ return x.FieldAux
+ }
+ return nil
+}
+
+type isPrimitives_FieldM interface {
+ isPrimitives_FieldM()
+}
+
+type Primitives_FieldMa struct {
+ FieldMa []byte `protobuf:"bytes,401,opt,name=field_ma,json=fieldMa,proto3,oneof"`
+}
+
+type Primitives_FieldMe struct {
+ FieldMe uint32 `protobuf:"varint,402,opt,name=field_me,json=fieldMe,proto3,oneof"`
+}
+
+type Primitives_FieldAux struct {
+ FieldAux *Primitives_Aux `protobuf:"bytes,403,opt,name=field_aux,json=fieldAux,proto3,oneof"`
+}
+
+func (*Primitives_FieldMa) isPrimitives_FieldM() {}
+
+func (*Primitives_FieldMe) isPrimitives_FieldM() {}
+
+func (*Primitives_FieldAux) isPrimitives_FieldM() {}
+
+type RepPrimitives struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ FieldA [][]byte `protobuf:"bytes,1,rep,name=field_a,json=fieldA,proto3" json:"field_a,omitempty"`
+ FieldB []string `protobuf:"bytes,2,rep,name=field_b,json=fieldB,proto3" json:"field_b,omitempty"`
+ FieldC []int32 `protobuf:"varint,3,rep,packed,name=field_c,json=fieldC,proto3" json:"field_c,omitempty"`
+ FieldD []uint32 `protobuf:"varint,4,rep,packed,name=field_d,json=fieldD,proto3" json:"field_d,omitempty"`
+ FieldE []int64 `protobuf:"varint,5,rep,packed,name=field_e,json=fieldE,proto3" json:"field_e,omitempty"`
+ FieldF []uint64 `protobuf:"varint,6,rep,packed,name=field_f,json=fieldF,proto3" json:"field_f,omitempty"`
+ FieldFu []uint64 `protobuf:"varint,7,rep,name=field_fu,json=fieldFu,proto3" json:"field_fu,omitempty"`
+ FieldAux []*RepPrimitives_Aux `protobuf:"bytes,8,rep,name=field_aux,json=fieldAux,proto3" json:"field_aux,omitempty"`
+}
+
+func (x *RepPrimitives) Reset() {
+ *x = RepPrimitives{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_util_proto_test_test_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *RepPrimitives) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RepPrimitives) ProtoMessage() {}
+
+func (x *RepPrimitives) ProtoReflect() protoreflect.Message {
+ mi := &file_util_proto_test_test_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use RepPrimitives.ProtoReflect.Descriptor instead.
+func (*RepPrimitives) Descriptor() ([]byte, []int) {
+ return file_util_proto_test_test_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *RepPrimitives) GetFieldA() [][]byte {
+ if x != nil {
+ return x.FieldA
+ }
+ return nil
+}
+
+func (x *RepPrimitives) GetFieldB() []string {
+ if x != nil {
+ return x.FieldB
+ }
+ return nil
+}
+
+func (x *RepPrimitives) GetFieldC() []int32 {
+ if x != nil {
+ return x.FieldC
+ }
+ return nil
+}
+
+func (x *RepPrimitives) GetFieldD() []uint32 {
+ if x != nil {
+ return x.FieldD
+ }
+ return nil
+}
+
+func (x *RepPrimitives) GetFieldE() []int64 {
+ if x != nil {
+ return x.FieldE
+ }
+ return nil
+}
+
+func (x *RepPrimitives) GetFieldF() []uint64 {
+ if x != nil {
+ return x.FieldF
+ }
+ return nil
+}
+
+func (x *RepPrimitives) GetFieldFu() []uint64 {
+ if x != nil {
+ return x.FieldFu
+ }
+ return nil
+}
+
+func (x *RepPrimitives) GetFieldAux() []*RepPrimitives_Aux {
+ if x != nil {
+ return x.FieldAux
+ }
+ return nil
+}
+
+type Primitives_Aux struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ InnerField uint32 `protobuf:"varint,1,opt,name=inner_field,json=innerField,proto3" json:"inner_field,omitempty"`
+}
+
+func (x *Primitives_Aux) Reset() {
+ *x = Primitives_Aux{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_util_proto_test_test_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Primitives_Aux) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Primitives_Aux) ProtoMessage() {}
+
+func (x *Primitives_Aux) ProtoReflect() protoreflect.Message {
+ mi := &file_util_proto_test_test_proto_msgTypes[2]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Primitives_Aux.ProtoReflect.Descriptor instead.
+func (*Primitives_Aux) Descriptor() ([]byte, []int) {
+ return file_util_proto_test_test_proto_rawDescGZIP(), []int{0, 0}
+}
+
+func (x *Primitives_Aux) GetInnerField() uint32 {
+ if x != nil {
+ return x.InnerField
+ }
+ return 0
+}
+
+type RepPrimitives_Aux struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ InnerField uint32 `protobuf:"varint,1,opt,name=inner_field,json=innerField,proto3" json:"inner_field,omitempty"`
+}
+
+func (x *RepPrimitives_Aux) Reset() {
+ *x = RepPrimitives_Aux{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_util_proto_test_test_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *RepPrimitives_Aux) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RepPrimitives_Aux) ProtoMessage() {}
+
+func (x *RepPrimitives_Aux) ProtoReflect() protoreflect.Message {
+ mi := &file_util_proto_test_test_proto_msgTypes[3]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use RepPrimitives_Aux.ProtoReflect.Descriptor instead.
+func (*RepPrimitives_Aux) Descriptor() ([]byte, []int) {
+ return file_util_proto_test_test_proto_rawDescGZIP(), []int{1, 0}
+}
+
+func (x *RepPrimitives_Aux) GetInnerField() uint32 {
+ if x != nil {
+ return x.InnerField
+ }
+ return 0
+}
+
+var File_util_proto_test_test_proto protoreflect.FileDescriptor
+
+var file_util_proto_test_test_proto_rawDesc = []byte{
+ 0x0a, 0x1a, 0x75, 0x74, 0x69, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x65, 0x73,
+ 0x74, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x74, 0x65,
+ 0x73, 0x74, 0x22, 0xa6, 0x04, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65,
+ 0x73, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x61, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0c, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x41, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x69,
+ 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65,
+ 0x6c, 0x64, 0x42, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x63, 0x18, 0xc8,
+ 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x12, 0x18, 0x0a,
+ 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x64, 0x18, 0xc9, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
+ 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
+ 0x5f, 0x65, 0x18, 0xca, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64,
+ 0x45, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x66, 0x18, 0xcb, 0x01, 0x20,
+ 0x01, 0x28, 0x03, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x46, 0x12, 0x18, 0x0a, 0x07, 0x66,
+ 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x67, 0x18, 0xcc, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x66,
+ 0x69, 0x65, 0x6c, 0x64, 0x47, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x69,
+ 0x18, 0xcd, 0x01, 0x20, 0x01, 0x28, 0x06, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x12,
+ 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6a, 0x18, 0xce, 0x01, 0x20, 0x01, 0x28,
+ 0x01, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4a, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65,
+ 0x6c, 0x64, 0x5f, 0x6b, 0x18, 0xcf, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, 0x06, 0x66, 0x69, 0x65,
+ 0x6c, 0x64, 0x4b, 0x12, 0x33, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x68, 0x18, 0xac,
+ 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x69,
+ 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x2e, 0x53, 0x6f, 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d,
+ 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x48, 0x12, 0x1c, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c,
+ 0x64, 0x5f, 0x6d, 0x61, 0x18, 0x91, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x66,
+ 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x12, 0x1c, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f,
+ 0x6d, 0x65, 0x18, 0x92, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x07, 0x66, 0x69, 0x65,
+ 0x6c, 0x64, 0x4d, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x61, 0x75,
+ 0x78, 0x18, 0x93, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e,
+ 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x2e, 0x41, 0x75, 0x78, 0x48, 0x00,
+ 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x41, 0x75, 0x78, 0x1a, 0x26, 0x0a, 0x03, 0x41, 0x75,
+ 0x78, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x46, 0x69, 0x65,
+ 0x6c, 0x64, 0x22, 0x3c, 0x0a, 0x08, 0x53, 0x6f, 0x6d, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x0b,
+ 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x50,
+ 0x4f, 0x53, 0x49, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x08, 0x4e, 0x45, 0x47,
+ 0x41, 0x54, 0x49, 0x56, 0x45, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01,
+ 0x42, 0x09, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x22, 0xa2, 0x02, 0x0a, 0x0d,
+ 0x52, 0x65, 0x70, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x12, 0x17, 0x0a,
+ 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x06,
+ 0x66, 0x69, 0x65, 0x6c, 0x64, 0x41, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f,
+ 0x62, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x12,
+ 0x17, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x63, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05,
+ 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c,
+ 0x64, 0x5f, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64,
+ 0x44, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x65, 0x18, 0x05, 0x20, 0x03,
+ 0x28, 0x03, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x69,
+ 0x65, 0x6c, 0x64, 0x5f, 0x66, 0x18, 0x06, 0x20, 0x03, 0x28, 0x04, 0x52, 0x06, 0x66, 0x69, 0x65,
+ 0x6c, 0x64, 0x46, 0x12, 0x1d, 0x0a, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x66, 0x75, 0x18,
+ 0x07, 0x20, 0x03, 0x28, 0x04, 0x42, 0x02, 0x10, 0x00, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
+ 0x46, 0x75, 0x12, 0x34, 0x0a, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x61, 0x75, 0x78, 0x18,
+ 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x70,
+ 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x2e, 0x41, 0x75, 0x78, 0x52, 0x08,
+ 0x66, 0x69, 0x65, 0x6c, 0x64, 0x41, 0x75, 0x78, 0x1a, 0x26, 0x0a, 0x03, 0x41, 0x75, 0x78, 0x12,
+ 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x46, 0x69, 0x65, 0x6c, 0x64,
+ 0x42, 0x11, 0x5a, 0x0f, 0x75, 0x74, 0x69, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74,
+ 0x65, 0x73, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_util_proto_test_test_proto_rawDescOnce sync.Once
+ file_util_proto_test_test_proto_rawDescData = file_util_proto_test_test_proto_rawDesc
+)
+
+func file_util_proto_test_test_proto_rawDescGZIP() []byte {
+ file_util_proto_test_test_proto_rawDescOnce.Do(func() {
+ file_util_proto_test_test_proto_rawDescData = protoimpl.X.CompressGZIP(file_util_proto_test_test_proto_rawDescData)
+ })
+ return file_util_proto_test_test_proto_rawDescData
+}
+
+var file_util_proto_test_test_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_util_proto_test_test_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
+var file_util_proto_test_test_proto_goTypes = []interface{}{
+ (Primitives_SomeEnum)(0), // 0: test.Primitives.SomeEnum
+ (*Primitives)(nil), // 1: test.Primitives
+ (*RepPrimitives)(nil), // 2: test.RepPrimitives
+ (*Primitives_Aux)(nil), // 3: test.Primitives.Aux
+ (*RepPrimitives_Aux)(nil), // 4: test.RepPrimitives.Aux
+}
+var file_util_proto_test_test_proto_depIdxs = []int32{
+ 0, // 0: test.Primitives.field_h:type_name -> test.Primitives.SomeEnum
+ 3, // 1: test.Primitives.field_aux:type_name -> test.Primitives.Aux
+ 4, // 2: test.RepPrimitives.field_aux:type_name -> test.RepPrimitives.Aux
+ 3, // [3:3] is the sub-list for method output_type
+ 3, // [3:3] is the sub-list for method input_type
+ 3, // [3:3] is the sub-list for extension type_name
+ 3, // [3:3] is the sub-list for extension extendee
+ 0, // [0:3] is the sub-list for field type_name
+}
+
+func init() { file_util_proto_test_test_proto_init() }
+func file_util_proto_test_test_proto_init() {
+ if File_util_proto_test_test_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_util_proto_test_test_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Primitives); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_util_proto_test_test_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*RepPrimitives); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_util_proto_test_test_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Primitives_Aux); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_util_proto_test_test_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*RepPrimitives_Aux); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ file_util_proto_test_test_proto_msgTypes[0].OneofWrappers = []interface{}{
+ (*Primitives_FieldMa)(nil),
+ (*Primitives_FieldMe)(nil),
+ (*Primitives_FieldAux)(nil),
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_util_proto_test_test_proto_rawDesc,
+ NumEnums: 1,
+ NumMessages: 4,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_util_proto_test_test_proto_goTypes,
+ DependencyIndexes: file_util_proto_test_test_proto_depIdxs,
+ EnumInfos: file_util_proto_test_test_proto_enumTypes,
+ MessageInfos: file_util_proto_test_test_proto_msgTypes,
+ }.Build()
+ File_util_proto_test_test_proto = out.File
+ file_util_proto_test_test_proto_rawDesc = nil
+ file_util_proto_test_test_proto_goTypes = nil
+ file_util_proto_test_test_proto_depIdxs = nil
+}
diff --git a/api/util/protogen/internalgengo/file.go b/api/util/protogen/internalgengo/file.go
new file mode 100644
index 0000000..d3dd19e
--- /dev/null
+++ b/api/util/protogen/internalgengo/file.go
@@ -0,0 +1,245 @@
+package internalgengo
+
+import (
+ "fmt"
+ "sort"
+ "strconv"
+ "strings"
+
+ "google.golang.org/protobuf/compiler/protogen"
+ "google.golang.org/protobuf/reflect/protoreflect"
+)
+
+var (
+ strconvPackage = protogen.GoImportPath("strconv")
+ fmtPackage = protogen.GoImportPath("fmt")
+ jsonPackage = protogen.GoImportPath("encoding/json")
+ easyprotoPackage = protogen.GoImportPath("github.com/VictoriaMetrics/easyproto")
+ mpPackage = protogen.GoImportPath("git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool")
+ protoPackage = protogen.GoImportPath("git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto")
+ encodingPackage = protogen.GoImportPath("git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto/encoding")
+
+ mp = mpPackage.Ident("MarshalerPool")
+)
+
+// GenerateFile generates a *.pb.go file enforcing field-order serialization.
+func GenerateFile(gen *protogen.Plugin, file *protogen.File) *protogen.GeneratedFile {
+ filename := file.GeneratedFilenamePrefix + "_frostfs.pb.go"
+ g := gen.NewGeneratedFile(filename, file.GoImportPath)
+
+ g.P("// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.")
+ g.P()
+ g.P("package ", file.GoPackageName)
+ g.P()
+ g.Import(encodingPackage)
+
+ // Doesn't work for multiple files in a single package, use external pool.
+ // g.P("var mp ", easyprotoPackage.Ident("MarshalerPool"))
+
+ for _, e := range file.Enums {
+ emitEnum(g, e)
+ }
+ for _, msg := range file.Messages {
+ emitEasyProto(g, msg)
+ }
+ return g
+}
+
+func emitEnum(g *protogen.GeneratedFile, e *protogen.Enum) {
+ g.P("type " + e.GoIdent.GoName + " int32")
+ g.P("const (")
+ for _, ev := range e.Values {
+ g.P(ev.GoIdent.GoName, " ", e.GoIdent.GoName, " = ", ev.Desc.Number())
+ }
+ g.P(")")
+
+ g.P("var (")
+ g.P(e.GoIdent.GoName+"_name", " = map[int32]string{")
+ for _, value := range e.Values {
+ g.P(value.Desc.Number(), ": ", strconv.Quote(string(value.Desc.Name())), ",")
+ }
+ g.P("}")
+ g.P(e.GoIdent.GoName+"_value", " = map[string]int32{")
+ for _, value := range e.Values {
+ g.P(strconv.Quote(string(value.Desc.Name())), ": ", value.Desc.Number(), ",")
+ }
+ g.P("}")
+ g.P(")")
+ g.P()
+
+ g.P("func (x ", e.GoIdent.GoName, ") String() string {")
+ g.P("if v, ok := ", e.GoIdent.GoName+"_name[int32(x)]; ok {")
+ g.P("return v")
+ g.P("}")
+ g.P("return ", strconvPackage.Ident("FormatInt"), "(int64(x), 10)")
+ g.P("}")
+
+ g.P("func (x *", e.GoIdent.GoName, ") FromString(s string) bool {")
+ g.P("if v, ok := ", e.GoIdent.GoName+"_value[s]; ok {")
+ g.P("*x = ", e.GoIdent.GoName, "(v)")
+ g.P("return true")
+ g.P("}")
+ g.P("return false")
+ g.P("}")
+}
+
+func emitEasyProto(g *protogen.GeneratedFile, msg *protogen.Message) {
+ for _, e := range msg.Enums {
+ emitEnum(g, e)
+ }
+ for _, m := range msg.Messages {
+ emitEasyProto(g, m)
+ }
+
+ g.P("type " + msg.GoIdent.GoName + " struct {")
+ emitMessageFields(g, msg)
+ g.P("}")
+
+ g.P("var (")
+ g.P("_ ", encodingPackage.Ident("ProtoMarshaler"), " = (*", msg.GoIdent.GoName, ")(nil)")
+ g.P("_ ", encodingPackage.Ident("ProtoUnmarshaler"), " = (*", msg.GoIdent.GoName, ")(nil)")
+ g.P("_ ", jsonPackage.Ident("Marshaler"), " = (*", msg.GoIdent.GoName, ")(nil)")
+ g.P("_ ", jsonPackage.Ident("Unmarshaler"), " = (*", msg.GoIdent.GoName, ")(nil)")
+ g.P(")")
+
+ emitStableSize(g, msg)
+ if strings.HasSuffix(msg.GoIdent.GoName, "Request") || strings.HasSuffix(msg.GoIdent.GoName, "Response") {
+ emitSignatureMethods(g, msg)
+ }
+
+ emitProtoMethods(g, msg)
+ emitGettersSetters(g, msg)
+ emitJSONMethods(g, msg)
+
+ for _, f := range msg.Fields {
+ if isFirstOneof(f) {
+ genOneof(g, f)
+ }
+ }
+}
+
+func isFirstOneof(f *protogen.Field) bool {
+ return f.Oneof != nil && f == f.Oneof.Fields[0]
+}
+
+func emitOneofGettersSetters(g *protogen.GeneratedFile, msg *protogen.Message, ff *protogen.Field) {
+ // For some reason protoc generates different code for oneof message/non-message fields:
+ // 1. For message we have 2 level struct wrapping and setters use inner type.
+ // 2. For other types we also have 2 level wrapping, but setters use outer type.
+ ft := fieldType(g, ff)
+
+ g.P("func (x *", msg.GoIdent.GoName, ") Get", ff.GoName, "() ", ft, " {")
+ g.P("if xx, ok := x.Get", ff.Oneof.GoName, "().(*", ff.GoIdent, "); ok { return xx.", ff.GoName, " }")
+ g.P("return ", fieldDefaultValue(ff))
+ g.P("}")
+
+ if ff.Desc.Kind() == protoreflect.MessageKind {
+ g.P("func (x *", msg.GoIdent.GoName, ") Set", ff.GoName, "(v ", ft, ") {")
+ g.P("x.", ff.Oneof.GoName, " = &", ff.GoIdent, "{", ff.GoName, ": v}")
+ g.P("}")
+ } else {
+ g.P("func (x *", msg.GoIdent.GoName, ") Set", ff.GoName, "(v *", ff.GoIdent, ") {")
+ g.P("x.", ff.Oneof.GoName, " = v")
+ g.P("}")
+
+ ft := fieldType(g, ff)
+ emitGetterSetter(g, ff.GoIdent.GoName, ff.GoName, ft.String(), fieldDefaultValue(ff))
+ }
+}
+
+func emitGettersSetters(g *protogen.GeneratedFile, msg *protogen.Message) {
+ for _, f := range msg.Fields {
+ if f.Oneof != nil {
+ if f.Oneof.Fields[0] == f {
+ emitGetterSetter(g, msg.GoIdent.GoName, f.Oneof.GoName, oneOfDescriptor(f.Oneof), "nil")
+ for _, ff := range f.Oneof.Fields {
+ emitOneofGettersSetters(g, msg, ff)
+ }
+ }
+ continue
+ }
+
+ ft := fieldType(g, f)
+ emitGetterSetter(g, msg.GoIdent.GoName, f.GoName, ft.String(), fieldDefaultValue(f))
+ }
+}
+
+func emitMessageFields(g *protogen.GeneratedFile, msg *protogen.Message) {
+ for _, field := range msg.Fields {
+ genMessageField(g, field)
+ }
+}
+
+func genMessageField(g *protogen.GeneratedFile, field *protogen.Field) {
+ if field.Oneof != nil {
+ if field.Oneof.Fields[0] == field {
+ g.P(field.Oneof.GoName, " ", oneOfDescriptor(field.Oneof))
+ }
+ return
+ }
+
+ typ := fieldType(g, field)
+ g.P(field.GoName, " ", typ, fmt.Sprintf(" `json:%q`", fieldJSONName(field)))
+}
+
+func oneOfDescriptor(oneof *protogen.Oneof) string {
+ return "is" + oneof.GoIdent.GoName
+}
+
+func genOneof(g *protogen.GeneratedFile, field *protogen.Field) {
+ ifName := oneOfDescriptor(field.Oneof)
+ g.P("type ", ifName, " interface {")
+ g.P(ifName, "()")
+ g.P("}")
+ g.P()
+ for _, field := range field.Oneof.Fields {
+ g.P("type ", field.GoIdent, " struct {")
+
+ ft := fieldType(g, field)
+ g.P(field.GoName, " ", ft)
+ g.P("}")
+ g.P()
+ }
+ for _, field := range field.Oneof.Fields {
+ g.P("func (*", field.GoIdent, ") ", ifName, "() {}")
+ g.P()
+ }
+}
+
+func fieldDefaultValue(field *protogen.Field) string {
+ if field.Desc.Cardinality() == protoreflect.Repeated {
+ return "nil"
+ }
+
+ switch field.Desc.Kind() {
+ case protoreflect.MessageKind, protoreflect.BytesKind:
+ return "nil"
+ case protoreflect.BoolKind:
+ return "false"
+ case protoreflect.StringKind:
+ return `""`
+ default:
+ return "0"
+ }
+}
+
+func castFieldName(f *protogen.Field) string {
+ if f.Oneof != nil {
+ return "x." + f.Oneof.GoName
+ }
+
+ name := "x." + f.GoName
+ if f.Desc.Kind() != protoreflect.EnumKind {
+ return name
+ }
+ return "int32(" + name + ")"
+}
+
+func sortFields(fs []*protogen.Field) []*protogen.Field {
+ res := make([]*protogen.Field, len(fs))
+ copy(res, fs)
+ sort.Slice(res, func(i, j int) bool {
+ return res[i].Desc.Number() < res[j].Desc.Number()
+ })
+ return res
+}
diff --git a/api/util/protogen/internalgengo/fuzz.go b/api/util/protogen/internalgengo/fuzz.go
new file mode 100644
index 0000000..ec99692
--- /dev/null
+++ b/api/util/protogen/internalgengo/fuzz.go
@@ -0,0 +1,69 @@
+package internalgengo
+
+import (
+ "google.golang.org/protobuf/compiler/protogen"
+)
+
+var testingPackage = protogen.GoImportPath("testing")
+
+func GenerateFuzzTests(gen *protogen.Plugin, file *protogen.File) {
+ {
+ filename := file.GeneratedFilenamePrefix + "_frostfs_fuzz.go"
+ g := gen.NewGeneratedFile(filename, file.GoImportPath)
+
+ g.P("//go:build gofuzz")
+ g.P("// +build gofuzz")
+ g.P("// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.")
+ g.P()
+ g.P("package ", file.GoPackageName)
+ g.P()
+
+ for _, msg := range file.Messages {
+ emitFuzzWrappers(g, msg)
+ }
+ }
+ {
+ filename := file.GeneratedFilenamePrefix + "_frostfs_test.go"
+ g := gen.NewGeneratedFile(filename, file.GoImportPath)
+
+ g.P("//go:build gofuzz")
+ g.P("// +build gofuzz")
+ g.P("// Code generated by protoc-gen-go-frostfs. DO NOT EDIT.")
+ g.P()
+ g.P("package ", file.GoPackageName)
+ g.P()
+
+ for _, msg := range file.Messages {
+ emitFuzzTests(g, msg)
+ }
+ }
+}
+
+func emitFuzzWrappers(g *protogen.GeneratedFile, msg *protogen.Message) {
+ g.P("func DoFuzzProto", msg.GoIdent.GoName, "(data []byte) int {")
+ g.P("msg := new(", msg.GoIdent.GoName, ")")
+ g.P("if err := msg.UnmarshalProtobuf(data); err != nil { return 0 }")
+ g.P("_ = msg.MarshalProtobuf(nil)")
+ g.P("return 1")
+ g.P("}")
+
+ g.P("func DoFuzzJSON", msg.GoIdent.GoName, "(data []byte) int {")
+ g.P("msg := new(", msg.GoIdent.GoName, ")")
+ g.P("if err := msg.UnmarshalJSON(data); err != nil { return 0 }")
+ g.P("_, err := msg.MarshalJSON()")
+ g.P("if err != nil { panic(err) }")
+ g.P("return 1")
+ g.P("}")
+}
+
+func emitFuzzTests(g *protogen.GeneratedFile, msg *protogen.Message) {
+ g.P("func FuzzProto", msg.GoIdent.GoName, "(f *", testingPackage.Ident("F"), ") {")
+ g.P("f.Fuzz(func(t *", testingPackage.Ident("T"), ", data []byte) {")
+ g.P("DoFuzzProto", msg.GoIdent.GoName, "(data)")
+ g.P("})}")
+
+ g.P("func FuzzJSON", msg.GoIdent.GoName, "(f *", testingPackage.Ident("F"), ") {")
+ g.P("f.Fuzz(func(t *", testingPackage.Ident("T"), ", data []byte) {")
+ g.P("DoFuzzJSON", msg.GoIdent.GoName, "(data)")
+ g.P("})}")
+}
diff --git a/api/util/protogen/internalgengo/getter.go b/api/util/protogen/internalgengo/getter.go
new file mode 100644
index 0000000..78deef7
--- /dev/null
+++ b/api/util/protogen/internalgengo/getter.go
@@ -0,0 +1,14 @@
+package internalgengo
+
+import "google.golang.org/protobuf/compiler/protogen"
+
+func emitGetterSetter(g *protogen.GeneratedFile, typeName string, fieldName string, fieldType string, defaultValue string) {
+ g.P("func (x *", typeName, ") Get", fieldName, "() ", fieldType, " {")
+ g.P("if x != nil { return x.", fieldName, "}")
+ g.P("return ", defaultValue)
+ g.P("}")
+
+ g.P("func (x *", typeName, ") Set", fieldName, "(v ", fieldType, ") {")
+ g.P("x.", fieldName, " = v")
+ g.P("}")
+}
diff --git a/api/util/protogen/internalgengo/json.go b/api/util/protogen/internalgengo/json.go
new file mode 100644
index 0000000..20730a6
--- /dev/null
+++ b/api/util/protogen/internalgengo/json.go
@@ -0,0 +1,284 @@
+package internalgengo
+
+import (
+ "fmt"
+
+ "google.golang.org/protobuf/compiler/protogen"
+ "google.golang.org/protobuf/reflect/protoreflect"
+)
+
+var (
+ jwriterPackage = protogen.GoImportPath("github.com/mailru/easyjson/jwriter")
+ jlexerPackage = protogen.GoImportPath("github.com/mailru/easyjson/jlexer")
+)
+
+func emitJSONMethods(g *protogen.GeneratedFile, msg *protogen.Message) {
+ emitJSONMarshal(g, msg)
+ emitJSONUnmarshal(g, msg)
+}
+
+func emitJSONUnmarshal(g *protogen.GeneratedFile, msg *protogen.Message) {
+ g.P("// UnmarshalJSON implements the json.Unmarshaler interface.")
+ g.P("func (x *", msg.GoIdent.GoName, ") UnmarshalJSON(data []byte) error {")
+ g.P("r := ", jlexerPackage.Ident("Lexer"), "{Data: data}")
+ g.P("x.UnmarshalEasyJSON(&r)")
+ g.P("return r.Error()")
+ g.P("}")
+
+ g.P("func (x *", msg.GoIdent.GoName, ") UnmarshalEasyJSON(in *", jlexerPackage.Ident("Lexer"), ") {")
+
+ g.P("isTopLevel := in.IsStart()")
+ g.P("if in.IsNull() {")
+ g.P("if isTopLevel { in.Consumed() }")
+ g.P("in.Skip()")
+ g.P("return")
+ g.P("}")
+
+ g.P("in.Delim('{')")
+ g.P("for !in.IsDelim('}') {")
+
+ g.P("key := in.UnsafeFieldName(false)")
+ g.P("in.WantColon()")
+ g.P("if in.IsNull() { in.Skip(); in.WantComma(); continue }")
+ g.P("switch key {")
+ for _, f := range msg.Fields {
+ g.P(`case "`, fieldJSONName(f), `":`)
+ if f.Oneof != nil {
+ g.P("xx := new(", f.GoIdent, ")")
+ g.P("x." + f.Oneof.GoName + " = xx")
+ emitJSONFieldRead(g, f, "xx")
+ continue
+ }
+ emitJSONFieldRead(g, f, "x")
+ }
+ g.P("}")
+ g.P("in.WantComma()")
+ g.P("}")
+ g.P("in.Delim('}')")
+ g.P("if isTopLevel { in.Consumed() }")
+ g.P("}")
+}
+
+func emitJSONParseInteger(g *protogen.GeneratedFile, ident string, method string, bitSize int, typ string) {
+ g.P("r := in.JsonNumber()")
+ g.P("n := r.String()")
+ g.P("v, err := ", strconvPackage.Ident(method), "(n, 10, ", bitSize, ")")
+ g.P("if err != nil {")
+ g.P(" in.AddError(err)")
+ g.P(" return")
+ g.P("}")
+ g.P(ident, " := ", typ, "(v)")
+}
+
+func emitJSONReadEnum(g *protogen.GeneratedFile, name string, enumType string) {
+ g.P(`switch v := in.Interface().(type) {
+ case string:
+ if vv, ok := `+enumType+`_value[v]; ok {
+ `+name+` = `+enumType+`(vv)
+ break
+ }
+ vv, err := `, strconvPackage.Ident("ParseInt"), `(v, 10, 32)
+ if err != nil {
+ in.AddError(err)
+ return
+ }
+ `+name+` = `+enumType+`(vv)
+ case float64:
+ `+name+` = `+enumType+`(v)
+ }`)
+}
+
+func emitJSONFieldRead(g *protogen.GeneratedFile, f *protogen.Field, name string) {
+ g.P("{")
+ defer g.P("}")
+
+ if f.Desc.IsList() {
+ g.P("var f ", fieldType(g, f)[2:])
+ g.P("var list ", fieldType(g, f))
+ g.P("in.Delim('[')")
+ defer g.P("in.Delim(']')")
+
+ g.P("for !in.IsDelim(']') {")
+ } else {
+ g.P("var f ", fieldType(g, f))
+ }
+
+ var template string
+ switch f.Desc.Kind() {
+ case protoreflect.BoolKind:
+ template = "%s = in.Bool()"
+ case protoreflect.EnumKind:
+ g.Import(strconvPackage)
+
+ enumType := fieldType(g, f).String()
+ g.P("var parsedValue " + enumType)
+ emitJSONReadEnum(g, "parsedValue", enumType)
+ template = "%s = parsedValue"
+ case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
+ emitJSONParseInteger(g, "pv", "ParseInt", 32, "int32")
+ template = "%s = pv"
+ case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
+ emitJSONParseInteger(g, "pv", "ParseUint", 32, "uint32")
+ template = "%s = pv"
+ case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
+ emitJSONParseInteger(g, "pv", "ParseInt", 64, "int64")
+ template = "%s = pv"
+ case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
+ emitJSONParseInteger(g, "pv", "ParseUint", 64, "uint64")
+ template = "%s = pv"
+ case protoreflect.FloatKind:
+ template = "%s = in.Float32()"
+ case protoreflect.DoubleKind:
+ template = "%s = in.Float64()"
+ case protoreflect.StringKind:
+ template = "%s = in.String()"
+ case protoreflect.BytesKind:
+ // Since some time ago proto3 support optional keyword, thus the presence is not tracked by default:
+ // https://github.com/protocolbuffers/protobuf-go/blob/fb995f184a1719ec42b247a3771d1036d92adf67/internal/impl/message_reflect_field.go#L327
+ // We do not explicitly support `optional` keyword, protoc will fail on such fileds.
+ // Thus, treat empty string as `[]byte(nil)`.
+ template = `{
+ tmp := in.Bytes()
+ if len(tmp) == 0 {
+ tmp = nil
+ }
+ %s = tmp
+ }`
+ case protoreflect.MessageKind:
+ if f.Desc.IsList() {
+ g.P("f = ", fieldType(g, f)[2:], "{}")
+ } else {
+ g.P("f = new(", fieldType(g, f)[1:], ")")
+ }
+ template = "%s.UnmarshalEasyJSON(in)"
+ case protoreflect.GroupKind:
+ panic("unimplemented")
+ }
+ g.P(fmt.Sprintf(template, "f"))
+ if f.Desc.IsList() {
+ g.P("list = append(list, f)")
+ g.P("in.WantComma()")
+ g.P("}")
+ g.P(name, ".", f.GoName, " = list")
+ } else {
+ g.P(name, ".", f.GoName, " = f")
+ }
+}
+
+func emitJSONMarshal(g *protogen.GeneratedFile, msg *protogen.Message) {
+ g.P("// MarshalJSON implements the json.Marshaler interface.")
+ g.P("func (x *", msg.GoIdent.GoName, ") MarshalJSON() ([]byte, error) {")
+ g.P("w := ", jwriterPackage.Ident("Writer"), "{}")
+ g.P("x.MarshalEasyJSON(&w)")
+ g.P("return w.Buffer.BuildBytes(), w.Error")
+ g.P("}")
+
+ g.P("func (x *", msg.GoIdent.GoName, ") MarshalEasyJSON(out *", jwriterPackage.Ident("Writer"), ") {")
+ g.P(`if x == nil { out.RawString("null"); return }`)
+
+ if len(msg.Fields) != 0 {
+ g.P("first := true")
+ }
+ g.P("out.RawByte('{')")
+ for _, f := range msg.Fields {
+ if f.Oneof != nil {
+ if f.Oneof.Fields[0] != f {
+ continue
+ }
+
+ g.P("switch xx := x.", f.Oneof.GoName, ".(type) {")
+ for _, ff := range f.Oneof.Fields {
+ g.P("case *", ff.GoIdent, ":")
+ emitJSONFieldWrite(g, ff, "xx")
+ }
+ g.P("}")
+ continue
+ }
+ emitJSONFieldWrite(g, f, "x")
+ }
+ g.P("out.RawByte('}')")
+ g.P("}")
+}
+
+func emitJSONFieldWrite(g *protogen.GeneratedFile, f *protogen.Field, name string) {
+ g.P("{")
+ defer g.P("}")
+
+ selector := name + "." + f.GoName
+
+ // 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), `\":"`)
+ g.P("out.RawString(prefix)")
+ if f.Desc.IsList() {
+ selector += "[i]"
+ g.P("out.RawByte('[')")
+ defer g.P("out.RawByte(']')")
+
+ g.P("for i := range ", name, ".", f.GoName, " {")
+ g.P("if i != 0 { out.RawByte(',') }")
+ defer g.P("}")
+ }
+
+ var template string
+ switch f.Desc.Kind() {
+ case protoreflect.BoolKind:
+ template = "out.Bool(%s)"
+ case protoreflect.EnumKind:
+ enumType := fieldType(g, f).String()
+ template = `v := int32(%s)
+ if vv, ok := ` + enumType + `_name[v]; ok {
+ out.String(vv)
+ } else {
+ out.Int32(v)
+ }`
+ case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
+ template = "out.Int32(%s)"
+ case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
+ template = "out.Uint32(%s)"
+ case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
+ g.P("out.RawByte('\"')")
+ g.P("out.Buffer.Buf = ", strconvPackage.Ident("AppendInt"), "(out.Buffer.Buf, ", selector, ", 10)")
+ g.P("out.RawByte('\"')")
+ return
+ case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
+ g.P("out.RawByte('\"')")
+ g.P("out.Buffer.Buf = ", strconvPackage.Ident("AppendUint"), "(out.Buffer.Buf, ", selector, ", 10)")
+ g.P("out.RawByte('\"')")
+ return
+ case protoreflect.FloatKind:
+ template = "out.Float32(%s)"
+ case protoreflect.DoubleKind:
+ template = "out.Float64(%s)"
+ case protoreflect.StringKind:
+ template = "out.String(%s)"
+ case protoreflect.BytesKind:
+ 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:
+ panic("unimplemented")
+ }
+ g.P(fmt.Sprintf(template, selector))
+}
+
+func fieldJSONName(f *protogen.Field) string {
+ if f.Desc.HasJSONName() {
+ return f.Desc.JSONName()
+ }
+ return string(f.Desc.Name())
+}
diff --git a/api/util/protogen/internalgengo/options.go b/api/util/protogen/internalgengo/options.go
new file mode 100644
index 0000000..8aab8f0
--- /dev/null
+++ b/api/util/protogen/internalgengo/options.go
@@ -0,0 +1,7 @@
+package internalgengo
+
+type Options struct {
+ Fuzz bool `yaml:"fuzz"`
+ JSON bool `yaml:"json"`
+ MessageData []string `yaml:"message_data"`
+}
diff --git a/api/util/protogen/internalgengo/proto.go b/api/util/protogen/internalgengo/proto.go
new file mode 100644
index 0000000..1467541
--- /dev/null
+++ b/api/util/protogen/internalgengo/proto.go
@@ -0,0 +1,202 @@
+package internalgengo
+
+import (
+ "google.golang.org/protobuf/compiler/protogen"
+ "google.golang.org/protobuf/reflect/protoreflect"
+)
+
+func emitProtoMethods(g *protogen.GeneratedFile, msg *protogen.Message) {
+ emitMarshalProtobuf(g, msg)
+ emitUnmarshalProtobuf(g, msg)
+}
+
+func emitUnmarshalProtobuf(g *protogen.GeneratedFile, msg *protogen.Message) {
+ g.P("// UnmarshalProtobuf implements the encoding.ProtoUnmarshaler interface.")
+ g.P("func (x *", msg.GoIdent.GoName, ") UnmarshalProtobuf(src []byte) (err error) {")
+ g.P("var fc ", easyprotoPackage.Ident("FieldContext"))
+ g.P("for len(src) > 0 {")
+ {
+ g.P("src, err = fc.NextField(src)")
+ g.P("if err != nil { return ", fmtPackage.Ident("Errorf"), `("cannot read next field in %s", "`, msg.GoIdent.GoName, `")}`)
+ g.P("switch fc.FieldNum {")
+ {
+ for _, f := range msg.Fields {
+ g.P("case ", f.Desc.Number(), ":", " // ", f.GoName)
+ emitFieldUnmarshal(g, f)
+ }
+ }
+ g.P("}")
+ }
+ g.P("}")
+
+ g.P("return nil")
+ g.P("}")
+}
+
+func emitFieldUnmarshal(g *protogen.GeneratedFile, f *protogen.Field) {
+ name := castFieldName(f)
+ if f.Desc.Kind() == protoreflect.MessageKind {
+ g.P("data, ok := fc.MessageData()")
+ g.P(`if !ok { return fmt.Errorf("cannot unmarshal field %s", "`, f.GoName, `") }`)
+ if f.Desc.IsList() {
+ g.P(name, " = append(", name, ", ", fieldType(g, f)[2:], "{})")
+ g.P("ff := &", name, "[len(", name, ")-1]")
+ name = "ff"
+ } else if f.Oneof != nil {
+ const tmp = "oneofField"
+ g.P(tmp, " := &", f.GoIdent, "{", f.GoName, ": ", "new(", fieldType(g, f)[1:], ")}")
+ defer g.P(name, " = ", tmp)
+
+ name = tmp + "." + f.GoName
+ } else {
+ g.P(name, " = new(", fieldType(g, f)[1:], ")")
+ }
+
+ g.P(`if err := `, name, `.UnmarshalProtobuf(data); err != nil { return fmt.Errorf("unmarshal: %w", err)}`)
+ return
+ }
+
+ getter, _ := easyprotoKindInfo(f.Desc.Kind())
+
+ if f.Desc.IsList() && (f.Desc.Kind() == protoreflect.BytesKind || f.Desc.Kind() == protoreflect.StringKind || f.Desc.Kind() == protoreflect.Uint64Kind && !f.Desc.IsPacked()) {
+ g.P("data, ok := fc.", getter, "()")
+ g.P(`if !ok { return fmt.Errorf("cannot unmarshal field %s", "`, f.GoName, `") }`)
+ g.P(name, " = append(", name, ", data)")
+ return
+ }
+
+ if f.Desc.IsList() {
+ g.P("data, ok := fc.Unpack", getter, "s(nil)")
+ } else {
+ g.P("data, ok := fc.", getter, "()")
+ }
+
+ g.P(`if !ok { return fmt.Errorf("cannot unmarshal field %s", "`, f.GoName, `") }`)
+ value := "data"
+ if f.Desc.Kind() == protoreflect.EnumKind {
+ value = fieldType(g, f).String() + "(data)"
+ }
+
+ if f.Oneof == nil {
+ g.P("x.", f.GoName, " = ", value)
+ } else {
+ g.P("x.", f.Oneof.GoName, " = &", f.GoIdent, "{", f.GoName, ": data}")
+ }
+}
+
+func emitMarshalProtobuf(g *protogen.GeneratedFile, msg *protogen.Message) {
+ g.P("// MarshalProtobuf implements the encoding.ProtoMarshaler interface.")
+ g.P("func (x *", msg.GoIdent.GoName, ") MarshalProtobuf(dst []byte) []byte {")
+ g.P("m := ", mp, ".Get()")
+ g.P("defer ", mp, ".Put(m)")
+ g.P("x.EmitProtobuf(m.MessageMarshaler())")
+ g.P("dst = m.Marshal(dst)")
+ g.P("return dst")
+ g.P("}\n")
+
+ g.P("func (x *", msg.GoIdent.GoName, ") EmitProtobuf(mm *", easyprotoPackage.Ident("MessageMarshaler"), ") {")
+ if len(msg.Fields) != 0 {
+ fs := sortFields(msg.Fields)
+
+ g.P("if x == nil { return }")
+ for _, f := range fs {
+ emitFieldMarshal(g, f)
+ }
+ }
+ g.P("}")
+}
+
+func emitMarshalOneof(g *protogen.GeneratedFile, f *protogen.Field) {
+ name := "x." + f.Oneof.GoName
+ g.P("if inner, ok := ", name, ".(*", f.GoIdent.GoName, "); ok {")
+ defer g.P("}")
+ emitMarshalRaw(g, f, "inner."+f.GoName)
+}
+
+// easyprotoKindInfo returns string name for kind, used in easyproto methods.
+// The second return value is a condition to test for the default value of kind.
+func easyprotoKindInfo(kind protoreflect.Kind) (string, func(string) string) {
+ switch kind {
+ case protoreflect.BoolKind:
+ return "Bool", identity
+ case protoreflect.EnumKind:
+ return "Int32", notZero
+ case protoreflect.Int32Kind:
+ return "Int32", notZero
+ case protoreflect.Sint32Kind:
+ return "Sint32", notZero
+ case protoreflect.Uint32Kind:
+ return "Uint32", notZero
+ case protoreflect.Int64Kind:
+ return "Int64", notZero
+ case protoreflect.Sint64Kind:
+ return "Sint64", notZero
+ case protoreflect.Uint64Kind:
+ return "Uint64", notZero
+ case protoreflect.Sfixed32Kind:
+ return "Sfixed32", notZero
+ case protoreflect.Fixed32Kind:
+ return "Fixed32", notZero
+ case protoreflect.FloatKind:
+ return "Float", notZero
+ case protoreflect.Sfixed64Kind:
+ return "Sfixed64", notZero
+ case protoreflect.Fixed64Kind:
+ return "Fixed64", notZero
+ case protoreflect.DoubleKind:
+ return "Double", notZero
+ case protoreflect.StringKind:
+ return "String", notEmpty
+ case protoreflect.BytesKind:
+ return "Bytes", notEmpty
+ case protoreflect.GroupKind:
+ panic("unimplemented")
+ default:
+ panic("unreachable")
+ }
+}
+
+func emitFieldMarshal(g *protogen.GeneratedFile, f *protogen.Field) {
+ if f.Oneof != nil {
+ emitMarshalOneof(g, f)
+ return
+ }
+
+ emitMarshalRaw(g, f, castFieldName(f))
+}
+
+func emitMarshalRaw(g *protogen.GeneratedFile, f *protogen.Field, name string) {
+ if f.Desc.Kind() == protoreflect.MessageKind {
+ if f.Desc.IsList() {
+ g.P("for i := range ", name, " {")
+ defer g.P("}")
+
+ name += "[i]"
+ } else {
+ g.P("if ", notNil(name), " {")
+ defer g.P("}")
+ }
+
+ g.P(name, ".EmitProtobuf(mm.AppendMessage(", f.Desc.Number(), "))")
+ return
+ }
+
+ method, cond := easyprotoKindInfo(f.Desc.Kind())
+ method = "Append" + method
+ if f.Desc.IsList() && !f.Desc.IsPacked() {
+ g.P("for j := range ", name, " {")
+ g.P("mm.", method, "(", f.Desc.Number(), ", ", name, "[j])")
+ g.P("}")
+ return
+ }
+
+ if f.Desc.IsList() {
+ method += "s"
+ g.P("if ", notEmpty(name), "{")
+ } else {
+ g.P("if ", cond(name), " {")
+ }
+
+ g.P("mm.", method, "(", f.Desc.Number(), ", ", name, ")")
+ g.P("}")
+}
diff --git a/api/util/protogen/internalgengo/proto_field_type.go b/api/util/protogen/internalgengo/proto_field_type.go
new file mode 100644
index 0000000..0096751
--- /dev/null
+++ b/api/util/protogen/internalgengo/proto_field_type.go
@@ -0,0 +1,59 @@
+package internalgengo
+
+import (
+ "google.golang.org/protobuf/compiler/protogen"
+ "google.golang.org/protobuf/reflect/protoreflect"
+)
+
+type structField string
+
+func (f structField) String() string {
+ return string(f)
+}
+
+func (f structField) PointerTo() structField {
+ return "*" + f
+}
+
+func (f structField) SliceOf() structField {
+ return "[]" + f
+}
+
+func fieldType(g *protogen.GeneratedFile, field *protogen.Field) structField {
+ var typ structField
+ switch field.Desc.Kind() {
+ case protoreflect.BoolKind:
+ typ = "bool"
+ case protoreflect.EnumKind:
+ typ = structField(g.QualifiedGoIdent(field.Enum.GoIdent))
+ case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
+ typ = "int32"
+ case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
+ typ = "uint32"
+ case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
+ typ = "int64"
+ case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
+ typ = "uint64"
+ case protoreflect.FloatKind:
+ typ = "float32"
+ case protoreflect.DoubleKind:
+ typ = "float64"
+ case protoreflect.StringKind:
+ typ = "string"
+ case protoreflect.BytesKind:
+ typ = "[]byte"
+ case protoreflect.MessageKind:
+ typ = structField(g.QualifiedGoIdent(field.Message.GoIdent))
+ if !field.Desc.IsList() {
+ typ = typ.PointerTo()
+ }
+ case protoreflect.GroupKind:
+ panic("unimplemented")
+ }
+
+ if field.Desc.IsList() {
+ typ = "[]" + typ
+ }
+
+ return typ
+}
diff --git a/api/util/protogen/internalgengo/proto_stable_compat.go b/api/util/protogen/internalgengo/proto_stable_compat.go
new file mode 100644
index 0000000..3c4670c
--- /dev/null
+++ b/api/util/protogen/internalgengo/proto_stable_compat.go
@@ -0,0 +1,124 @@
+package internalgengo
+
+import (
+ "google.golang.org/protobuf/compiler/protogen"
+ "google.golang.org/protobuf/reflect/protoreflect"
+)
+
+var protowirePackage = protogen.GoImportPath("google.golang.org/protobuf/encoding/protowire")
+
+func emitStableSize(g *protogen.GeneratedFile, msg *protogen.Message) {
+ fs := sortFields(msg.Fields)
+
+ g.P("// StableSize returns the size of x in protobuf format.")
+ g.P("//")
+ g.P("// Structures with the same field values have the same binary size.")
+ g.P("func (x *", msg.GoIdent.GoName, ") StableSize() (size int) {")
+ g.P("if x == nil { return 0 }")
+ if len(fs) != 0 {
+ for _, f := range fs {
+ if f.Desc.IsList() && marshalers[f.Desc.Kind()].RepeatedDouble && !(f.Desc.Kind() == protoreflect.Uint64Kind && !f.Desc.IsPacked()) {
+ g.P("var n int")
+ break
+ }
+ }
+ for _, f := range fs {
+ emitFieldSize(g, f)
+ }
+ }
+ g.P("return size")
+ g.P("}\n")
+}
+
+func emitSignatureMethods(g *protogen.GeneratedFile, msg *protogen.Message) {
+ // SignedDataSize implementation (only for requests and responses).
+ g.P("// ReadSignedData fills buf with signed data of x.")
+ g.P("// If buffer length is less than x.SignedDataSize(), new buffer is allocated.")
+ g.P("//")
+ g.P("// Returns any error encountered which did not allow writing the data completely.")
+ g.P("// Otherwise, returns the buffer in which the data is written.")
+ g.P("//")
+ g.P("// Structures with the same field values have the same signed data.")
+ g.P("func (x *", msg.GoIdent.GoName, ") SignedDataSize() int {")
+ g.P("return x.GetBody().StableSize()")
+ g.P("}\n")
+
+ // ReadSignedData implementation (only for requests and responses).
+ g.P("// SignedDataSize returns size of the request signed data in bytes.")
+ g.P("//")
+ g.P("// Structures with the same field values have the same signed data size.")
+ g.P("func (x *", msg.GoIdent.GoName, ") ReadSignedData(buf []byte) ([]byte, error) {")
+ g.P("return x.GetBody().MarshalProtobuf(buf), nil")
+ g.P("}\n")
+}
+
+func emitFieldSize(g *protogen.GeneratedFile, f *protogen.Field) {
+ m := marshalers[f.Desc.Kind()]
+ if m.Prefix == "" {
+ g.P("// FIXME missing field marshaler: ", f.GoName, " of type ", f.Desc.Kind().String())
+ g.P(`panic("unimplemented")`)
+ return
+ }
+
+ name := castFieldName(f)
+ if f.Oneof != nil {
+ name = "x." + f.Oneof.GoName
+ g.P("if inner, ok := ", name, ".(*", f.GoIdent.GoName, "); ok {")
+ defer g.P("}")
+ name = "inner." + f.GoName
+ }
+
+ switch {
+ case f.Desc.IsList() && (f.Desc.Kind() == protoreflect.MessageKind || f.Desc.Kind() == protoreflect.Uint64Kind && !f.Desc.IsPacked()):
+ g.P("for i := range ", name, "{")
+ if f.Desc.Kind() == protoreflect.MessageKind {
+ g.P("size += ", protoPackage.Ident("NestedStructureSizeUnchecked"), "(", f.Desc.Number(), ", &", name, "[i])")
+ } else {
+ if f.Desc.Kind() != protoreflect.Uint64Kind {
+ panic("only uint64 unpacked primitive is supported")
+ }
+
+ g.P("size += ", protowirePackage.Ident("SizeGroup"), "(",
+ protowirePackage.Ident("Number"), "(", f.Desc.Number(), "), ",
+ protowirePackage.Ident("SizeVarint"), "(", name, "[i]))")
+ }
+ g.P("}")
+
+ case f.Desc.IsList():
+ if m.RepeatedDouble {
+ g.P("n, _ = ", protoPackage.Ident("Repeated"+m.Prefix+"Size"), "(", f.Desc.Number(), ", ", name, ")")
+ g.P("size += n")
+ } else {
+ g.P("size += ", protoPackage.Ident("Repeated"+m.Prefix+"Size"), "(", f.Desc.Number(), ", ", name, ")")
+ }
+ default:
+ g.P("size += ", protoPackage.Ident(m.Prefix+"Size"), "(", f.Desc.Number(), ", ", name, ")")
+ }
+}
+
+type marshalerDesc struct {
+ Prefix string
+ RepeatedDouble bool
+}
+
+// Unused kinds are commented.
+var marshalers = map[protoreflect.Kind]marshalerDesc{
+ protoreflect.BoolKind: {Prefix: "Bool"},
+ protoreflect.EnumKind: {Prefix: "Enum"},
+ protoreflect.Int32Kind: {Prefix: "Int32", RepeatedDouble: true},
+ // protoreflect.Sint32Kind: "",
+ protoreflect.Uint32Kind: {Prefix: "UInt32", RepeatedDouble: true},
+ protoreflect.Int64Kind: {Prefix: "Int64", RepeatedDouble: true},
+ // protoreflect.Sint64Kind: "",
+ protoreflect.Uint64Kind: {Prefix: "UInt64", RepeatedDouble: true},
+ // protoreflect.Sfixed32Kind: "",
+ protoreflect.Fixed32Kind: {Prefix: "Fixed32", RepeatedDouble: true},
+ // protoreflect.FloatKind: "",
+ // protoreflect.Sfixed64Kind: "",
+ protoreflect.Fixed64Kind: {Prefix: "Fixed64", RepeatedDouble: true},
+ protoreflect.DoubleKind: {Prefix: "Float64"},
+ protoreflect.StringKind: {Prefix: "String"},
+ protoreflect.BytesKind: {Prefix: "Bytes"},
+ protoreflect.MessageKind: {Prefix: "NestedStructure"},
+ // protoreflect.GroupKind: "",
+}
diff --git a/api/util/protogen/internalgengo/writer.go b/api/util/protogen/internalgengo/writer.go
new file mode 100644
index 0000000..7b0d4f1
--- /dev/null
+++ b/api/util/protogen/internalgengo/writer.go
@@ -0,0 +1,30 @@
+package internalgengo
+
+import (
+ "fmt"
+)
+
+type condition = func(string) string
+
+var (
+ _ condition = notZero
+ _ condition = notEmpty
+ _ condition = identity
+ _ condition = notNil
+)
+
+func notZero(name string) string {
+ return fmt.Sprintf("%s != 0", name)
+}
+
+func notEmpty(name string) string {
+ return fmt.Sprintf("len(%s) != 0", name)
+}
+
+func identity(name string) string {
+ return name
+}
+
+func notNil(name string) string {
+ return fmt.Sprintf("%s != nil", name)
+}
diff --git a/api/util/protogen/main.go b/api/util/protogen/main.go
new file mode 100644
index 0000000..3ebc1dd
--- /dev/null
+++ b/api/util/protogen/main.go
@@ -0,0 +1,27 @@
+package main
+
+import (
+ "flag"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/protogen/internalgengo"
+ "google.golang.org/protobuf/compiler/protogen"
+)
+
+func main() {
+ var flags flag.FlagSet
+ genFuzz := flags.Bool("fuzz", false, "generate fuzz tests")
+
+ protogen.Options{
+ ParamFunc: flags.Set,
+ }.Run(func(gen *protogen.Plugin) error {
+ for _, f := range gen.Files {
+ if f.Generate {
+ internalgengo.GenerateFile(gen, f)
+ if *genFuzz {
+ internalgengo.GenerateFuzzTests(gen, f)
+ }
+ }
+ }
+ return nil
+ })
+}
diff --git a/api/util/signature/data.go b/api/util/signature/data.go
new file mode 100644
index 0000000..e444a73
--- /dev/null
+++ b/api/util/signature/data.go
@@ -0,0 +1,93 @@
+package signature
+
+import (
+ "crypto/ecdsa"
+
+ crypto "git.frostfs.info/TrueCloudLab/frostfs-crypto"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
+)
+
+const poolSliceMaxSize = 128 * 1024
+
+var buffersPool = pool.NewBufferPool(poolSliceMaxSize)
+
+type DataSource interface {
+ ReadSignedData([]byte) ([]byte, error)
+ SignedDataSize() int
+}
+
+type DataWithSignature interface {
+ DataSource
+ GetSignature() *refs.Signature
+ SetSignature(*refs.Signature)
+}
+
+type SignOption func(*cfg)
+
+type KeySignatureHandler func(*refs.Signature)
+
+type KeySignatureSource func() *refs.Signature
+
+func SignDataWithHandler(key *ecdsa.PrivateKey, src DataSource, handler KeySignatureHandler, opts ...SignOption) error {
+ if key == nil {
+ return crypto.ErrEmptyPrivateKey
+ }
+
+ cfg := defaultCfg()
+
+ for i := range opts {
+ opts[i](cfg)
+ }
+
+ buffer := buffersPool.Get(uint32(src.SignedDataSize()))
+ defer buffersPool.Put(buffer)
+
+ data, err := src.ReadSignedData(buffer.Data)
+ if err != nil {
+ return err
+ }
+
+ sigData, err := sign(cfg, key, data)
+ if err != nil {
+ return err
+ }
+
+ sig := new(refs.Signature)
+ sig.SetScheme(cfg.scheme)
+ sig.SetKey(crypto.MarshalPublicKey(&key.PublicKey))
+ sig.SetSign(sigData)
+ handler(sig)
+
+ return nil
+}
+
+func VerifyDataWithSource(dataSrc DataSource, sigSrc KeySignatureSource, opts ...SignOption) error {
+ buffer := buffersPool.Get(uint32(dataSrc.SignedDataSize()))
+ defer buffersPool.Put(buffer)
+
+ data, err := dataSrc.ReadSignedData(buffer.Data)
+ if err != nil {
+ return err
+ }
+
+ return VerifyDataSlice(data, sigSrc, opts...)
+}
+
+func SignData(key *ecdsa.PrivateKey, v DataWithSignature, opts ...SignOption) error {
+ return SignDataWithHandler(key, v, v.SetSignature, opts...)
+}
+
+func VerifyData(src DataWithSignature, opts ...SignOption) error {
+ return VerifyDataWithSource(src, src.GetSignature, opts...)
+}
+
+func VerifyDataSlice(data []byte, sigSrc KeySignatureSource, opts ...SignOption) error {
+ cfg := defaultCfg()
+
+ for i := range opts {
+ opts[i](cfg)
+ }
+
+ return verify(cfg, data, sigSrc())
+}
diff --git a/api/util/signature/options.go b/api/util/signature/options.go
new file mode 100644
index 0000000..d27eff2
--- /dev/null
+++ b/api/util/signature/options.go
@@ -0,0 +1,77 @@
+package signature
+
+import (
+ "crypto/ecdsa"
+ "encoding/base64"
+ "fmt"
+
+ crypto "git.frostfs.info/TrueCloudLab/frostfs-crypto"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/signature/walletconnect"
+)
+
+type cfg struct {
+ schemeFixed bool
+ scheme refs.SignatureScheme
+}
+
+func defaultCfg() *cfg {
+ return new(cfg)
+}
+
+func verify(cfg *cfg, data []byte, sig *refs.Signature) error {
+ if !cfg.schemeFixed {
+ cfg.scheme = sig.GetScheme()
+ }
+
+ pub := crypto.UnmarshalPublicKey(sig.GetKey())
+ if pub == nil {
+ return crypto.ErrEmptyPublicKey
+ }
+
+ switch cfg.scheme {
+ case refs.ECDSA_SHA512:
+ return crypto.Verify(pub, data, sig.GetSign())
+ case refs.ECDSA_RFC6979_SHA256:
+ return crypto.VerifyRFC6979(pub, data, sig.GetSign())
+ case refs.ECDSA_RFC6979_SHA256_WALLET_CONNECT:
+ buffer := buffersPool.Get(uint32(base64.StdEncoding.EncodedLen(len(data))))
+ defer buffersPool.Put(buffer)
+ base64.StdEncoding.Encode(buffer.Data, data)
+ if !walletconnect.Verify(pub, buffer.Data, sig.GetSign()) {
+ return crypto.ErrInvalidSignature
+ }
+ return nil
+ default:
+ return fmt.Errorf("unsupported signature scheme %s", cfg.scheme)
+ }
+}
+
+func sign(cfg *cfg, key *ecdsa.PrivateKey, data []byte) ([]byte, error) {
+ switch cfg.scheme {
+ case refs.ECDSA_SHA512:
+ return crypto.Sign(key, data)
+ case refs.ECDSA_RFC6979_SHA256:
+ return crypto.SignRFC6979(key, data)
+ case refs.ECDSA_RFC6979_SHA256_WALLET_CONNECT:
+ buffer := buffersPool.Get(uint32(base64.StdEncoding.EncodedLen(len(data))))
+ defer buffersPool.Put(buffer)
+ base64.StdEncoding.Encode(buffer.Data, data)
+ return walletconnect.Sign(key, buffer.Data)
+ default:
+ panic(fmt.Sprintf("unsupported scheme %s", cfg.scheme))
+ }
+}
+
+func SignWithRFC6979() SignOption {
+ return func(c *cfg) {
+ c.schemeFixed = true
+ c.scheme = refs.ECDSA_RFC6979_SHA256
+ }
+}
+
+func SignWithWalletConnect() SignOption {
+ return func(c *cfg) {
+ c.scheme = refs.ECDSA_RFC6979_SHA256_WALLET_CONNECT
+ }
+}
diff --git a/api/util/signature/sign_test.go b/api/util/signature/sign_test.go
new file mode 100644
index 0000000..222f9be
--- /dev/null
+++ b/api/util/signature/sign_test.go
@@ -0,0 +1,44 @@
+package signature
+
+import (
+ "crypto/ecdsa"
+ "crypto/elliptic"
+ "crypto/rand"
+ "testing"
+
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "github.com/stretchr/testify/require"
+)
+
+type testData struct {
+ data []byte
+ sig *refs.Signature
+}
+
+func (t testData) SignedDataSize() int { return len(t.data) }
+func (t testData) ReadSignedData(data []byte) ([]byte, error) {
+ n := copy(data, t.data)
+ return data[:n], nil
+}
+func (t testData) GetSignature() *refs.Signature { return t.sig }
+func (t *testData) SetSignature(s *refs.Signature) { t.sig = s }
+
+func TestWalletConnect(t *testing.T) {
+ testCases := [...][]byte{
+ {},
+ {0},
+ {1, 2},
+ {3, 4, 5},
+ {6, 7, 8, 9, 10, 11, 12},
+ }
+
+ pk, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
+ require.NoError(t, err)
+
+ for _, tc := range testCases {
+ td := &testData{data: tc}
+ require.NoError(t, SignData(pk, td, SignWithWalletConnect()))
+ require.Equal(t, refs.ECDSA_RFC6979_SHA256_WALLET_CONNECT, td.sig.GetScheme())
+ require.NoError(t, VerifyData(td))
+ }
+}
diff --git a/api/util/signature/walletconnect/sign.go b/api/util/signature/walletconnect/sign.go
new file mode 100644
index 0000000..b96a842
--- /dev/null
+++ b/api/util/signature/walletconnect/sign.go
@@ -0,0 +1,142 @@
+package walletconnect
+
+import (
+ "crypto/ecdsa"
+ "crypto/elliptic"
+ "crypto/rand"
+ "encoding/binary"
+ "encoding/hex"
+
+ crypto "git.frostfs.info/TrueCloudLab/frostfs-crypto"
+)
+
+const (
+ // saltSize is the salt size added to signed message.
+ saltSize = 16
+ // signatureLen is the length of RFC6979 signature.
+ signatureLen = 64
+)
+
+// SignedMessage contains mirrors `SignedMessage` struct from the WalletConnect API.
+// https://neon.coz.io/wksdk/core/modules.html#SignedMessage
+type SignedMessage struct {
+ Data []byte
+ Message []byte
+ PublicKey []byte
+ Salt []byte
+}
+
+// Sign signs message using WalletConnect API. The returned signature
+// contains RFC6979 signature and 16-byte salt.
+func Sign(p *ecdsa.PrivateKey, msg []byte) ([]byte, error) {
+ sm, err := SignMessage(p, msg)
+ if err != nil {
+ return nil, err
+ }
+ return append(sm.Data, sm.Salt...), nil
+}
+
+// Verify verifies message using WalletConnect API.
+func Verify(p *ecdsa.PublicKey, data, sign []byte) bool {
+ if len(sign) != signatureLen+saltSize {
+ return false
+ }
+
+ salt := sign[signatureLen:]
+ return VerifyMessage(p, SignedMessage{
+ Data: sign[:signatureLen],
+ Message: createMessageWithSalt(data, salt),
+ Salt: salt,
+ })
+}
+
+// SignMessage signs message with a private key and returns structure similar to
+// `signMessage` of the WalletConnect API.
+// https://github.com/CityOfZion/wallet-connect-sdk/blob/89c236b/packages/wallet-connect-sdk-core/src/index.ts#L496
+// https://github.com/CityOfZion/neon-wallet/blob/1174a9388480e6bbc4f79eb13183c2a573f67ca8/app/context/WalletConnect/helpers.js#L133
+func SignMessage(p *ecdsa.PrivateKey, msg []byte) (SignedMessage, error) {
+ var salt [saltSize]byte
+ _, _ = rand.Read(salt[:])
+
+ msg = createMessageWithSalt(msg, salt[:])
+ sign, err := crypto.SignRFC6979(p, msg)
+ if err != nil {
+ return SignedMessage{}, err
+ }
+
+ return SignedMessage{
+ Data: sign,
+ Message: msg,
+ PublicKey: elliptic.MarshalCompressed(p.Curve, p.X, p.Y),
+ Salt: salt[:],
+ }, nil
+}
+
+// VerifyMessage verifies message with a private key and returns structure similar to
+// `verifyMessage` of WalletConnect API.
+// https://github.com/CityOfZion/wallet-connect-sdk/blob/89c236b/packages/wallet-connect-sdk-core/src/index.ts#L515
+// https://github.com/CityOfZion/neon-wallet/blob/1174a9388480e6bbc4f79eb13183c2a573f67ca8/app/context/WalletConnect/helpers.js#L147
+func VerifyMessage(p *ecdsa.PublicKey, m SignedMessage) bool {
+ if p == nil {
+ x, y := elliptic.UnmarshalCompressed(elliptic.P256(), m.PublicKey)
+ if x == nil || y == nil {
+ return false
+ }
+ p = &ecdsa.PublicKey{
+ Curve: elliptic.P256(),
+ X: x,
+ Y: y,
+ }
+ }
+ return crypto.VerifyRFC6979(p, m.Message, m.Data) == nil
+}
+
+func createMessageWithSalt(msg, salt []byte) []byte {
+ // 4 byte prefix + length of the message with salt in bytes +
+ // + salt + message + 2 byte postfix.
+ saltedLen := hex.EncodedLen(len(salt)) + len(msg)
+ data := make([]byte, 4+getVarIntSize(saltedLen)+saltedLen+2)
+
+ n := copy(data, []byte{0x01, 0x00, 0x01, 0xf0}) // fixed prefix
+ n += putVarUint(data[n:], uint64(saltedLen)) // salt is hex encoded, double its size
+ n += hex.Encode(data[n:], salt[:]) // for some reason we encode salt in hex
+ n += copy(data[n:], msg)
+ copy(data[n:], []byte{0x00, 0x00})
+
+ return data
+}
+
+// Following functions are copied from github.com/nspcc-dev/neo-go/pkg/io package
+// to avoid having another dependency.
+
+// getVarIntSize returns the size in number of bytes of a variable integer.
+// Reference: https://github.com/neo-project/neo/blob/26d04a642ac5a1dd1827dabf5602767e0acba25c/src/neo/IO/Helper.cs#L131
+func getVarIntSize(value int) int {
+ var size uintptr
+
+ if value < 0xFD {
+ size = 1 // unit8
+ } else if value <= 0xFFFF {
+ size = 3 // byte + uint16
+ } else {
+ size = 5 // byte + uint32
+ }
+ return int(size)
+}
+
+// putVarUint puts val in varint form to the pre-allocated buffer.
+func putVarUint(data []byte, val uint64) int {
+ if val < 0xfd {
+ data[0] = byte(val)
+ return 1
+ }
+ if val <= 0xFFFF {
+ data[0] = byte(0xfd)
+ binary.LittleEndian.PutUint16(data[1:], uint16(val))
+ return 3
+ }
+
+ data[0] = byte(0xfe)
+ binary.LittleEndian.PutUint32(data[1:], uint32(val))
+ return 5
+}
diff --git a/api/util/signature/walletconnect/sign_test.go b/api/util/signature/walletconnect/sign_test.go
new file mode 100644
index 0000000..1b4fe18
--- /dev/null
+++ b/api/util/signature/walletconnect/sign_test.go
@@ -0,0 +1,112 @@
+package walletconnect
+
+import (
+ "crypto/ecdsa"
+ "crypto/elliptic"
+ "crypto/rand"
+ "encoding/hex"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestSignMessage(t *testing.T) {
+ p1, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
+ require.NoError(t, err)
+
+ msg := []byte("NEO")
+ result, err := SignMessage(p1, msg)
+ require.NoError(t, err)
+ require.Equal(t, elliptic.MarshalCompressed(elliptic.P256(), p1.PublicKey.X, p1.PublicKey.Y), result.PublicKey)
+ require.Equal(t, saltSize, len(result.Salt))
+ require.Equal(t, 64, len(result.Data))
+ require.Equal(t, 4+1+16*2+3+2, len(result.Message))
+
+ require.True(t, VerifyMessage(&p1.PublicKey, result))
+
+ t.Run("invalid public key", func(t *testing.T) {
+ p2, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
+ require.NoError(t, err)
+ require.False(t, VerifyMessage(&p2.PublicKey, result))
+ })
+ t.Run("invalid signature", func(t *testing.T) {
+ result := result
+ result.Data[0] ^= 0xFF
+ require.False(t, VerifyMessage(&p1.PublicKey, result))
+ })
+}
+
+func TestSign(t *testing.T) {
+ p1, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
+ require.NoError(t, err)
+
+ msg := []byte("NEO")
+ sign, err := Sign(p1, msg)
+ require.NoError(t, err)
+ require.True(t, Verify(&p1.PublicKey, msg, sign))
+
+ t.Run("invalid public key", func(t *testing.T) {
+ p2, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
+ require.NoError(t, err)
+ require.False(t, Verify(&p2.PublicKey, msg, sign))
+ })
+ t.Run("invalid signature", func(t *testing.T) {
+ sign[0] ^= 0xFF
+ require.False(t, Verify(&p1.PublicKey, msg, sign))
+ })
+}
+
+func TestVerifyNeonWallet(t *testing.T) {
+ testCases := [...]struct {
+ publicKey string
+ data string
+ salt string
+ messageHex string
+ messageOriginal string
+ }{
+ { // Test values from this GIF https://github.com/CityOfZion/neon-wallet/pull/2390 .
+ publicKey: "02ce6228ba2cb2fc235be93aff9cd5fc0851702eb9791552f60db062f01e3d83f6",
+ data: "90ab1886ca0bece59b982d9ade8f5598065d651362fb9ce45ad66d0474b89c0b80913c8f0118a282acbdf200a429ba2d81bc52534a53ab41a2c6dfe2f0b4fb1b",
+ salt: "d41e348afccc2f3ee45cd9f5128b16dc",
+ messageHex: "010001f05c6434316533343861666363633266336565343563643966353132386231366463436172616c686f2c206d756c65712c206f2062616775697520656820697373756d65726d6f2074616978206c696761646f206e61206d697373e36f3f0000",
+ messageOriginal: "436172616c686f2c206d756c65712c206f2062616775697520656820697373756d65726d6f2074616978206c696761646f206e61206d697373e36f3f",
+ },
+ { // Test value from wallet connect integration test
+ publicKey: "03bd9108c0b49f657e9eee50d1399022bd1e436118e5b7529a1b7cd606652f578f",
+ data: "510caa8cb6db5dedf04d215a064208d64be7496916d890df59aee132db8f2b07532e06f7ea664c4a99e3bcb74b43a35eb9653891b5f8701d2aef9e7526703eaa",
+ salt: "2c5b189569e92cce12e1c640f23e83ba",
+ messageHex: "010001f02632633562313839353639653932636365313265316336343066323365383362613132333435360000",
+ messageOriginal: "313233343536", // ascii string "123456"
+ },
+ { // Test value from wallet connect integration test
+ publicKey: "03bd9108c0b49f657e9eee50d1399022bd1e436118e5b7529a1b7cd606652f578f",
+ data: "1e13f248962d8b3b60708b55ddf448d6d6a28c6b43887212a38b00bf6bab695e61261e54451c6e3d5f1f000e5534d166c7ca30f662a296d3a9aafa6d8c173c01",
+ salt: "58c86b2e74215b4f36b47d731236be3b",
+ messageHex: "010001f02035386338366232653734323135623466333662343764373331323336626533620000",
+ messageOriginal: "", // empty string
+ },
+ }
+
+ for _, testCase := range testCases {
+ rawPub, err := hex.DecodeString(testCase.publicKey)
+ require.NoError(t, err)
+ data, err := hex.DecodeString(testCase.data)
+ require.NoError(t, err)
+ salt, err := hex.DecodeString(testCase.salt)
+ require.NoError(t, err)
+ msg, err := hex.DecodeString(testCase.messageHex)
+ require.NoError(t, err)
+ orig, err := hex.DecodeString(testCase.messageOriginal)
+ require.NoError(t, err)
+
+ require.Equal(t, msg, createMessageWithSalt(orig, salt))
+
+ sm := SignedMessage{
+ Data: data,
+ Message: msg,
+ PublicKey: rawPub,
+ Salt: salt,
+ }
+ require.True(t, VerifyMessage(nil, sm))
+ }
+}
diff --git a/bearer/bearer.go b/bearer/bearer.go
index e419d54..d1b77ed 100644
--- a/bearer/bearer.go
+++ b/bearer/bearer.go
@@ -5,10 +5,10 @@ import (
"errors"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
- apeV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/ape"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
apeSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/ape"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
+ apeV2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/ape"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
frostfscrypto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto"
frostfsecdsa "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa"
@@ -18,7 +18,7 @@ import (
// Token represents bearer token for object service operations.
//
-// Token is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl.BearerToken
+// Token is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl.BearerToken
// message. See ReadFromV2 / WriteToV2 methods.
//
// Instances can be created using built-in var declaration.
diff --git a/bearer/bearer_test.go b/bearer/bearer_test.go
index 341c4f2..650dc82 100644
--- a/bearer/bearer_test.go
+++ b/bearer/bearer_test.go
@@ -6,8 +6,8 @@ import (
"reflect"
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer"
bearertest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer/test"
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
diff --git a/checksum/checksum.go b/checksum/checksum.go
index 9d227ad..76887f6 100644
--- a/checksum/checksum.go
+++ b/checksum/checksum.go
@@ -6,13 +6,13 @@ import (
"errors"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
"git.frostfs.info/TrueCloudLab/tzhash/tz"
)
// Checksum represents checksum of some digital data.
//
-// Checksum is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs.Checksum
+// Checksum is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs.Checksum
// message. See ReadFromV2 / WriteToV2 methods.
//
// Instances can be created using built-in var declaration.
diff --git a/checksum/checksum_test.go b/checksum/checksum_test.go
index 9da857d..1e1c07c 100644
--- a/checksum/checksum_test.go
+++ b/checksum/checksum_test.go
@@ -5,7 +5,7 @@ import (
"crypto/sha256"
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
"git.frostfs.info/TrueCloudLab/tzhash/tz"
"github.com/stretchr/testify/require"
)
diff --git a/checksum/example_test.go b/checksum/example_test.go
index 337767a..72d4a05 100644
--- a/checksum/example_test.go
+++ b/checksum/example_test.go
@@ -6,7 +6,7 @@ import (
"crypto/sha256"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
)
func ExampleCalculate() {
diff --git a/client/accounting.go b/client/accounting.go
index faf7ddc..707ec3d 100644
--- a/client/accounting.go
+++ b/client/accounting.go
@@ -4,13 +4,13 @@ import (
"context"
"fmt"
- v2accounting "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/accounting"
+ v2accounting "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/accounting"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user"
)
diff --git a/client/apemanager_add_chain.go b/client/apemanager_add_chain.go
index 2581e2a..a8d53a7 100644
--- a/client/apemanager_add_chain.go
+++ b/client/apemanager_add_chain.go
@@ -4,12 +4,12 @@ import (
"context"
"fmt"
- apemanagerV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/apemanager"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- sessionV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
apeSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/ape"
+ apemanagerV2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/apemanager"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ sessionV2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
)
diff --git a/client/apemanager_list_chains.go b/client/apemanager_list_chains.go
index a8a3e8a..56cc4ef 100644
--- a/client/apemanager_list_chains.go
+++ b/client/apemanager_list_chains.go
@@ -4,12 +4,12 @@ import (
"context"
"fmt"
- apemanagerV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/apemanager"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- sessionV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
apeSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/ape"
+ apemanagerV2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/apemanager"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ sessionV2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
)
diff --git a/client/apemanager_remove_chain.go b/client/apemanager_remove_chain.go
index a297716..39ccdeb 100644
--- a/client/apemanager_remove_chain.go
+++ b/client/apemanager_remove_chain.go
@@ -4,12 +4,12 @@ import (
"context"
"fmt"
- apemanagerV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/apemanager"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- sessionV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
apeSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/ape"
+ apemanagerV2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/apemanager"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ sessionV2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
)
diff --git a/client/api.go b/client/api.go
index dd18c42..c86dde2 100644
--- a/client/api.go
+++ b/client/api.go
@@ -4,9 +4,9 @@ import (
"context"
"fmt"
- v2netmap "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
+ v2netmap "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
)
// interface of FrostFS API server. Exists for test purposes only.
diff --git a/client/client.go b/client/client.go
index 0894f0e..98d4275 100644
--- a/client/client.go
+++ b/client/client.go
@@ -7,9 +7,9 @@ import (
"errors"
"time"
- v2accounting "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
+ v2accounting "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/accounting"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
@@ -129,7 +129,7 @@ func (c *Client) Dial(ctx context.Context, prm PrmDial) error {
// sets underlying provider of frostFSAPIServer. The method is used for testing as an approach
// to skip Dial stage and override FrostFS API server. MUST NOT be used outside test code.
-// In real applications wrapper over git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client
+// In real applications wrapper over git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client
// is statically used.
func (c *Client) setFrostFSAPIServer(server frostFSAPIServer) {
c.server = server
diff --git a/client/common.go b/client/common.go
index 65abae5..ba8281d 100644
--- a/client/common.go
+++ b/client/common.go
@@ -4,10 +4,10 @@ import (
"errors"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/version"
)
@@ -104,7 +104,7 @@ func (c *Client) processResponse(resp responseV2) (apistatus.Status, error) {
return st, nil
}
-// ExecRaw executes f with underlying git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client.Client
+// ExecRaw executes f with underlying sdk-go/api/rpc/client.Client
// instance. Communicate over the Protocol Buffers protocol in a more flexible way:
// most often used to transmit data over a fixed version of the FrostFS protocol, as well
// as to support custom services.
@@ -115,7 +115,7 @@ func (c *Client) processResponse(resp responseV2) (apistatus.Status, error) {
// before closing the connection.
//
// See also Dial and Close.
-// See also git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client package docs.
+// See also git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client package docs.
func (c *Client) ExecRaw(f func(client *client.Client) error) error {
return f(&c.c)
}
diff --git a/client/container_delete.go b/client/container_delete.go
index 6d4b345..cf5adf4 100644
--- a/client/container_delete.go
+++ b/client/container_delete.go
@@ -4,12 +4,12 @@ import (
"context"
"fmt"
- v2container "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ v2container "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
frostfscrypto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto"
frostfsecdsa "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa"
diff --git a/client/container_get.go b/client/container_get.go
index da8166f..fd34090 100644
--- a/client/container_get.go
+++ b/client/container_get.go
@@ -5,12 +5,12 @@ import (
"errors"
"fmt"
- v2container "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ v2container "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
diff --git a/client/container_list.go b/client/container_list.go
index 6d2efb6..d094cdb 100644
--- a/client/container_list.go
+++ b/client/container_list.go
@@ -4,12 +4,12 @@ import (
"context"
"fmt"
- v2container "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ v2container "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/session"
diff --git a/client/container_put.go b/client/container_put.go
index e5b8f18..30ebf7a 100644
--- a/client/container_put.go
+++ b/client/container_put.go
@@ -4,12 +4,12 @@ import (
"context"
"fmt"
- v2container "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ v2container "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
diff --git a/client/doc.go b/client/doc.go
index 7f6ec42..2a1d607 100644
--- a/client/doc.go
+++ b/client/doc.go
@@ -47,8 +47,8 @@ Consume custom service of the server:
rpc CustomRPC(CustomRPCRequest) returns (CustomRPCResponse);
}
- import "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- import "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/common"
+ import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/common"
req := new(CustomRPCRequest)
// ...
diff --git a/client/netmap.go b/client/netmap.go
index a870ab2..f87d3b0 100644
--- a/client/netmap.go
+++ b/client/netmap.go
@@ -4,11 +4,11 @@ import (
"context"
"fmt"
- v2netmap "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ v2netmap "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/version"
diff --git a/client/netmap_test.go b/client/netmap_test.go
index bce6b3a..d6ff0fb 100644
--- a/client/netmap_test.go
+++ b/client/netmap_test.go
@@ -6,9 +6,9 @@ import (
"fmt"
"testing"
- v2netmap "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ v2netmap "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
"github.com/stretchr/testify/require"
diff --git a/client/object_delete.go b/client/object_delete.go
index 3214cff..048398c 100644
--- a/client/object_delete.go
+++ b/client/object_delete.go
@@ -5,13 +5,13 @@ import (
"crypto/ecdsa"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
- v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- v2refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
+ v2object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ v2refs "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
diff --git a/client/object_get.go b/client/object_get.go
index ba4f72d..b84844e 100644
--- a/client/object_get.go
+++ b/client/object_get.go
@@ -7,13 +7,13 @@ import (
"fmt"
"io"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
- v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- v2refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
+ v2object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ v2refs "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
diff --git a/client/object_hash.go b/client/object_hash.go
index b1b9ffc..83f2360 100644
--- a/client/object_hash.go
+++ b/client/object_hash.go
@@ -5,13 +5,13 @@ import (
"crypto/ecdsa"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
- v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- v2refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
+ v2object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ v2refs "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/checksum"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
diff --git a/client/object_patch.go b/client/object_patch.go
index 7b054db..6930644 100644
--- a/client/object_patch.go
+++ b/client/object_patch.go
@@ -7,12 +7,12 @@ import (
"fmt"
"io"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
- v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
+ v2object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
diff --git a/client/object_patch_test.go b/client/object_patch_test.go
index 839c453..63996b6 100644
--- a/client/object_patch_test.go
+++ b/client/object_patch_test.go
@@ -8,7 +8,7 @@ import (
"crypto/rand"
"testing"
- v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
+ v2object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
oidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id/test"
"github.com/stretchr/testify/require"
diff --git a/client/object_put.go b/client/object_put.go
index 07ca840..9a01f34 100644
--- a/client/object_put.go
+++ b/client/object_put.go
@@ -4,7 +4,7 @@ import (
"context"
"crypto/ecdsa"
- buffPool "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/pool"
+ buffPool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/client/object_put_raw.go b/client/object_put_raw.go
index e47c6a2..b682102 100644
--- a/client/object_put_raw.go
+++ b/client/object_put_raw.go
@@ -7,12 +7,12 @@ import (
"fmt"
"io"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
- v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
+ v2object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
)
diff --git a/client/object_put_single.go b/client/object_put_single.go
index a2ff8a0..ffce126 100644
--- a/client/object_put_single.go
+++ b/client/object_put_single.go
@@ -5,12 +5,12 @@ import (
"crypto/ecdsa"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
- v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
+ v2object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/session"
diff --git a/client/object_put_transformer.go b/client/object_put_transformer.go
index 5314a12..7e30be1 100644
--- a/client/object_put_transformer.go
+++ b/client/object_put_transformer.go
@@ -3,7 +3,7 @@ package client
import (
"context"
- buffPool "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/pool"
+ buffPool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/transformer"
diff --git a/client/object_search.go b/client/object_search.go
index 42018e5..781d872 100644
--- a/client/object_search.go
+++ b/client/object_search.go
@@ -7,13 +7,13 @@ import (
"fmt"
"io"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
- v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- v2refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
+ v2object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ v2refs "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
diff --git a/client/object_search_test.go b/client/object_search_test.go
index f449d61..f385f48 100644
--- a/client/object_search_test.go
+++ b/client/object_search_test.go
@@ -7,9 +7,9 @@ import (
"io"
"testing"
- v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- signatureV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ v2object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ signatureV2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
oidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id/test"
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
diff --git a/client/response.go b/client/response.go
index e1a702e..69972b9 100644
--- a/client/response.go
+++ b/client/response.go
@@ -1,6 +1,6 @@
package client
-import "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
+import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
// ResponseMetaInfo groups meta information about any FrostFS API response.
type ResponseMetaInfo struct {
diff --git a/client/session.go b/client/session.go
index b49c67b..9f806f0 100644
--- a/client/session.go
+++ b/client/session.go
@@ -5,11 +5,11 @@ import (
"crypto/ecdsa"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ rpcapi "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/signature"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user"
)
diff --git a/client/status/apemanager.go b/client/status/apemanager.go
index f68fd48..b4d49cb 100644
--- a/client/status/apemanager.go
+++ b/client/status/apemanager.go
@@ -1,8 +1,8 @@
package apistatus
import (
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/apemanager"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/status"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/apemanager"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
)
// APEManagerAccessDenied describes status of the failure because of the access control violation.
diff --git a/client/status/common.go b/client/status/common.go
index 598631b..486bc72 100644
--- a/client/status/common.go
+++ b/client/status/common.go
@@ -3,7 +3,7 @@ package apistatus
import (
"encoding/binary"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/status"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
)
// ServerInternal describes failure statuses related to internal server errors.
@@ -53,7 +53,7 @@ func (x ServerInternal) Message() string {
// WriteInternalServerErr writes err message to ServerInternal instance.
func WriteInternalServerErr(x *ServerInternal, err error) {
- x.SetMessage(err.Error())
+ x.v2.SetMessage(err.Error())
}
// WrongMagicNumber describes failure status related to incorrect network magic.
@@ -192,7 +192,7 @@ const defaultNodeUnderMaintenanceMsg = "node is under maintenance"
// Error implements the error interface.
func (x *NodeUnderMaintenance) Error() string {
- msg := x.Message()
+ msg := x.v2.Message()
if msg == "" {
msg = defaultNodeUnderMaintenanceMsg
}
diff --git a/client/status/common_test.go b/client/status/common_test.go
index 5a7a2b7..e55883e 100644
--- a/client/status/common_test.go
+++ b/client/status/common_test.go
@@ -3,7 +3,7 @@ package apistatus_test
import (
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/status"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
"github.com/stretchr/testify/require"
)
diff --git a/client/status/container.go b/client/status/container.go
index 9f06b27..594d984 100644
--- a/client/status/container.go
+++ b/client/status/container.go
@@ -1,8 +1,8 @@
package apistatus
import (
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/status"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
)
// ContainerNotFound describes status of the failure because of the missing container.
diff --git a/client/status/object.go b/client/status/object.go
index 27ea86c..ae2e8e0 100644
--- a/client/status/object.go
+++ b/client/status/object.go
@@ -1,8 +1,8 @@
package apistatus
import (
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/status"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
)
// ObjectLocked describes status of the failure because of the locked object.
diff --git a/client/status/session.go b/client/status/session.go
index 6f60758..f87ce61 100644
--- a/client/status/session.go
+++ b/client/status/session.go
@@ -1,8 +1,8 @@
package apistatus
import (
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/status"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
)
// SessionTokenNotFound describes status of the failure because of the missing session token.
diff --git a/client/status/success.go b/client/status/success.go
index a68983d..3975b92 100644
--- a/client/status/success.go
+++ b/client/status/success.go
@@ -1,7 +1,7 @@
package apistatus
import (
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/status"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
)
// SuccessDefaultV2 represents Status instance of default success. Implements StatusV2.
diff --git a/client/status/unrecognized.go b/client/status/unrecognized.go
index 19e481e..e4b4a81 100644
--- a/client/status/unrecognized.go
+++ b/client/status/unrecognized.go
@@ -1,7 +1,7 @@
package apistatus
import (
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/status"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
)
type unrecognizedStatusV2 struct {
diff --git a/client/status/v2.go b/client/status/v2.go
index 5cee3be..95dfb8a 100644
--- a/client/status/v2.go
+++ b/client/status/v2.go
@@ -3,11 +3,11 @@ package apistatus
import (
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/apemanager"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/status"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/apemanager"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status"
)
// StatusV2 defines a variety of Status instances compatible with FrostFS API V2 protocol.
@@ -16,7 +16,7 @@ import (
type StatusV2 interface {
Status
- // ToStatusV2 returns the status as git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/status.Status message structure.
+ // ToStatusV2 returns the status as git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/status.Status message structure.
ToStatusV2() *status.Status
}
diff --git a/container/container.go b/container/container.go
index 39c6259..ff63adb 100644
--- a/container/container.go
+++ b/container/container.go
@@ -9,9 +9,9 @@ import (
"strings"
"time"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
- v2netmap "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
+ v2netmap "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/acl"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
frostfscrypto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto"
@@ -37,7 +37,7 @@ import (
// Instances for existing containers can be initialized using decoding methods
// (e.g Unmarshal).
//
-// Container is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container.Container
+// Container is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container.Container
// message. See ReadFromV2 / WriteToV2 methods.
type Container struct {
v2 container.Container
diff --git a/container/container_test.go b/container/container_test.go
index c5f1b7e..a66a866 100644
--- a/container/container_test.go
+++ b/container/container_test.go
@@ -6,9 +6,9 @@ import (
"testing"
"time"
- v2container "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
- v2netmap "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ v2container "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
+ v2netmap "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
diff --git a/container/doc.go b/container/doc.go
index 34b044d..85e2082 100644
--- a/container/doc.go
+++ b/container/doc.go
@@ -27,7 +27,7 @@ Instances can be also used to process FrostFS API V2 protocol messages
On client side:
- import "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
+ import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
var msg container.Container
cnr.WriteToV2(&msg)
diff --git a/container/id/id.go b/container/id/id.go
index bde739c..569968a 100644
--- a/container/id/id.go
+++ b/container/id/id.go
@@ -4,13 +4,13 @@ import (
"crypto/sha256"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
"github.com/mr-tron/base58"
)
// ID represents FrostFS container identifier.
//
-// ID is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs.ContainerID
+// ID is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs.ContainerID
// message. See ReadFromV2 / WriteToV2 methods.
//
// Instances can be created using built-in var declaration.
diff --git a/container/id/id_test.go b/container/id/id_test.go
index ded7457..6f60d92 100644
--- a/container/id/id_test.go
+++ b/container/id/id_test.go
@@ -5,7 +5,7 @@ import (
"crypto/sha256"
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
"github.com/mr-tron/base58"
diff --git a/crypto/crypto_test.go b/crypto/crypto_test.go
index 7d1ad52..da33d88 100644
--- a/crypto/crypto_test.go
+++ b/crypto/crypto_test.go
@@ -4,7 +4,7 @@ import (
"crypto/rand"
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
frostfscrypto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto"
frostfsecdsa "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa"
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
diff --git a/crypto/doc.go b/crypto/doc.go
index 8b568f5..7fc66c1 100644
--- a/crypto/doc.go
+++ b/crypto/doc.go
@@ -29,7 +29,7 @@ Signature can be also used to process FrostFS API V2 protocol messages
On client side:
- import "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
var msg refs.Signature
sig.WriteToV2(&msg)
diff --git a/crypto/ecdsa/wallet_connect.go b/crypto/ecdsa/wallet_connect.go
index 34cbcae..0fe8651 100644
--- a/crypto/ecdsa/wallet_connect.go
+++ b/crypto/ecdsa/wallet_connect.go
@@ -6,7 +6,7 @@ import (
"encoding/base64"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/signature/walletconnect"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/signature/walletconnect"
frostfscrypto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto"
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
)
diff --git a/crypto/signature.go b/crypto/signature.go
index 33c6132..f8a668e 100644
--- a/crypto/signature.go
+++ b/crypto/signature.go
@@ -4,13 +4,13 @@ import (
"errors"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
)
// Signature represents a confirmation of data integrity received by the
// digital signature mechanism.
//
-// Signature is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs.Signature
+// Signature is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs.Signature
// message. See ReadFromV2 / WriteToV2 methods.
//
// Note that direct typecast is not safe and may result in loss of compatibility:
diff --git a/crypto/signer.go b/crypto/signer.go
index 9f99e3d..be96973 100644
--- a/crypto/signer.go
+++ b/crypto/signer.go
@@ -3,7 +3,7 @@ package frostfscrypto
import (
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
)
// Scheme represents digital signature algorithm with fixed cryptographic hash function.
diff --git a/eacl/enums.go b/eacl/enums.go
index b2b5353..8f693ec 100644
--- a/eacl/enums.go
+++ b/eacl/enums.go
@@ -1,7 +1,7 @@
package eacl
import (
- v2acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
+ v2acl "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
)
// Action taken if ContainerEACL record matched request.
diff --git a/eacl/enums_test.go b/eacl/enums_test.go
index 29f2518..e283b09 100644
--- a/eacl/enums_test.go
+++ b/eacl/enums_test.go
@@ -3,7 +3,7 @@ package eacl_test
import (
"testing"
- v2acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
+ v2acl "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/eacl"
"github.com/stretchr/testify/require"
)
diff --git a/eacl/filter.go b/eacl/filter.go
index 4403e5a..af32eae 100644
--- a/eacl/filter.go
+++ b/eacl/filter.go
@@ -3,7 +3,7 @@ package eacl
import (
"strconv"
- v2acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
+ v2acl "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
)
// Filter defines check conditions if request header is matched or not. Matched
diff --git a/eacl/filter_test.go b/eacl/filter_test.go
index 74b9a10..3a01a32 100644
--- a/eacl/filter_test.go
+++ b/eacl/filter_test.go
@@ -4,7 +4,7 @@ import (
"strconv"
"testing"
- v2acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
+ v2acl "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
"github.com/stretchr/testify/require"
)
diff --git a/eacl/record.go b/eacl/record.go
index 3c0d44a..c808387 100644
--- a/eacl/record.go
+++ b/eacl/record.go
@@ -3,7 +3,7 @@ package eacl
import (
"crypto/ecdsa"
- v2acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
+ v2acl "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/checksum"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
diff --git a/eacl/record_test.go b/eacl/record_test.go
index a1738fc..02301da 100644
--- a/eacl/record_test.go
+++ b/eacl/record_test.go
@@ -5,7 +5,7 @@ import (
"fmt"
"testing"
- v2acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
+ v2acl "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
checksumtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/checksum/test"
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
diff --git a/eacl/table.go b/eacl/table.go
index 6982b85..3fc9e60 100644
--- a/eacl/table.go
+++ b/eacl/table.go
@@ -4,8 +4,8 @@ import (
"crypto/sha256"
"fmt"
- v2acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ v2acl "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/version"
)
diff --git a/eacl/table_test.go b/eacl/table_test.go
index 4ec110f..630d3ed 100644
--- a/eacl/table_test.go
+++ b/eacl/table_test.go
@@ -4,7 +4,7 @@ import (
"crypto/sha256"
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/eacl"
eacltest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/eacl/test"
diff --git a/eacl/target.go b/eacl/target.go
index 2b8b709..a2f9c36 100644
--- a/eacl/target.go
+++ b/eacl/target.go
@@ -4,7 +4,7 @@ import (
"bytes"
"crypto/ecdsa"
- v2acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
+ v2acl "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
)
diff --git a/eacl/target_test.go b/eacl/target_test.go
index e226194..9da4f82 100644
--- a/eacl/target_test.go
+++ b/eacl/target_test.go
@@ -4,7 +4,7 @@ import (
"crypto/ecdsa"
"testing"
- v2acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
+ v2acl "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
"github.com/stretchr/testify/require"
)
diff --git a/go.mod b/go.mod
index 7c46916..ed14604 100644
--- a/go.mod
+++ b/go.mod
@@ -3,34 +3,35 @@ module git.frostfs.info/TrueCloudLab/frostfs-sdk-go
go 1.22
require (
- git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.16.1-0.20241011114054-f0fc40e116d1
git.frostfs.info/TrueCloudLab/frostfs-contract v0.19.3-0.20240621131249-49e5270f673e
+ git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0
git.frostfs.info/TrueCloudLab/hrw v1.2.1
git.frostfs.info/TrueCloudLab/tzhash v1.8.0
+ github.com/VictoriaMetrics/easyproto v0.1.4
github.com/antlr4-go/antlr/v4 v4.13.1
github.com/google/uuid v1.6.0
github.com/hashicorp/golang-lru/v2 v2.0.7
github.com/klauspost/reedsolomon v1.12.1
+ github.com/mailru/easyjson v0.7.7
github.com/mr-tron/base58 v1.2.0
github.com/nspcc-dev/neo-go v0.106.2
github.com/stretchr/testify v1.9.0
go.uber.org/zap v1.27.0
+ golang.org/x/sync v0.7.0
google.golang.org/grpc v1.66.2
google.golang.org/protobuf v1.34.1
gopkg.in/yaml.v3 v3.0.1
)
require (
- git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0 // indirect
git.frostfs.info/TrueCloudLab/rfc6979 v0.4.0 // indirect
- github.com/VictoriaMetrics/easyproto v0.1.4 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
github.com/golang/snappy v0.0.1 // indirect
github.com/gorilla/websocket v1.5.1 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/klauspost/cpuid/v2 v2.2.6 // indirect
- github.com/mailru/easyjson v0.7.7 // indirect
+ github.com/kr/pretty v0.1.0 // indirect
github.com/nspcc-dev/go-ordered-json v0.0.0-20240301084351-0246b013f8b2 // indirect
github.com/nspcc-dev/neo-go/pkg/interop v0.0.0-20240521091047-78685785716d // indirect
github.com/nspcc-dev/rfc6979 v0.2.1 // indirect
@@ -42,8 +43,8 @@ require (
golang.org/x/crypto v0.24.0 // indirect
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect
golang.org/x/net v0.26.0 // indirect
- golang.org/x/sync v0.7.0 // indirect
golang.org/x/sys v0.21.0 // indirect
golang.org/x/text v0.16.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect
+ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
)
diff --git a/go.sum b/go.sum
index 7451104..56930c7 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,3 @@
-git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.16.1-0.20241011114054-f0fc40e116d1 h1:ivcdxQeQDnx4srF2ezoaeVlF0FAycSAztwfIUJnUI4s=
-git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.16.1-0.20241011114054-f0fc40e116d1/go.mod h1:F5GS7hRb62PUy5sTYDC4ajVdeffoAfjHSSHTKUJEaYU=
git.frostfs.info/TrueCloudLab/frostfs-contract v0.19.3-0.20240621131249-49e5270f673e h1:kcBqZBiFIUBATUqEuvVigtkJJWQ2Gug/eYXn967o3M4=
git.frostfs.info/TrueCloudLab/frostfs-contract v0.19.3-0.20240621131249-49e5270f673e/go.mod h1:F/fe1OoIDKr5Bz99q4sriuHDuf3aZefZy9ZsCqEtgxc=
git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0 h1:FxqFDhQYYgpe41qsIHVOcdzSVCB8JNSfPG7Uk4r2oSk=
@@ -65,6 +63,8 @@ github.com/klauspost/reedsolomon v1.12.1 h1:NhWgum1efX1x58daOBGCFWcxtEhOhXKKl1HA
github.com/klauspost/reedsolomon v1.12.1/go.mod h1:nEi5Kjb6QqtbofI6s+cbG/j1da11c96IBYBSnVGtuBs=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
diff --git a/netmap/context.go b/netmap/context.go
index ca791e8..2772725 100644
--- a/netmap/context.go
+++ b/netmap/context.go
@@ -3,7 +3,7 @@ package netmap
import (
"errors"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
"git.frostfs.info/TrueCloudLab/hrw"
)
diff --git a/netmap/doc.go b/netmap/doc.go
index cea3f48..39122f7 100644
--- a/netmap/doc.go
+++ b/netmap/doc.go
@@ -19,7 +19,7 @@ Instances can be also used to process FrostFS API V2 protocol messages
On client side:
- import "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
+ import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
var msg netmap.NodeInfo
info.WriteToV2(&msg)
diff --git a/netmap/filter.go b/netmap/filter.go
index 76d8545..38230b7 100644
--- a/netmap/filter.go
+++ b/netmap/filter.go
@@ -5,7 +5,7 @@ import (
"strconv"
"strings"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
)
// mainFilterName is a name of the filter
diff --git a/netmap/filter_test.go b/netmap/filter_test.go
index 2b88b3c..5748959 100644
--- a/netmap/filter_test.go
+++ b/netmap/filter_test.go
@@ -4,7 +4,7 @@ import (
"errors"
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
"github.com/stretchr/testify/require"
)
diff --git a/netmap/helper_test.go b/netmap/helper_test.go
index 3775f18..de98c96 100644
--- a/netmap/helper_test.go
+++ b/netmap/helper_test.go
@@ -1,7 +1,7 @@
package netmap
import (
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
)
func newFilter(name string, k, v string, op netmap.Operation, fs ...Filter) (f Filter) {
diff --git a/netmap/netmap.go b/netmap/netmap.go
index 85e2a84..0d3b668 100644
--- a/netmap/netmap.go
+++ b/netmap/netmap.go
@@ -3,14 +3,14 @@ package netmap
import (
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
"git.frostfs.info/TrueCloudLab/hrw"
)
// NetMap represents FrostFS network map. It includes information about all
// storage nodes registered in FrostFS the network.
//
-// NetMap is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap.NetMap
+// NetMap is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap.NetMap
// message. See ReadFromV2 / WriteToV2 methods.
//
// Instances can be created using built-in var declaration.
diff --git a/netmap/netmap_test.go b/netmap/netmap_test.go
index 7c286a4..2aab542 100644
--- a/netmap/netmap_test.go
+++ b/netmap/netmap_test.go
@@ -3,7 +3,7 @@ package netmap_test
import (
"testing"
- v2netmap "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
+ v2netmap "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
netmaptest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap/test"
"github.com/stretchr/testify/require"
diff --git a/netmap/network_info.go b/netmap/network_info.go
index 1e553f4..11b0f14 100644
--- a/netmap/network_info.go
+++ b/netmap/network_info.go
@@ -6,14 +6,14 @@ import (
"errors"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
)
// NetworkInfo groups information about the FrostFS network state. Mainly used to
// describe the current state of the network.
//
-// NetworkInfo is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap.NetworkInfo
+// NetworkInfo is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap.NetworkInfo
// message. See ReadFromV2 / WriteToV2 methods.
//
// Instances can be created using built-in var declaration.
diff --git a/netmap/network_info_test.go b/netmap/network_info_test.go
index 161d152..7e6dc12 100644
--- a/netmap/network_info_test.go
+++ b/netmap/network_info_test.go
@@ -4,7 +4,7 @@ import (
"encoding/binary"
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
. "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
"github.com/stretchr/testify/require"
)
diff --git a/netmap/node_info.go b/netmap/node_info.go
index 4be4b70..0d250ce 100644
--- a/netmap/node_info.go
+++ b/netmap/node_info.go
@@ -7,7 +7,7 @@ import (
"strconv"
"strings"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
frostfscrypto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto"
"git.frostfs.info/TrueCloudLab/hrw"
)
@@ -18,7 +18,7 @@ import (
// about the nodes is available to all network participants to work with the network
// map (mainly to comply with container storage policies).
//
-// NodeInfo is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap.NodeInfo
+// NodeInfo is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap.NodeInfo
// message. See ReadFromV2 / WriteToV2 methods.
//
// Instances can be created using built-in var declaration.
diff --git a/netmap/node_info_test.go b/netmap/node_info_test.go
index de61a21..54c78b2 100644
--- a/netmap/node_info_test.go
+++ b/netmap/node_info_test.go
@@ -3,7 +3,7 @@ package netmap
import (
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
"github.com/stretchr/testify/require"
)
diff --git a/netmap/policy.go b/netmap/policy.go
index 48ca364..735e4f1 100644
--- a/netmap/policy.go
+++ b/netmap/policy.go
@@ -7,7 +7,7 @@ import (
"strconv"
"strings"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap/parser"
"github.com/antlr4-go/antlr/v4"
)
@@ -16,7 +16,7 @@ import (
// Within itself, PlacementPolicy represents a set of rules to select a subset
// of nodes from FrostFS network map - node-candidates for object storage.
//
-// PlacementPolicy is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap.PlacementPolicy
+// PlacementPolicy is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap.PlacementPolicy
// message. See ReadFromV2 / WriteToV2 methods.
//
// Instances can be created using built-in var declaration.
diff --git a/netmap/selector.go b/netmap/selector.go
index ab73cec..3e8adad 100644
--- a/netmap/selector.go
+++ b/netmap/selector.go
@@ -5,7 +5,7 @@ import (
"fmt"
"slices"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
"git.frostfs.info/TrueCloudLab/hrw"
)
diff --git a/netmap/selector_test.go b/netmap/selector_test.go
index 6ef5883..538b845 100644
--- a/netmap/selector_test.go
+++ b/netmap/selector_test.go
@@ -12,7 +12,7 @@ import (
"strings"
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
"git.frostfs.info/TrueCloudLab/hrw"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
diff --git a/netmap/yml_unmarshal.go b/netmap/yml_unmarshal.go
index 7c38b2c..239bf28 100644
--- a/netmap/yml_unmarshal.go
+++ b/netmap/yml_unmarshal.go
@@ -3,7 +3,7 @@ package netmap
import (
"strings"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/netmap"
)
type tempPlacementPolicy struct {
diff --git a/object/attribute.go b/object/attribute.go
index e4c7f60..8e5bc49 100644
--- a/object/attribute.go
+++ b/object/attribute.go
@@ -1,7 +1,7 @@
package object
import (
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
)
// Attribute represents v2-compatible object attribute.
diff --git a/object/attribute_test.go b/object/attribute_test.go
index eafc312..5bca44a 100644
--- a/object/attribute_test.go
+++ b/object/attribute_test.go
@@ -3,7 +3,7 @@ package object
import (
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
"github.com/stretchr/testify/require"
)
diff --git a/object/ecinfo.go b/object/ecinfo.go
index 85345a7..f108b25 100644
--- a/object/ecinfo.go
+++ b/object/ecinfo.go
@@ -1,8 +1,8 @@
package object
import (
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
)
diff --git a/object/erasure_code.go b/object/erasure_code.go
index bb55fe4..d5fbb97 100644
--- a/object/erasure_code.go
+++ b/object/erasure_code.go
@@ -3,8 +3,8 @@ package object
import (
"errors"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
)
diff --git a/object/error_test.go b/object/error_test.go
index 0e52b39..0e4ab4e 100644
--- a/object/error_test.go
+++ b/object/error_test.go
@@ -5,8 +5,8 @@ import (
"errors"
"testing"
- objectV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ objectV2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
"github.com/stretchr/testify/require"
)
diff --git a/object/fmt.go b/object/fmt.go
index 5e6386d..3380a7c 100644
--- a/object/fmt.go
+++ b/object/fmt.go
@@ -7,7 +7,7 @@ import (
"errors"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/checksum"
frostfscrypto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/object/id/address.go b/object/id/address.go
index 6d5f12a..4c7b597 100644
--- a/object/id/address.go
+++ b/object/id/address.go
@@ -5,14 +5,14 @@ import (
"fmt"
"strings"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
)
// Address represents global object identifier in FrostFS network. Each object
// belongs to exactly one container and is uniquely addressed within the container.
//
-// Address is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs.Address
+// Address is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs.Address
// message. See ReadFromV2 / WriteToV2 methods.
//
// Instances can be created using built-in var declaration.
diff --git a/object/id/address_test.go b/object/id/address_test.go
index 5ae91ca..4b4a2f2 100644
--- a/object/id/address_test.go
+++ b/object/id/address_test.go
@@ -3,7 +3,7 @@ package oid_test
import (
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
oidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id/test"
diff --git a/object/id/id.go b/object/id/id.go
index 5ba0c6d..d1dfe80 100644
--- a/object/id/id.go
+++ b/object/id/id.go
@@ -5,7 +5,7 @@ import (
"crypto/sha256"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
frostfscrypto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto"
frostfsecdsa "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa"
"github.com/mr-tron/base58"
@@ -13,7 +13,7 @@ import (
// ID represents FrostFS object identifier in a container.
//
-// ID is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs.ObjectID
+// ID is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs.ObjectID
// message. See ReadFromV2 / WriteToV2 methods.
//
// Instances can be created using built-in var declaration.
diff --git a/object/id/id_test.go b/object/id/id_test.go
index 3f35a3b..e1a2e26 100644
--- a/object/id/id_test.go
+++ b/object/id/id_test.go
@@ -6,7 +6,7 @@ import (
"strconv"
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
"github.com/mr-tron/base58"
"github.com/stretchr/testify/require"
)
diff --git a/object/lock.go b/object/lock.go
index dd08eba..4a2063b 100644
--- a/object/lock.go
+++ b/object/lock.go
@@ -1,8 +1,8 @@
package object
import (
- v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ v2object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
)
diff --git a/object/object.go b/object/object.go
index 718a382..b98685d 100644
--- a/object/object.go
+++ b/object/object.go
@@ -6,10 +6,10 @@ import (
"slices"
"strings"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/checksum"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
frostfscrypto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto"
diff --git a/object/object_test.go b/object/object_test.go
index c082173..4348105 100644
--- a/object/object_test.go
+++ b/object/object_test.go
@@ -3,7 +3,7 @@ package object_test
import (
"testing"
- v2container "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
+ v2container "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/container"
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
objecttest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/test"
diff --git a/object/patch.go b/object/patch.go
index 1cc30fc..2a06674 100644
--- a/object/patch.go
+++ b/object/patch.go
@@ -1,8 +1,8 @@
package object
import (
- v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ v2object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
)
diff --git a/object/patch_test.go b/object/patch_test.go
index f66fd29..84ef481 100644
--- a/object/patch_test.go
+++ b/object/patch_test.go
@@ -3,8 +3,8 @@ package object
import (
"testing"
- v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ v2object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
oidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id/test"
"github.com/stretchr/testify/require"
diff --git a/object/range.go b/object/range.go
index 87ad3b7..b929a73 100644
--- a/object/range.go
+++ b/object/range.go
@@ -1,7 +1,7 @@
package object
import (
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
)
// Range represents v2-compatible object payload range.
diff --git a/object/range_test.go b/object/range_test.go
index c8208d8..14500db 100644
--- a/object/range_test.go
+++ b/object/range_test.go
@@ -3,7 +3,7 @@ package object
import (
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
"github.com/stretchr/testify/require"
)
diff --git a/object/raw.go b/object/raw.go
index 5c91f1d..c30836a 100644
--- a/object/raw.go
+++ b/object/raw.go
@@ -1,7 +1,7 @@
package object
import (
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
)
// RawObject represents v2-compatible FrostFS object that provides
diff --git a/object/raw_test.go b/object/raw_test.go
index 52ac9de..56bbe86 100644
--- a/object/raw_test.go
+++ b/object/raw_test.go
@@ -5,7 +5,7 @@ import (
"crypto/sha256"
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/checksum"
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/object/search.go b/object/search.go
index 818099d..9f61ccf 100644
--- a/object/search.go
+++ b/object/search.go
@@ -4,7 +4,7 @@ import (
"encoding/json"
"strconv"
- v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
+ v2object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user"
diff --git a/object/search_test.go b/object/search_test.go
index 4241f7d..f113b3c 100644
--- a/object/search_test.go
+++ b/object/search_test.go
@@ -5,7 +5,7 @@ import (
"crypto/sha256"
"testing"
- v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
+ v2object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
"github.com/stretchr/testify/require"
diff --git a/object/splitinfo.go b/object/splitinfo.go
index c38b2a4..fc3adcc 100644
--- a/object/splitinfo.go
+++ b/object/splitinfo.go
@@ -4,8 +4,8 @@ import (
"errors"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
)
diff --git a/object/splitinfo_test.go b/object/splitinfo_test.go
index ba3a54f..9a4b370 100644
--- a/object/splitinfo_test.go
+++ b/object/splitinfo_test.go
@@ -5,7 +5,7 @@ import (
"encoding/json"
"testing"
- objv2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
+ objv2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
"github.com/stretchr/testify/require"
diff --git a/object/tombstone.go b/object/tombstone.go
index e332630..cea0b94 100644
--- a/object/tombstone.go
+++ b/object/tombstone.go
@@ -1,8 +1,8 @@
package object
import (
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/tombstone"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/tombstone"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
)
diff --git a/object/tombstone_test.go b/object/tombstone_test.go
index e819b22..024258e 100644
--- a/object/tombstone_test.go
+++ b/object/tombstone_test.go
@@ -5,7 +5,7 @@ import (
"crypto/sha256"
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/tombstone"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/tombstone"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
"github.com/stretchr/testify/require"
)
diff --git a/object/transformer/transformer.go b/object/transformer/transformer.go
index 4cf8c30..16c4066 100644
--- a/object/transformer/transformer.go
+++ b/object/transformer/transformer.go
@@ -6,7 +6,7 @@ import (
"crypto/sha256"
"fmt"
- buffPool "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/pool"
+ buffPool "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/pool"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/checksum"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/object/type.go b/object/type.go
index 29328d3..5e247ab 100644
--- a/object/type.go
+++ b/object/type.go
@@ -1,7 +1,7 @@
package object
import (
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
)
type Type object.Type
diff --git a/object/type_test.go b/object/type_test.go
index 5faa936..7c3360b 100644
--- a/object/type_test.go
+++ b/object/type_test.go
@@ -3,7 +3,7 @@ package object_test
import (
"testing"
- v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
+ v2object "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
"github.com/stretchr/testify/require"
)
diff --git a/pool/mock_test.go b/pool/mock_test.go
index 583b1a0..ad9fd94 100644
--- a/pool/mock_test.go
+++ b/pool/mock_test.go
@@ -7,9 +7,9 @@ import (
"go.uber.org/zap"
- sessionv2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/accounting"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/ape"
+ sessionv2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
diff --git a/pool/tree/client.go b/pool/tree/client.go
index c6562c7..78a1610 100644
--- a/pool/tree/client.go
+++ b/pool/tree/client.go
@@ -7,7 +7,7 @@ import (
"fmt"
"sync"
- apiClient "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
+ apiClient "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client"
grpcService "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/pool/tree/service"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
diff --git a/pool/tree/service/service_frostfs.pb.go b/pool/tree/service/service_frostfs.pb.go
index 1a49c5c..a9a48b9 100644
--- a/pool/tree/service/service_frostfs.pb.go
+++ b/pool/tree/service/service_frostfs.pb.go
@@ -7,7 +7,7 @@ import (
protowire "google.golang.org/protobuf/encoding/protowire"
)
-import "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/proto"
+import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
// StableSize returns the size of x in protobuf format.
//
diff --git a/pool/tree/service/types_frostfs.pb.go b/pool/tree/service/types_frostfs.pb.go
index 707fcc3..a8dfba3 100644
--- a/pool/tree/service/types_frostfs.pb.go
+++ b/pool/tree/service/types_frostfs.pb.go
@@ -2,7 +2,7 @@
package tree
-import "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/proto"
+import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/util/proto"
// StableSize returns the size of x in protobuf format.
//
diff --git a/prepare.sh b/prepare.sh
new file mode 100755
index 0000000..a7b6100
--- /dev/null
+++ b/prepare.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+if [ -z "$1" ]; then
+ echo "usage: ./prepare.sh path/to/frostfs-api"
+ exit 1
+fi
+
+API_GO_PATH=$(pwd)/api
+API_PATH=$1
+
+# MOVE FILES FROM API REPO
+cd "$API_PATH" || exit 1
+ARGS=$(find ./ -name '*.proto' -not -path './bin/*')
+for file in $ARGS; do
+ dir=$(dirname "$file")
+ mkdir -p "$API_GO_PATH/$dir/grpc"
+ cp -r "$dir"/* "$API_GO_PATH/$dir/grpc"
+done
+
+# MODIFY FILES
+cd "$API_GO_PATH" || exit 1
+ARGS2=$(find ./ -name '*.proto' -not -path './bin/*')
+for file in $ARGS2; do
+ echo "$file"
+ sed -i "s/import\ \"\(.*\)\/\(.*\)\.proto\";/import\ \"\1\/grpc\/\2\.proto\";/" $file
+ sed -i "s/api-go\\/v2/sdk-go\\/api/" $file
+ sed -i "s/import \"/import \"api\//" $file
+done
+
+
+cd "$API_GO_PATH/.." || exit 1
+# COMPILE
+make protoc
+
+# REMOVE PROTO DEFINITIONS
+ARGS=$(find ./$prefix -name '*.proto' -not -path './util/*' -not -path './bin/*')
+for file in $ARGS; do
+ rm "$file"
+done
diff --git a/session/common.go b/session/common.go
index b103b59..3d7308f 100644
--- a/session/common.go
+++ b/session/common.go
@@ -6,8 +6,8 @@ import (
"errors"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
frostfscrypto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto"
frostfsecdsa "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user"
diff --git a/session/container.go b/session/container.go
index 45c5ff8..463523b 100644
--- a/session/container.go
+++ b/session/container.go
@@ -5,8 +5,8 @@ import (
"errors"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
frostfscrypto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user"
@@ -18,7 +18,7 @@ import (
// limited validity period, and applies to a strictly defined set of operations.
// See methods for details.
//
-// Container is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session.Token
+// Container is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session.Token
// message. See ReadFromV2 / WriteToV2 methods.
//
// Instances can be created using built-in var declaration.
diff --git a/session/container_test.go b/session/container_test.go
index 73fd815..fcf152d 100644
--- a/session/container_test.go
+++ b/session/container_test.go
@@ -8,8 +8,8 @@ import (
mrand "math/rand"
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
frostfscrypto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto"
frostfsecdsa "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa"
diff --git a/session/doc.go b/session/doc.go
index 12ec0c4..98858f7 100644
--- a/session/doc.go
+++ b/session/doc.go
@@ -28,7 +28,7 @@ Instances can be also used to process FrostFS API V2 protocol messages
On client side:
- import "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
+ import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
var msg session.Token
tok.WriteToV2(&msg)
diff --git a/session/object.go b/session/object.go
index 3641bd1..385ca03 100644
--- a/session/object.go
+++ b/session/object.go
@@ -5,8 +5,8 @@ import (
"errors"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
)
@@ -17,7 +17,7 @@ import (
// limited validity period, and applies to a strictly defined set of operations.
// See methods for details.
//
-// Object is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session.Token
+// Object is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session.Token
// message. See ReadFromV2 / WriteToV2 methods.
//
// Instances can be created using built-in var declaration.
diff --git a/session/object_test.go b/session/object_test.go
index 59ff8d6..4d20773 100644
--- a/session/object_test.go
+++ b/session/object_test.go
@@ -8,8 +8,8 @@ import (
"math/rand"
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
- v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
+ v2session "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/session"
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
frostfscrypto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto"
frostfsecdsa "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa"
diff --git a/user/doc.go b/user/doc.go
index 4809e4a..d4e0b4b 100644
--- a/user/doc.go
+++ b/user/doc.go
@@ -39,7 +39,7 @@ Instances can be also used to process FrostFS API protocol messages
On client side:
- import "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
var msg refs.OwnerID
id.WriteToV2(&msg)
diff --git a/user/id.go b/user/id.go
index 31ff9b6..2d64d43 100644
--- a/user/id.go
+++ b/user/id.go
@@ -5,7 +5,7 @@ import (
"errors"
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
"github.com/mr-tron/base58"
"github.com/nspcc-dev/neo-go/pkg/crypto/hash"
"github.com/nspcc-dev/neo-go/pkg/encoding/address"
@@ -18,7 +18,7 @@ var zeroSlice = bytes.Repeat([]byte{0}, idSize)
// ID identifies users of the FrostFS system.
//
-// ID is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs.OwnerID
+// ID is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs.OwnerID
// message. See ReadFromV2 / WriteToV2 methods.
//
// Instances can be created using built-in var declaration. Zero ID is not valid,
diff --git a/user/id_test.go b/user/id_test.go
index 9867472..afeb746 100644
--- a/user/id_test.go
+++ b/user/id_test.go
@@ -5,7 +5,7 @@ import (
"crypto/rand"
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
. "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user"
usertest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user/test"
"github.com/mr-tron/base58"
diff --git a/version/version.go b/version/version.go
index 47e61c8..2411966 100644
--- a/version/version.go
+++ b/version/version.go
@@ -3,12 +3,12 @@ package version
import (
"fmt"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
)
// Version represents revision number in SemVer scheme.
//
-// Version is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs.Version
+// Version is mutually compatible with git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs.Version
// message. See ReadFromV2 / WriteToV2 methods.
//
// Instances can be created using built-in var declaration.
diff --git a/version/version_test.go b/version/version_test.go
index fdf2b6a..97cec9a 100644
--- a/version/version_test.go
+++ b/version/version_test.go
@@ -3,7 +3,7 @@ package version
import (
"testing"
- "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
+ "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/refs"
"github.com/stretchr/testify/require"
)