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 }