// Copyright 2024 Matthew Rich . 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 }