func()

in oss/copier.go [144:196]


func (c *Copier) newDelegate(ctx context.Context, request *CopyObjectRequest, optFns ...func(*CopierOptions)) (*copierDelegate, error) {
	if request == nil {
		return nil, NewErrParamNull("request")
	}

	if request.Bucket == nil {
		return nil, NewErrParamNull("request.Bucket")
	}

	if request.Key == nil {
		return nil, NewErrParamNull("request.Key")
	}

	if request.SourceKey == nil {
		return nil, NewErrParamNull("request.SourceKey")
	}

	if request.MetadataDirective != nil && !isValidCopyDirective(*request.MetadataDirective) {
		return nil, NewErrParamInvalid("request.MetadataDirective")
	}

	if request.TaggingDirective != nil && !isValidCopyDirective(*request.TaggingDirective) {
		return nil, NewErrParamInvalid("request.TaggingDirective")
	}

	d := copierDelegate{
		base:    c,
		options: c.options,
		context: ctx,
		request: request,
	}

	for _, opt := range optFns {
		opt(&d.options)
	}

	if d.options.ParallelNum <= 0 {
		d.options.ParallelNum = DefaultCopyParallel
	}

	if d.options.PartSize <= 0 {
		d.options.PartSize = DefaultCopyPartSize
	}

	if d.options.MultipartCopyThreshold < 0 {
		d.options.MultipartCopyThreshold = DefaultCopyThreshold
	}

	d.tagProp = d.options.TagProperties
	d.metaProp = d.options.MetadataProperties

	return &d, nil
}