Documentation
¶
Overview ¶
Package bfs outlines an abstraction for bucket-based fyle systems with mock-implmentations.
Index ¶
- Variables
- func CopyObject(bucket Bucket, ctx context.Context, src, dst string) error
- func Register(scheme string, resv Resolver)
- func WriteObject(bucket Bucket, ctx context.Context, name string, data []byte) error
- type Bucket
- type InMem
- func (*InMem) Close() error
- func (b *InMem) Create(ctx context.Context, name string) (io.WriteCloser, error)
- func (b *InMem) Glob(_ context.Context, pattern string) (Iterator, error)
- func (b *InMem) Head(_ context.Context, name string) (*MetaInfo, error)
- func (b *InMem) ObjectSizes() map[string]int64
- func (b *InMem) Open(_ context.Context, name string) (io.ReadCloser, error)
- func (b *InMem) Remove(_ context.Context, name string) error
- type Iterator
- type MetaInfo
- type Object
- type ObjectHandle
- type Resolver
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ErrNotFound = errors.New("bfs: object not found")
ErrNotFound must be returned by all implementations when a requested object cannot be found.
Functions ¶
func CopyObject ¶
CopyObject is a quick helper to copy objects within the same bucket.
func Register ¶ added in v0.2.3
Register registers a new protocol with a scheme and a corresponding resolver. Example (from bfs/bfsfs):
bfs.Register("file", func(_ context.Context, u *url.URL) (bfs.Bucket, error) { return bfsfs.New(u.Path, "") }) u, err := url.Parse("file:///home/user/Documents") ... bucket, err := bfs.Resolve(context.TODO(), u) ...
Types ¶
type Bucket ¶
type Bucket interface { // Glob lists the files matching a glob pattern. It supports // `*`, `**`, `?` wildcards, character classes and alternative sequences. // Please see https://github.com/bmatcuk/doublestar#patterns for more details. Glob(ctx context.Context, pattern string) (Iterator, error) // Head returns an object's meta info. Head(ctx context.Context, name string) (*MetaInfo, error) // Open opens an object for reading. Open(ctx context.Context, name string) (io.ReadCloser, error) // Create creates/opens a object for writing. Create(ctx context.Context, name string) (io.WriteCloser, error) // Remove removes a object. Remove(ctx context.Context, name string) error // Close closes the bucket. Close() error }
Bucket is an abstract storage bucket.
func Resolve ¶ added in v0.2.3
Resolve opens a bucket from a URL. Example (from bfs/bfsfs):
bfs.Register("file", func(_ context.Context, u *url.URL) (bfs.Bucket, error) { return bfsfs.New(u.Path, "") }) u, err := url.Parse("file:///home/user/Documents") ... bucket, err := bfs.Resolve(context.TODO(), u) ...
type InMem ¶
type InMem struct {
// contains filtered or unexported fields
}
InMem is an in-memory Bucket implementation which can be used for mocking.
Example ¶
package main import ( "context" "fmt" "io/ioutil" "github.com/bsm/bfs" ) func main() { ctx := context.Background() bucket := bfs.NewInMem() // Write object o1, err := bucket.Create(ctx, "nested/file.txt") if err != nil { panic(err) } defer o1.Close() if _, err := o1.Write([]byte("TESTDATA")); err != nil { panic(err) } if err := o1.Close(); err != nil { panic(err) } // Glob entries entries, err := bucket.Glob(ctx, "nested/**") if err != nil { panic(err) } fmt.Println("ENTRIES:", entries) // Read object o2, err := bucket.Open(ctx, "nested/file.txt") if err != nil { panic(err) } defer o2.Close() data, err := ioutil.ReadAll(o2) if err != nil { panic(err) } fmt.Println("DATA:", string(data)) // Head object info, err := bucket.Head(ctx, "nested/file.txt") if err != nil { panic(err) } fmt.Printf("INFO: name=%q size=%d\n", info.Name, info.Size) // Delete object if err := bucket.Remove(ctx, "nested/file.txt"); err != nil { panic(err) } }
Output:
func (*InMem) ObjectSizes ¶ added in v0.2.1
ObjectSizes return a map of object sizes by name
type Iterator ¶ added in v0.2.0
type Iterator interface { // Next advances the cursor to the next position. Next() bool // Name returns the name at the current cursor position. Name() string // Error returns the last iterator error, if any. Error() error // Close closes the iterator, should always be deferred. Close() error }
Iterator iterates over objects
type MetaInfo ¶
type MetaInfo struct { Name string // base name of the object Size int64 // length of the content in bytes ModTime time.Time // modification time }
MetaInfo contains meta information about an object.
type Object ¶ added in v0.2.9
type Object struct {
// contains filtered or unexported fields
}
Object is a handle for a single file/object on a Bucket.
func NewInMemObject ¶ added in v0.2.11
NewInMemObject returns a new in-memory object.
type ObjectHandle ¶ added in v0.2.10
type ObjectHandle interface { // Head returns an object's meta info. Head(context.Context) (*MetaInfo, error) // Open opens an object for reading. Open(context.Context) (io.ReadCloser, error) // Create creates/opens a object for writing. Create(context.Context) (io.WriteCloser, error) // Remove removes a object. Remove(context.Context) error // Close closes the object. Close() error }
ObjectHandle is an abstract object handle.
Directories
¶
Path | Synopsis |
---|---|
Package bfsfs abstracts local file system.
|
Package bfsfs abstracts local file system. |
Package bfsgs abstracts Google Cloud Storage bucket.
|
Package bfsgs abstracts Google Cloud Storage bucket. |
Package bfss3 abstracts Amazon S3 bucket.
|
Package bfss3 abstracts Amazon S3 bucket. |