package storage
import (
"context"
"errors"
"io"
"github.com/thanos-io/objstore"
)
type Bucket interface {
objstore .Bucket
GetReaderAt (ctx context .Context , name string ) (io .ReaderAt , error )
}
type FileReaderAt struct {
objstore .Bucket
name string
ctx context .Context
}
type BucketReaderAt struct {
objstore .Bucket
}
func NewBucketReaderAt (bucket objstore .Bucket ) *BucketReaderAt {
return &BucketReaderAt {Bucket : bucket }
}
func (b *BucketReaderAt ) GetReaderAt (ctx context .Context , name string ) (io .ReaderAt , error ) {
return &FileReaderAt {
Bucket : b .Bucket ,
name : name ,
ctx : ctx ,
}, nil
}
func (b *FileReaderAt ) ReadAt (p []byte , off int64 ) (n int , err error ) {
rc , err := b .GetRange (b .ctx , b .name , off , int64 (len (p )))
if err != nil {
return 0 , err
}
defer func () {
rc .Close ()
}()
total := 0
for total < len (p ) {
n , err = rc .Read (p [total :])
total += n
if err != nil {
if errors .Is (err , io .EOF ) {
break
}
return total , err
}
}
return total , nil
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .