add system config type
This commit is contained in:
parent
01933df053
commit
4eb3a9d2a7
81
internal/config/system.go
Normal file
81
internal/config/system.go
Normal file
@ -0,0 +1,81 @@
|
||||
// Copyright 2024 Matthew Rich <matthewrich.conf@gmail.com>. All rights reserved.
|
||||
|
||||
package config
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/url"
|
||||
"fmt"
|
||||
"decl/internal/data"
|
||||
"decl/internal/folio"
|
||||
"runtime"
|
||||
)
|
||||
|
||||
// Collects facts about the system
|
||||
|
||||
var (
|
||||
buildValues = map[string]any{
|
||||
"GOOS": runtime.GOOS,
|
||||
"GOARCH": runtime.GOARCH,
|
||||
}
|
||||
)
|
||||
|
||||
func init() {
|
||||
folio.DocumentRegistry.ConfigurationTypes.Register([]string{"system"}, func(u *url.URL) data.Configuration {
|
||||
s := NewSystem()
|
||||
return s
|
||||
})
|
||||
}
|
||||
|
||||
type System Generic[any]
|
||||
|
||||
func NewSystem() *System {
|
||||
s := make(System)
|
||||
for k, v := range buildValues {
|
||||
s[k] = v
|
||||
}
|
||||
return &s
|
||||
}
|
||||
|
||||
func (s *System) URI() string {
|
||||
return fmt.Sprintf("%s://%s", s.Type(), "")
|
||||
}
|
||||
|
||||
func (s *System) SetURI(uri string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *System) SetParsedURI(uri *url.URL) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *System) Clone() data.Configuration {
|
||||
jsonSystem, _ := json.Marshal(s)
|
||||
clone := NewSystem()
|
||||
if unmarshalErr := json.Unmarshal(jsonSystem, clone); unmarshalErr != nil {
|
||||
panic(unmarshalErr)
|
||||
}
|
||||
return clone
|
||||
}
|
||||
|
||||
func (s *System) Has(key string) (ok bool) {
|
||||
_, ok = (*s)[key]
|
||||
return
|
||||
}
|
||||
|
||||
func (s *System) Type() string {
|
||||
return "system"
|
||||
}
|
||||
|
||||
func (s *System) Read(context.Context) ([]byte, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (s *System) GetValue(name string) (result any, err error) {
|
||||
var ok bool
|
||||
if result, ok = (*s)[name]; !ok {
|
||||
err = ErrUnknownConfigurationKey
|
||||
}
|
||||
return
|
||||
}
|
20
internal/config/system_test.go
Normal file
20
internal/config/system_test.go
Normal file
@ -0,0 +1,20 @@
|
||||
// Copyright 2024 Matthew Rich <matthewrich.conf@gmail.com>. All rights reserved.
|
||||
|
||||
package config
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestNewSystemConfig(t *testing.T) {
|
||||
s := NewSystem()
|
||||
assert.NotNil(t, s)
|
||||
}
|
||||
|
||||
func TestSystemConfig(t *testing.T) {
|
||||
s := NewSystem()
|
||||
assert.NotNil(t, s)
|
||||
|
||||
assert.True(t, s.Has("GOARCH"))
|
||||
}
|
Loading…
Reference in New Issue
Block a user