tusd/composer.go

69 lines
1.6 KiB
Go

package tusd
type StoreComposer struct {
Core DataStore
UsesTerminater bool
Terminater TerminaterDataStore
UsesFinisher bool
Finisher FinisherDataStore
UsesLocker bool
Locker LockerDataStore
UsesGetReader bool
GetReader GetReaderDataStore
UsesConcater bool
Concater ConcaterDataStore
}
func NewStoreComposer() *StoreComposer {
return &StoreComposer{}
}
func NewStoreComposerFromDataStore(store DataStore) *StoreComposer {
composer := NewStoreComposer()
composer.UseCore(store)
if mod, ok := store.(TerminaterDataStore); ok {
composer.UseTerminater(mod)
}
if mod, ok := store.(FinisherDataStore); ok {
composer.UseFinisher(mod)
}
if mod, ok := store.(LockerDataStore); ok {
composer.UseLocker(mod)
}
if mod, ok := store.(GetReaderDataStore); ok {
composer.UseGetReader(mod)
}
if mod, ok := store.(ConcaterDataStore); ok {
composer.UseConcater(mod)
}
return composer
}
func (store *StoreComposer) UseCore(core DataStore) {
store.Core = core
}
func (store *StoreComposer) UseTerminater(x TerminaterDataStore) {
store.UsesTerminater = x != nil
store.Terminater = x
}
func (store *StoreComposer) UseFinisher(x FinisherDataStore) {
store.UsesFinisher = x != nil
store.Finisher = x
}
func (store *StoreComposer) UseLocker(x LockerDataStore) {
store.UsesLocker = x != nil
store.Locker = x
}
func (store *StoreComposer) UseGetReader(x GetReaderDataStore) {
store.UsesGetReader = x != nil
store.GetReader = x
}
func (store *StoreComposer) UseConcater(x ConcaterDataStore) {
store.UsesConcater = x != nil
store.Concater = x
}