Document functions for handling StoreComposers
This commit is contained in:
parent
ab1c5be7d6
commit
be8fd83d0d
43
composer.go
43
composer.go
|
@ -1,5 +1,8 @@
|
||||||
package tusd
|
package tusd
|
||||||
|
|
||||||
|
// StoreComposer represents a composable data store. It consists of the core
|
||||||
|
// data store and optional extensions. Please consult the package's overview
|
||||||
|
// for a more detailed introduction in how to use this structure.
|
||||||
type StoreComposer struct {
|
type StoreComposer struct {
|
||||||
Core DataStore
|
Core DataStore
|
||||||
|
|
||||||
|
@ -15,11 +18,15 @@ type StoreComposer struct {
|
||||||
Concater ConcaterDataStore
|
Concater ConcaterDataStore
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewStoreComposer creates a new and empty store composer.
|
||||||
func NewStoreComposer() *StoreComposer {
|
func NewStoreComposer() *StoreComposer {
|
||||||
return &StoreComposer{}
|
return &StoreComposer{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewStoreComposerFromDataStore(store DataStore) *StoreComposer {
|
// newStoreComposerFromDataStore creates a new store composer and attempts to
|
||||||
|
// extract the extensions for the provided store. This is intended to be used
|
||||||
|
// for transitioning from data stores to composers.
|
||||||
|
func newStoreComposerFromDataStore(store DataStore) *StoreComposer {
|
||||||
composer := NewStoreComposer()
|
composer := NewStoreComposer()
|
||||||
composer.UseCore(store)
|
composer.UseCore(store)
|
||||||
|
|
||||||
|
@ -42,6 +49,8 @@ func NewStoreComposerFromDataStore(store DataStore) *StoreComposer {
|
||||||
return composer
|
return composer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Capabilities returns a string representing the provided extensions in a
|
||||||
|
// human-readable format meant for debugging.
|
||||||
func (store *StoreComposer) Capabilities() string {
|
func (store *StoreComposer) Capabilities() string {
|
||||||
str := "Core: "
|
str := "Core: "
|
||||||
|
|
||||||
|
@ -85,27 +94,29 @@ func (store *StoreComposer) Capabilities() string {
|
||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UseCore will set the used core data store. If the argument is nil, the
|
||||||
|
// property will be unset.
|
||||||
func (store *StoreComposer) UseCore(core DataStore) {
|
func (store *StoreComposer) UseCore(core DataStore) {
|
||||||
store.Core = core
|
store.Core = core
|
||||||
}
|
}
|
||||||
|
|
||||||
func (store *StoreComposer) UseTerminater(x TerminaterDataStore) {
|
func (store *StoreComposer) UseTerminater(ext TerminaterDataStore) {
|
||||||
store.UsesTerminater = x != nil
|
store.UsesTerminater = ext != nil
|
||||||
store.Terminater = x
|
store.Terminater = ext
|
||||||
}
|
}
|
||||||
func (store *StoreComposer) UseFinisher(x FinisherDataStore) {
|
func (store *StoreComposer) UseFinisher(ext FinisherDataStore) {
|
||||||
store.UsesFinisher = x != nil
|
store.UsesFinisher = ext != nil
|
||||||
store.Finisher = x
|
store.Finisher = ext
|
||||||
}
|
}
|
||||||
func (store *StoreComposer) UseLocker(x LockerDataStore) {
|
func (store *StoreComposer) UseLocker(ext LockerDataStore) {
|
||||||
store.UsesLocker = x != nil
|
store.UsesLocker = ext != nil
|
||||||
store.Locker = x
|
store.Locker = ext
|
||||||
}
|
}
|
||||||
func (store *StoreComposer) UseGetReader(x GetReaderDataStore) {
|
func (store *StoreComposer) UseGetReader(ext GetReaderDataStore) {
|
||||||
store.UsesGetReader = x != nil
|
store.UsesGetReader = ext != nil
|
||||||
store.GetReader = x
|
store.GetReader = ext
|
||||||
}
|
}
|
||||||
func (store *StoreComposer) UseConcater(x ConcaterDataStore) {
|
func (store *StoreComposer) UseConcater(ext ConcaterDataStore) {
|
||||||
store.UsesConcater = x != nil
|
store.UsesConcater = ext != nil
|
||||||
store.Concater = x
|
store.Concater = ext
|
||||||
}
|
}
|
||||||
|
|
20
composer.mgo
20
composer.mgo
|
@ -1,8 +1,9 @@
|
||||||
package tusd
|
package tusd
|
||||||
|
|
||||||
#define USE_FUNC(TYPE) func (store *StoreComposer) Use ## TYPE(x TYPE ## DataStore) { \
|
#define USE_FUNC(TYPE) \
|
||||||
store.Uses ## TYPE = x != nil; \
|
func (store *StoreComposer) Use ## TYPE(ext TYPE ## DataStore) { \
|
||||||
store.TYPE = x; \
|
store.Uses ## TYPE = ext != nil; \
|
||||||
|
store.TYPE = ext; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define USE_FIELD(TYPE) Uses ## TYPE bool; \
|
#define USE_FIELD(TYPE) Uses ## TYPE bool; \
|
||||||
|
@ -19,6 +20,9 @@ if store.Uses ## TYPE { \
|
||||||
str += "✗" \
|
str += "✗" \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StoreComposer represents a composable data store. It consists of the core
|
||||||
|
// data store and optional extensions. Please consult the package's overview
|
||||||
|
// for a more detailed introduction in how to use this structure.
|
||||||
type StoreComposer struct {
|
type StoreComposer struct {
|
||||||
Core DataStore
|
Core DataStore
|
||||||
|
|
||||||
|
@ -29,11 +33,15 @@ type StoreComposer struct {
|
||||||
USE_FIELD(Concater)
|
USE_FIELD(Concater)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewStoreComposer creates a new and empty store composer.
|
||||||
func NewStoreComposer() *StoreComposer {
|
func NewStoreComposer() *StoreComposer {
|
||||||
return &StoreComposer{}
|
return &StoreComposer{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewStoreComposerFromDataStore(store DataStore) *StoreComposer {
|
// newStoreComposerFromDataStore creates a new store composer and attempts to
|
||||||
|
// extract the extensions for the provided store. This is intended to be used
|
||||||
|
// for transitioning from data stores to composers.
|
||||||
|
func newStoreComposerFromDataStore(store DataStore) *StoreComposer {
|
||||||
composer := NewStoreComposer()
|
composer := NewStoreComposer()
|
||||||
composer.UseCore(store)
|
composer.UseCore(store)
|
||||||
|
|
||||||
|
@ -46,6 +54,8 @@ func NewStoreComposerFromDataStore(store DataStore) *StoreComposer {
|
||||||
return composer
|
return composer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Capabilities returns a string representing the provided extensions in a
|
||||||
|
// human-readable format meant for debugging.
|
||||||
func (store *StoreComposer) Capabilities() string {
|
func (store *StoreComposer) Capabilities() string {
|
||||||
str := "Core: "
|
str := "Core: "
|
||||||
|
|
||||||
|
@ -64,6 +74,8 @@ func (store *StoreComposer) Capabilities() string {
|
||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UseCore will set the used core data store. If the argument is nil, the
|
||||||
|
// property will be unset.
|
||||||
func (store *StoreComposer) UseCore(core DataStore) {
|
func (store *StoreComposer) UseCore(core DataStore) {
|
||||||
store.Core = core
|
store.Core = core
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ func (config *Config) validate() error {
|
||||||
config.isAbs = uri.IsAbs()
|
config.isAbs = uri.IsAbs()
|
||||||
|
|
||||||
if config.StoreComposer == nil {
|
if config.StoreComposer == nil {
|
||||||
config.StoreComposer = NewStoreComposerFromDataStore(config.DataStore)
|
config.StoreComposer = newStoreComposerFromDataStore(config.DataStore)
|
||||||
} else if config.DataStore != nil {
|
} else if config.DataStore != nil {
|
||||||
// TODO: consider returning an error
|
// TODO: consider returning an error
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,7 @@ func New(client *consul.Client) *ConsulLocker {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UseIn adds this locker to the passed composer.
|
||||||
func (locker *ConsulLocker) UseIn(composer *tusd.StoreComposer) {
|
func (locker *ConsulLocker) UseIn(composer *tusd.StoreComposer) {
|
||||||
composer.UseLocker(locker)
|
composer.UseLocker(locker)
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,8 @@ func New(path string) FileStore {
|
||||||
return FileStore{path}
|
return FileStore{path}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UseIn sets this store as the core data store in the passed composer and adds
|
||||||
|
// all possible extension to it.
|
||||||
func (store FileStore) UseIn(composer *tusd.StoreComposer) {
|
func (store FileStore) UseIn(composer *tusd.StoreComposer) {
|
||||||
composer.UseCore(store)
|
composer.UseCore(store)
|
||||||
composer.UseGetReader(store)
|
composer.UseGetReader(store)
|
||||||
|
|
|
@ -39,6 +39,7 @@ func New() *MemoryLocker {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UseIn adds this locker to the passed composer.
|
||||||
func (locker *MemoryLocker) UseIn(composer *tusd.StoreComposer) {
|
func (locker *MemoryLocker) UseIn(composer *tusd.StoreComposer) {
|
||||||
composer.UseLocker(locker)
|
composer.UseLocker(locker)
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,6 +131,8 @@ func New(bucket string, service s3iface.S3API) S3Store {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UseIn sets this store as the core data store in the passed composer and adds
|
||||||
|
// all possible extension to it.
|
||||||
func (store S3Store) UseIn(composer *tusd.StoreComposer) {
|
func (store S3Store) UseIn(composer *tusd.StoreComposer) {
|
||||||
composer.UseCore(store)
|
composer.UseCore(store)
|
||||||
composer.UseTerminater(store)
|
composer.UseTerminater(store)
|
||||||
|
|
Loading…
Reference in New Issue