package objstore
import (
"context"
"io"
"strings"
)
type PrefixedBucket struct {
bkt Bucket
prefix string
}
func NewPrefixedBucket (bkt Bucket , prefix string ) Bucket {
if validPrefix (prefix ) {
return &PrefixedBucket {bkt : bkt , prefix : strings .Trim (prefix , DirDelim )}
}
return bkt
}
func validPrefix(prefix string ) bool {
prefix = strings .Replace (prefix , "/" , "" , -1 )
return len (prefix ) > 0
}
func conditionalPrefix(prefix , name string ) string {
if len (name ) > 0 {
return withPrefix (prefix , name )
}
return name
}
func withPrefix(prefix , name string ) string {
return prefix + DirDelim + name
}
func (p *PrefixedBucket ) Close () error {
return p .bkt .Close ()
}
func (p *PrefixedBucket ) Iter (ctx context .Context , dir string , f func (string ) error , options ...IterOption ) error {
pdir := withPrefix (p .prefix , dir )
return p .bkt .Iter (ctx , pdir , func (s string ) error {
return f (strings .TrimPrefix (s , p .prefix +DirDelim ))
}, options ...)
}
func (p *PrefixedBucket ) Get (ctx context .Context , name string ) (io .ReadCloser , error ) {
return p .bkt .Get (ctx , conditionalPrefix (p .prefix , name ))
}
func (p *PrefixedBucket ) GetRange (ctx context .Context , name string , off int64 , length int64 ) (io .ReadCloser , error ) {
return p .bkt .GetRange (ctx , conditionalPrefix (p .prefix , name ), off , length )
}
func (p *PrefixedBucket ) Exists (ctx context .Context , name string ) (bool , error ) {
return p .bkt .Exists (ctx , conditionalPrefix (p .prefix , name ))
}
func (p *PrefixedBucket ) IsObjNotFoundErr (err error ) bool {
return p .bkt .IsObjNotFoundErr (err )
}
func (p *PrefixedBucket ) IsAccessDeniedErr (err error ) bool {
return p .bkt .IsAccessDeniedErr (err )
}
func (p PrefixedBucket ) Attributes (ctx context .Context , name string ) (ObjectAttributes , error ) {
return p .bkt .Attributes (ctx , conditionalPrefix (p .prefix , name ))
}
func (p *PrefixedBucket ) Upload (ctx context .Context , name string , r io .Reader ) error {
return p .bkt .Upload (ctx , conditionalPrefix (p .prefix , name ), r )
}
func (p *PrefixedBucket ) Delete (ctx context .Context , name string ) error {
return p .bkt .Delete (ctx , conditionalPrefix (p .prefix , name ))
}
func (p *PrefixedBucket ) Name () string {
return p .bkt .Name ()
}
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 .