Documentation ¶
Overview ¶
Package blob defines types to refer to and retrieve low-level Perkeep blobs.
Index ¶
- Constants
- Variables
- func HashFuncs() []string
- func NewHash() hash.Hash
- func ReaderAt(ctx context.Context, 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 (r Ref) Digest() string
- func (r Ref) DigestPrefix(digits int) string
- func (r Ref) DomID() string
- func (r Ref) EqualString(s string) bool
- func (r Ref) HasPrefix(s string) bool
- 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") )
var ErrUnimplemented = errors.New("optional method not implemented")
ErrUnimplemented is returned by optional interfaces when their wrapped values don't implemented the optional interface.
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 SHA-224, but is subject to change over time.
func ReaderAt ¶
ReaderAt returns an io.ReaderAt of br, fetching against sf. The context is stored in and used by the returned ReaderAt.
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 ReadAll 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 ¶
NewBlob constructs a Blob from its Ref, size and a function that returns the contents of the blob. Any error in the function newReader when constructing the io.ReadCloser should be returned upon the first call to Read or Close.
func (*Blob) ReadAll ¶
ReadAll reads the blob completely to memory, using the provided context, and then returns a reader over it. The Reader will not have errors except EOF.
The provided is only ctx is used until ReadAll returns.
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(ctx context.Context, 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. // // The provided context is used until blob is closed and its // cancelation should but may not necessarily cause reads from // blob to fail with an error. Fetch(context.Context, 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 Perkeep 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 ¶
ParseOrZero parses as a blobref. If s is invalid, a zero Ref is returned which can be tested with the Valid method.
func RefFromBytes ¶
RefFromBytes returns a blobref from the given string, for the currently recommended hash function.
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 (Ref) Digest ¶
Digest returns the lower hex digest of the blobref, without the e.g. "sha224-" prefix. It panics if r is zero.
func (Ref) DigestPrefix ¶
func (Ref) EqualString ¶
EqualString reports whether r.String() is equal to s. It does not allocate.
func (Ref) HasPrefix ¶
HasPrefix reports whether s is a prefix of r.String(). It returns false if s does not contain at least the digest name prefix (e.g. "sha224-") and one byte of digest. It does not allocate.
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. If the error is ErrUnimplemented, the caller should // treat this Fetcher as if it doesn't implement SubFetcher. SubFetch(ctx context.Context, ref Ref, offset, length int64) (io.ReadCloser, error) }
A SubFetcher is a Fetcher that can retrieve part of a blob.