package blob import ( "context" "forge.cadoles.com/arcad/edge/pkg/storage" "github.com/pkg/errors" ) type OpenBucketArgs struct { BucketName string } type OpenBucketReply struct { BucketID BucketID } func (s *Service) OpenBucket(ctx context.Context, args *OpenBucketArgs, reply *OpenBucketReply) error { bucket, err := s.store.OpenBucket(ctx, args.BucketName) if err != nil { return errors.WithStack(err) } bucketID, err := NewBucketID() if err != nil { return errors.WithStack(err) } s.buckets.Store(bucketID, bucket) *reply = OpenBucketReply{ BucketID: bucketID, } return nil } func (s *Service) getOpenedBucket(id BucketID) (storage.BlobBucket, error) { raw, exists := s.buckets.Load(id) if !exists { return nil, errors.WithStack(storage.ErrBucketClosed) } bucket, ok := raw.(storage.BlobBucket) if !ok { return nil, errors.Errorf("unexpected type '%T' for blob bucket", raw) } return bucket, nil }