[#218] pkg/object: Define custom error for SplitInfo

Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
Alex Vanin 2020-12-02 14:25:25 +03:00
parent 1fdeca84e1
commit e11b1728be
3 changed files with 54 additions and 2 deletions

View file

@ -445,8 +445,9 @@ func (c *Client) getObjectV2(ctx context.Context, p *GetObjectParams, opts ...Ca
} else {
payload = append(payload, v.GetChunk()...)
}
case *v2object.SplitInfo: // what else can we do here?
return nil, errors.New("object not found, split info has been provided")
case *v2object.SplitInfo:
si := object.NewSplitInfoFromV2(v)
return nil, object.NewSplitInfoError(si)
default:
panic(fmt.Sprintf("unexpected Get object part type %T", v))
}

19
pkg/object/error.go Normal file
View file

@ -0,0 +1,19 @@
package object
type SplitInfoError struct {
si *SplitInfo
}
const splitInfoErrorMsg = "object not found, split info has been provided"
func (s SplitInfoError) Error() string {
return splitInfoErrorMsg
}
func (s SplitInfoError) SplitInfo() *SplitInfo {
return s.si
}
func NewSplitInfoError(v *SplitInfo) SplitInfoError {
return SplitInfoError{si: v}
}

32
pkg/object/error_test.go Normal file
View file

@ -0,0 +1,32 @@
package object_test
import (
"errors"
"testing"
"github.com/nspcc-dev/neofs-api-go/pkg/object"
"github.com/stretchr/testify/require"
)
func TestNewSplitInfoError(t *testing.T) {
var (
si = generateSplitInfo()
err error = object.NewSplitInfoError(si)
)
require.True(t, errors.As(err, new(object.SplitInfoError)))
siErr, ok := err.(object.SplitInfoError)
require.True(t, ok)
require.Equal(t, si, siErr.SplitInfo())
}
func generateSplitInfo() *object.SplitInfo {
si := object.NewSplitInfo()
si.SetSplitID(object.NewSplitID())
si.SetLastPart(generateID())
si.SetLink(generateID())
return si
}