48 lines
1 KiB
Go
48 lines
1 KiB
Go
|
package getsvc
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
objectV2 "github.com/nspcc-dev/neofs-api-go/v2/object"
|
||
|
"github.com/nspcc-dev/neofs-node/pkg/core/object"
|
||
|
getsvc "github.com/nspcc-dev/neofs-node/pkg/services/object/get"
|
||
|
"github.com/pkg/errors"
|
||
|
)
|
||
|
|
||
|
type streamer struct {
|
||
|
stream *getsvc.Streamer
|
||
|
|
||
|
body *objectV2.GetResponseBody
|
||
|
}
|
||
|
|
||
|
func (s *streamer) Recv() (*objectV2.GetResponse, error) {
|
||
|
r, err := s.stream.Recv()
|
||
|
if err != nil {
|
||
|
return nil, errors.Wrapf(err, "(%T) could not receive get response", s)
|
||
|
}
|
||
|
|
||
|
switch v := r.(type) {
|
||
|
case *object.Object:
|
||
|
oV2 := v.ToV2()
|
||
|
|
||
|
partInit := new(objectV2.GetObjectPartInit)
|
||
|
partInit.SetHeader(oV2.GetHeader())
|
||
|
partInit.SetSignature(oV2.GetSignature())
|
||
|
partInit.SetObjectID(oV2.GetObjectID())
|
||
|
|
||
|
s.body.SetObjectPart(partInit)
|
||
|
case []byte:
|
||
|
partChunk := new(objectV2.GetObjectPartChunk)
|
||
|
partChunk.SetChunk(v)
|
||
|
|
||
|
s.body.SetObjectPart(partChunk)
|
||
|
default:
|
||
|
panic(fmt.Sprintf("unexpected response type %T from %T", r, s.stream))
|
||
|
}
|
||
|
|
||
|
resp := new(objectV2.GetResponse)
|
||
|
resp.SetBody(s.body)
|
||
|
|
||
|
return resp, nil
|
||
|
}
|