Documentation ¶
Overview ¶
Package blob defines types to refer to and retrieve low-level Camlistore blobs.
Index ¶
- Constants
- Variables
- func HashFuncs() []string
- func NewHash() hash.Hash
- func NewLazyReadSeekCloser(src Fetcher, br Ref) types.ReadSeekCloser
- func ReaderAt(sf SubFetcher, br Ref) io.ReaderAt
- func TypeAlphabet(typ string) string
- func ValidRefString(s string) bool
- type Blob
- type ByRef
- type ChanPeeker
- type DirFetcher
- type Fetcher
- type Ref
- func MustParse(s string) Ref
- func Parse(s string) (ref Ref, ok bool)
- func ParseBytes(s []byte) (ref Ref, ok bool)
- func ParseKnown(s string) (ref Ref, ok bool)
- func ParseOrZero(s string) Ref
- func RefFromHash(h hash.Hash) Ref
- func RefFromString(s string) Ref
- func SHA1FromBytes(b []byte) Ref
- func SHA1FromString(s string) Ref
- func (r Ref) Digest() string
- func (r Ref) DigestPrefix(digits int) string
- func (r Ref) DomID() string
- func (r Ref) Hash() hash.Hash
- func (r Ref) HashMatches(h hash.Hash) bool
- func (r Ref) HashName() string
- func (r Ref) IsSupported() bool
- func (r Ref) Less(o Ref) bool
- func (r Ref) MarshalBinary() (data []byte, err error)
- func (r Ref) MarshalJSON() ([]byte, error)
- func (r Ref) String() string
- func (r Ref) StringMinusOne() string
- func (r Ref) Sum32() uint32
- func (r Ref) Sum64() uint64
- func (r *Ref) UnmarshalBinary(data []byte) error
- func (r *Ref) UnmarshalJSON(d []byte) error
- func (r Ref) Valid() bool
- type SizedByRef
- type SizedRef
- type SubFetcher
Constants ¶
const Pattern = `\b([a-z][a-z0-9]*)-([a-f0-9]+)\b`
Pattern is the regular expression which matches a blobref. It does not contain ^ or $.
Variables ¶
var ( ErrNegativeSubFetch = errors.New("invalid negative subfetch parameters") ErrOutOfRangeOffsetSubFetch = errors.New("subfetch offset greater than blob size") )
Functions ¶
func HashFuncs ¶
func HashFuncs() []string
HashFuncs returns the names of the supported hash functions.
func NewHash ¶
NewHash returns a new hash.Hash of the currently recommended hash type. Currently this is just SHA-1, but will likely change within the next year or so.
func NewLazyReadSeekCloser ¶
func NewLazyReadSeekCloser(src Fetcher, br Ref) types.ReadSeekCloser
NewLazyReadSeekCloser returns a ReadSeekCloser that does no work until one of its Read, Seek, or Close methods is called, but then fetches the ref from src. Any fetch error is returned in the Read, Seek, or Close call.
func ReaderAt ¶
func ReaderAt(sf SubFetcher, br Ref) io.ReaderAt
ReaderAt returns an io.ReaderAt of br, fetching against sf.
func TypeAlphabet ¶
TypeAlphabet returns the valid characters in the given blobref type. It returns the empty string if the typ is unknown.
func ValidRefString ¶
Types ¶
type Blob ¶
type Blob struct {
// contains filtered or unexported fields
}
Blob represents a blob. Use the methods Size, SizedRef and Open to query and get data from Blob.
func FromFetcher ¶
FromFetcher fetches br from fetcher and slurps its contents to memory. It does not validate the blob's digest. Use the Blob.ValidContents method for that.
func FromReader ¶
FromReader slurps the given blob from r to memory. It does not validate the blob's digest. Use the Blob.ValidContents method for that.
func NewBlob ¶
func NewBlob(ref Ref, size uint32, newReader func() types.ReadSeekCloser) *Blob
NewBlob constructs a Blob from its Ref, size and a function that returns an io.ReadCloser from which the blob can be read. Any error in the function newReader when constructing the io.ReadCloser should be returned upon the first call to Read or Close.
func (*Blob) Open ¶
func (b *Blob) Open() types.ReadSeekCloser
Open returns an io.ReadCloser that can be used to read the blob data. The caller must close the io.ReadCloser when finished.
func (*Blob) ValidContents ¶
ValidContents reports whether the hash of blob's content matches its reference.
type ChanPeeker ¶
type ChanPeeker struct { Ch <-chan SizedRef // contains filtered or unexported fields }
ChanPeeker wraps a channel receiving SizedRefs and adds a 1 element buffer on it, with Peek and Take methods.
func (*ChanPeeker) Closed ¶
func (cp *ChanPeeker) Closed() bool
Closed reports true if no more SizedRef values are available.
func (*ChanPeeker) ConsumeAll ¶
func (cp *ChanPeeker) ConsumeAll()
ConsumeAll drains the channel of all items.
func (*ChanPeeker) MustPeek ¶
func (cp *ChanPeeker) MustPeek() SizedRef
MustPeek returns the next SizedRef or panics if none is available.
func (*ChanPeeker) MustTake ¶
func (cp *ChanPeeker) MustTake() SizedRef
MustTake returns the next SizedRef, else panics if none is available.
func (*ChanPeeker) Peek ¶
func (cp *ChanPeeker) Peek() (sr SizedRef, ok bool)
Peek returns the next SizedRef and whether one was available.
func (*ChanPeeker) Take ¶
func (cp *ChanPeeker) Take() (sr SizedRef, ok bool)
Take returns the next SizedRef and whether one was available for the taking.
type DirFetcher ¶
type DirFetcher struct {
// contains filtered or unexported fields
}
func NewSimpleDirectoryFetcher ¶
func NewSimpleDirectoryFetcher(dir string) *DirFetcher
func (*DirFetcher) Fetch ¶
func (df *DirFetcher) Fetch(r Ref) (file io.ReadCloser, size uint32, err error)
type Fetcher ¶
type Fetcher interface { // Fetch returns a blob. If the blob is not found then // os.ErrNotExist should be returned for the error (not a wrapped // error with a ErrNotExist inside) // // The contents are not guaranteed to match the digest of the // provided Ref (e.g. when streamed over HTTP). Paranoid // callers should verify them. // // The caller must close blob. Fetch(Ref) (blob io.ReadCloser, size uint32, err error) }
Fetcher is the minimal interface for retrieving a blob from storage. The full storage interface is blobserver.Storage.
func NewSerialFetcher ¶
type Ref ¶
type Ref struct {
// contains filtered or unexported fields
}
Ref is a reference to a Camlistore blob. It is used as a value type and supports equality (with ==) and the ability to use it as a map key.
func ParseBytes ¶
ParseBytes is like Parse, but parses from a byte slice.
func ParseKnown ¶
ParseKnown is like Parse, but only parse blobrefs known to this server. It returns ok == false for well-formed but unsupported blobrefs.
func ParseOrZero ¶
Parse parse s as a blobref. If s is invalid, a zero Ref is returned which can be tested with the Valid method.
func RefFromHash ¶
RefFromHash returns a blobref representing the given hash. It panics if the hash isn't of a known type.
func RefFromString ¶
RefFromString returns a blobref from the given string, for the currently recommended hash function
func SHA1FromBytes ¶
SHA1FromBytes returns a SHA-1 blobref of the provided bytes.
func SHA1FromString ¶
SHA1FromString returns a SHA-1 blobref of the provided string.
func (Ref) Digest ¶
Digest returns the lower hex digest of the blobref, without the e.g. "sha1-" prefix. It panics if r is zero.
func (Ref) DigestPrefix ¶
func (Ref) HashName ¶
HashName returns the lowercase hash function name of the reference. It panics if r is zero.
func (Ref) IsSupported ¶
func (Ref) MarshalBinary ¶
MarshalBinary implements Go's encoding.BinaryMarshaler interface.
func (Ref) MarshalJSON ¶
func (Ref) StringMinusOne ¶
StringMinusOne returns the first string that's before String.
func (*Ref) UnmarshalBinary ¶
UnmarshalBinary implements Go's encoding.BinaryUnmarshaler interface.
func (*Ref) UnmarshalJSON ¶
type SizedByRef ¶
type SizedByRef []SizedRef
SizedByRef sorts SizedRefs by their blobref.
func (SizedByRef) Len ¶
func (s SizedByRef) Len() int
func (SizedByRef) Less ¶
func (s SizedByRef) Less(i, j int) bool
func (SizedByRef) Swap ¶
func (s SizedByRef) Swap(i, j int)
type SizedRef ¶
SizedRef is like a Ref but includes a size. It should also be used as a value type and supports equality.
type SubFetcher ¶
type SubFetcher interface { // SubFetch returns part of a blob. // The caller must close the returned io.ReadCloser. // The Reader may return fewer than 'length' bytes. Callers should // check. The returned error should be: ErrNegativeSubFetch if any of // offset or length is negative, or os.ErrNotExist if the blob // doesn't exist, or ErrOutOfRangeOffsetSubFetch if offset goes over // the size of the blob. SubFetch(ref Ref, offset, length int64) (io.ReadCloser, error) }
A SubFetcher is a Fetcher that can retrieve part of a blob.