forked from TrueCloudLab/frostfs-node
Dmitrii Stepanov
39da643354
Extract object builder. Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package putsvc
|
|
|
|
import (
|
|
"context"
|
|
|
|
objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/transformer"
|
|
)
|
|
|
|
var _ transformer.ChunkedObjectWriter = (*inMemoryObjectBuilder)(nil)
|
|
|
|
type inMemoryObjectBuilder struct {
|
|
objectWriter transformer.ObjectWriter
|
|
payload *payload
|
|
|
|
obj *objectSDK.Object
|
|
}
|
|
|
|
func newInMemoryObjectBuilder(objectWriter transformer.ObjectWriter) *inMemoryObjectBuilder {
|
|
return &inMemoryObjectBuilder{
|
|
objectWriter: objectWriter,
|
|
payload: getPayload(),
|
|
}
|
|
}
|
|
|
|
func (b *inMemoryObjectBuilder) Close(ctx context.Context) (*transformer.AccessIdentifiers, error) {
|
|
defer func() {
|
|
putPayload(b.payload)
|
|
b.payload = nil
|
|
}()
|
|
|
|
b.obj.SetPayload(b.payload.Data)
|
|
|
|
if err := b.objectWriter.WriteObject(ctx, b.obj); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
id, _ := b.obj.ID()
|
|
return &transformer.AccessIdentifiers{
|
|
SelfID: id,
|
|
}, nil
|
|
}
|
|
|
|
func (b *inMemoryObjectBuilder) Write(_ context.Context, p []byte) (int, error) {
|
|
b.payload.Data = append(b.payload.Data, p...)
|
|
|
|
return len(p), nil
|
|
}
|
|
|
|
func (b *inMemoryObjectBuilder) WriteHeader(_ context.Context, obj *objectSDK.Object) error {
|
|
b.obj = obj
|
|
|
|
return nil
|
|
}
|