func (r *RetryObjectHandler) Attrs(ctx context.Context) (*storage.ObjectAttrs, error) {
	return objectAttributeRetry(r.Retry, func() (*storage.ObjectAttrs, error) {
		return r.handler.Attrs(ctx)
	})
}
Attrs represents the metadata for a Google Cloud Storage (GCS) object, wrapped in a retry.
package gs
import (
	"context"
	"cloud.google.com/go/storage"
	"google.golang.org/api/iterator"
	"github.com/c2fo/vfs/v6"
)
type ObjectHandleWrapper interface {
	NewWriter(ctx context.Context) *storage.Writer
	NewReader(ctx context.Context) (*storage.Reader, error)
	Attrs(ctx context.Context) (*storage.ObjectAttrs, error)
	Delete(ctx context.Context) error
	Update(ctx context.Context, attrs storage.ObjectAttrsToUpdate) (*storage.ObjectAttrs, error)
}
type ObjectHandleCopier interface {
	ObjectHandleWrapper
	WrappedCopierFrom(src *storage.ObjectHandle) CopierWrapper
	ObjectHandle() *storage.ObjectHandle
}
type CopierWrapper interface {
	Run(ctx context.Context) (*storage.ObjectAttrs, error)
	ContentType(string)
}
type RetryObjectHandler struct {
	Retry   vfs.Retry
	handler *storage.ObjectHandle
}
func (r *RetryObjectHandler) NewWriter(ctx context.Context) *storage.Writer {
	return r.handler.NewWriter(ctx)
}
func (r *RetryObjectHandler) NewReader(ctx context.Context) (*storage.Reader, error) {
	var reader *storage.Reader
	if err := r.Retry(func() error {
		var retryErr error
		reader, retryErr = r.handler.NewReader(ctx)
		if retryErr != nil {
			return retryErr
		}
		return nil
	}); err != nil {
		return nil, err
	}
	return reader, nil
}