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  }