forked from TrueCloudLab/frostfs-sdk-go
bf78cddf69
Make all `Client` methods to return structured values and error. Parse v2 status messages in all RPC and provide status getter from all result structures. Returns status failures as status result instead of error. Interface changes: * all methods return `<method>Res` structure; * rename some methods to be more clear; * unify TZ and SHA256 objecy payload hashing in single method. Behavior changes: * client doesn't verify object header structure received via Object.Head. If the caller was tied to verification, now it must do it explicitly. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
38 lines
1.1 KiB
Go
38 lines
1.1 KiB
Go
package client
|
|
|
|
import "github.com/nspcc-dev/neofs-api-go/v2/session"
|
|
|
|
// ResponseMetaInfo groups meta information about any NeoFS API response.
|
|
type ResponseMetaInfo struct {
|
|
key []byte
|
|
}
|
|
|
|
type responseV2 interface {
|
|
GetMetaHeader() *session.ResponseMetaHeader
|
|
GetVerificationHeader() *session.ResponseVerificationHeader
|
|
}
|
|
|
|
// ResponderKey returns responder's public key in a binary format.
|
|
//
|
|
// Result must not be mutated.
|
|
func (x ResponseMetaInfo) ResponderKey() []byte {
|
|
return x.key
|
|
}
|
|
|
|
// WithResponseInfoHandler allows to specify handler of response meta information for the all Client operations.
|
|
// The handler is called right after the response is received. Client returns handler's error immediately.
|
|
func WithResponseInfoHandler(f func(ResponseMetaInfo) error) Option {
|
|
return func(opts *clientOptions) {
|
|
opts.cbRespInfo = f
|
|
}
|
|
}
|
|
|
|
func (c *clientImpl) handleResponseInfoV2(opts *callOptions, resp responseV2) error {
|
|
if c.opts.cbRespInfo == nil {
|
|
return nil
|
|
}
|
|
|
|
return c.opts.cbRespInfo(ResponseMetaInfo{
|
|
key: resp.GetVerificationHeader().GetBodySignature().GetKey(),
|
|
})
|
|
}
|