mirror of
https://github.com/safing/portbase
synced 2025-09-01 18:19:57 +00:00
47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package storage
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"sync"
|
|
)
|
|
|
|
// A Factory creates a new database of it's type.
|
|
type Factory func(name, location string) (Interface, error)
|
|
|
|
var (
|
|
storages map[string]Factory
|
|
storagesLock sync.Mutex
|
|
)
|
|
|
|
// Register registers a new storage type.
|
|
func Register(name string, factory Factory) error {
|
|
storagesLock.Lock()
|
|
defer storagesLock.Unlock()
|
|
|
|
_, ok := storages[name]
|
|
if ok {
|
|
return errors.New("factory for this type already exists")
|
|
}
|
|
|
|
storages[name] = factory
|
|
return nil
|
|
}
|
|
|
|
// CreateDatabase starts a new database with the given name and storageType at location.
|
|
func CreateDatabase(name, storageType, location string) (Interface, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
// StartDatabase starts a new database with the given name and storageType at location.
|
|
func StartDatabase(name, storageType, location string) (Interface, error) {
|
|
storagesLock.Lock()
|
|
defer storagesLock.Unlock()
|
|
|
|
factory, ok := storages[name]
|
|
if !ok {
|
|
return nil, fmt.Errorf("storage of this type (%s) does not exist", storageType)
|
|
}
|
|
|
|
return factory(name, location)
|
|
}
|