git.frostfs.info/TrueCloudLab/frostfs-sdk-go@v0.0.0-20241022124111-5361f0ecebd3/object/erasurecode/target.go (about) 1 package erasurecode 2 3 import ( 4 "context" 5 "crypto/ecdsa" 6 7 objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" 8 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/transformer" 9 ) 10 11 // Target accepts regular objects and splits them into erasure-coded chunks. 12 type Target struct { 13 c *Constructor 14 key *ecdsa.PrivateKey 15 next transformer.ObjectWriter 16 } 17 18 // ObjectWriter is an interface of the object writer that writes prepared object. 19 type ObjectWriter interface { 20 WriteObject(context.Context, *objectSDK.Object) error 21 } 22 23 // NewTarget returns new target instance. 24 func NewTarget(c *Constructor, key *ecdsa.PrivateKey, next ObjectWriter) *Target { 25 return &Target{ 26 c: c, 27 key: key, 28 next: next, 29 } 30 } 31 32 // WriteObject implements the transformer.ObjectWriter interface. 33 func (t *Target) WriteObject(ctx context.Context, obj *objectSDK.Object) error { 34 parts, err := t.c.Split(obj, t.key) 35 if err != nil { 36 return err 37 } 38 for i := range parts { 39 if err := t.next.WriteObject(ctx, parts[i]); err != nil { 40 return err 41 } 42 } 43 return nil 44 }