package core
import (
"errors"
"io"
)
var (
//ErrStop is used to stop a ForEach function in an Iter
ErrStop = errors.New("stop iter")
)
// ObjectStorer generic storage of objects
type ObjectStorer interface {
// NewObject returns a new Object, the real type of the object can be a
// custom implementation or the defaul one, MemoryObject
NewObject() Object
// SetObject save an object into the storage, the object shuld be create
// with the NewObject, method, and file if the type is not supported.
SetObject(Object) (Hash, error)
// Object an object by hash with the given ObjectType. Implementors
// should return (nil, ErrObjectNotFound) if an object doesn't exist with
// both the given hash and object type.
//
// Valid ObjectType values are CommitObject, BlobObject, TagObject,
// TreeObject and AnyObject. If AnyObject is given, the object must be
// looked up regardless of its type.
Object(ObjectType, Hash) (Object, error)
// IterObjects returns a custom ObjectIter over all the object on the
// storage.
//
// Valid ObjectType values are CommitObject, BlobObject, TagObject,
IterObjects(ObjectType) (ObjectIter, error)
}
// Transactioner is a optional method for ObjectStorer, it enable transaction
// base write and read operations in the storage
type Transactioner interface {
// Begin starts a transaction.
Begin() Transaction
}
// PackfileWriter is a optional method for ObjectStorer, it enable direct write
// of packfile to the storage
type PackfileWriter interface {
// PackfileWriter retuns a writer for writing a packfile to the Storage,
// this method is optional, if not implemented the ObjectStorer should
// return a ErrNotImplemented error.
//
// If the implementation not implements Writer the objects should be written
// using the Set method.
PackfileWriter() (io.WriteCloser, error)
}
// ObjectIter is a generic closable interface for iterating over objects.
type ObjectIter interface {
Next() (Object, error)
ForEach(func(Object) error) error
Close()
}
// Transaction is an in-progress storage transaction. A transaction must end
// with a call to Commit or Rollback.
type Transaction interface {
SetObject(Object) (Hash, error)
Object(ObjectType, Hash) (Object, error)
Commit() error
Rollback() error
}
// ReferenceStorer generic storage of references
type ReferenceStorer interface {
SetReference(*Reference) error
Reference(ReferenceName) (*Reference, error)
IterReferences() (ReferenceIter, error)
}
// ReferenceIter is a generic closable interface for iterating over references
type ReferenceIter interface {
Next() (*Reference, error)
ForEach(func(*Reference) error) error
Close()
}