Added a /conditions/current endpoint with computed best-guess values for current conditions
All checks were successful
ci/woodpecker/push/build-image Pipeline was successful
All checks were successful
ci/woodpecker/push/build-image Pipeline was successful
This commit is contained in:
73
internal/application/units/registry.go
Normal file
73
internal/application/units/registry.go
Normal file
@@ -0,0 +1,73 @@
|
||||
package units
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Factory interface {
|
||||
System() string
|
||||
New() Converter
|
||||
}
|
||||
|
||||
type StaticFactory struct {
|
||||
UnitSystem string
|
||||
Converter Converter
|
||||
}
|
||||
|
||||
func (f StaticFactory) System() string {
|
||||
return f.UnitSystem
|
||||
}
|
||||
|
||||
func (f StaticFactory) New() Converter {
|
||||
return f.Converter
|
||||
}
|
||||
|
||||
type Registry struct {
|
||||
factories map[string]Factory
|
||||
}
|
||||
|
||||
func NewRegistry() *Registry {
|
||||
return &Registry{factories: map[string]Factory{}}
|
||||
}
|
||||
|
||||
func (r *Registry) Register(factory Factory) error {
|
||||
if r == nil {
|
||||
return fmt.Errorf("register unit factory: registry is nil")
|
||||
}
|
||||
if factory == nil {
|
||||
return fmt.Errorf("register unit factory: factory is nil")
|
||||
}
|
||||
system := normalize(factory.System())
|
||||
if system == "" {
|
||||
return fmt.Errorf("register unit factory: unit system is empty")
|
||||
}
|
||||
if _, exists := r.factories[system]; exists {
|
||||
return fmt.Errorf("register unit factory: system %q already registered", system)
|
||||
}
|
||||
if factory.New() == nil {
|
||||
return fmt.Errorf("register unit factory: factory returned nil converter for %q", system)
|
||||
}
|
||||
r.factories[system] = factory
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *Registry) Resolve(system string) (Converter, error) {
|
||||
if r == nil {
|
||||
return nil, fmt.Errorf("resolve unit converter: registry is nil")
|
||||
}
|
||||
key := normalize(system)
|
||||
factory, ok := r.factories[key]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("resolve unit converter: unsupported unit system %q", system)
|
||||
}
|
||||
converter := factory.New()
|
||||
if converter == nil {
|
||||
return nil, fmt.Errorf("resolve unit converter: factory for %q returned nil converter", key)
|
||||
}
|
||||
return converter, nil
|
||||
}
|
||||
|
||||
func normalize(system string) string {
|
||||
return strings.ToLower(strings.TrimSpace(system))
|
||||
}
|
||||
Reference in New Issue
Block a user