syntax = "proto3";
package service;
option go_package = "github.com/nspcc-dev/neofs-api-go/service";
option csharp_namespace = "NeoFS.API.Service";

import "github.com/gogo/protobuf/gogoproto/gogo.proto";

option (gogoproto.stable_marshaler_all) = true;

// RequestMetaHeader contains information about request meta headers
// (should be embedded into message)
message RequestMetaHeader {
    // TTL must be larger than zero, it decreased in every NeoFS Node
    uint32 TTL     = 1;
    // Epoch for user can be empty, because node sets epoch to the actual value
    uint64 Epoch   = 2;
    // Version defines protocol version
    // TODO: not used for now, should be implemented in future
    uint32 Version = 3;
    // Raw determines whether the request is raw or not
    bool Raw       = 4;
    // ExtendedHeader carries extended headers of the request
    RequestExtendedHeader ExtendedHeader = 5 [(gogoproto.embed) = true, (gogoproto.nullable) = false];
}

// ResponseMetaHeader contains meta information based on request processing by server
// (should be embedded into message)
message ResponseMetaHeader {
    // Current NeoFS epoch on server
    uint64 Epoch   = 1;
    // Version defines protocol version
    // TODO: not used for now, should be implemented in future
    uint32 Version = 2;
}

// RequestExtendedHeader contains extended headers of request
message RequestExtendedHeader {
    // KV contains string key-value pair
    message KV {
        // K carries extended header key
        string K = 1;

        // V carries extended header value
        string V = 2;
    }

    // Headers carries list of key-value headers
    repeated KV Headers = 1 [(gogoproto.nullable) = false];
}