mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-27 07:26:45 +00:00
Config: Refactor version packages (#1887)
* Config: Move config versions to separate pacakges * Config: Move version tests to blackbox texts * Config: Protect registerVersion from overflow * Config: Protect against version already registered
This commit is contained in:
@@ -32,6 +32,7 @@ const UseLatestVersion = math.MaxUint16
|
||||
|
||||
var (
|
||||
errVersionIncompatible = errors.New("version does not implement ConfigVersion or ExchangeVersion")
|
||||
errAlreadyRegistered = errors.New("version is already registered")
|
||||
errModifyingExchange = errors.New("error modifying exchange config")
|
||||
errNoVersions = errors.New("error retrieving latest config version: No config versions are registered")
|
||||
errApplyingVersion = errors.New("error applying version")
|
||||
@@ -40,7 +41,6 @@ var (
|
||||
errConfigVersionUnavail = errors.New("version is higher than the latest available version")
|
||||
errConfigVersionNegative = errors.New("version is negative")
|
||||
errConfigVersionMax = errors.New("version is above max versions")
|
||||
errUpgrading = errors.New("error upgrading")
|
||||
)
|
||||
|
||||
// ConfigVersion is a version that affects the general configuration
|
||||
@@ -211,15 +211,28 @@ func exchangeDeploy(ctx context.Context, patch ExchangeVersion, method func(Exch
|
||||
}
|
||||
|
||||
// registerVersion takes instances of config versions and adds them to the registry
|
||||
func (m *manager) registerVersion(ver int, v any) {
|
||||
func (m *manager) registerVersion(ver uint16, v any) {
|
||||
m.m.Lock()
|
||||
defer m.m.Unlock()
|
||||
if ver >= len(m.versions) {
|
||||
m.versions = slices.Grow(m.versions, ver+1)[:ver+1]
|
||||
if int(ver) >= len(m.versions) {
|
||||
m.versions = slices.Grow(m.versions, int(ver+1))[:ver+1]
|
||||
}
|
||||
if m.versions[ver] != nil {
|
||||
panic(fmt.Errorf("%w: %d", errAlreadyRegistered, ver))
|
||||
}
|
||||
m.versions[ver] = v
|
||||
}
|
||||
|
||||
// Version returns a version registered by init or nil if nothing has been registered with that version number
|
||||
func (m *manager) Version(version uint16) any {
|
||||
m.m.RLock()
|
||||
defer m.m.RUnlock()
|
||||
if int(version) < len(m.versions) {
|
||||
return m.versions[version]
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// latest returns the highest version number
|
||||
func (m *manager) latest() (uint16, error) {
|
||||
m.m.RLock()
|
||||
|
||||
Reference in New Issue
Block a user