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. |