set up config structure in etc
This commit is contained in:
		
							parent
							
								
									82723c8c80
								
							
						
					
					
						commit
						035090bb04
					
				
					 6 changed files with 41 additions and 11 deletions
				
			
		| 
						 | 
					@ -1,9 +1,16 @@
 | 
				
			||||||
package config
 | 
					package config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Cfg struct {
 | 
				
			||||||
 | 
						*BaseConfig
 | 
				
			||||||
 | 
						ConfigFormat string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// definitions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Config interface {
 | 
					type Config interface {
 | 
				
			||||||
	Name() string
 | 
						Name() string
 | 
				
			||||||
	Children() []Config
 | 
						Children() []Config
 | 
				
			||||||
	AddChild(Config)
 | 
						Add(Config)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type BaseConfig struct {
 | 
					type BaseConfig struct {
 | 
				
			||||||
| 
						 | 
					@ -19,11 +26,11 @@ func (cfg *BaseConfig) Children() []Config {
 | 
				
			||||||
	return cfg.children
 | 
						return cfg.children
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (cfg *BaseConfig) AddChild(child Config) {
 | 
					func (cfg *BaseConfig) Add(child Config) {
 | 
				
			||||||
	cfg.children = append(cfg.children, child)
 | 
						cfg.children = append(cfg.children, child)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func MakeConfig(name string) Config {
 | 
					func MakeBase(name string) *BaseConfig {
 | 
				
			||||||
	return &BaseConfig{name: name}
 | 
						return &BaseConfig{name: name}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,18 @@
 | 
				
			||||||
package etc
 | 
					package etc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import "git.sr.ht/~cco/go-scopes/config"
 | 
					import (
 | 
				
			||||||
 | 
						"git.sr.ht/~cco/go-scopes"
 | 
				
			||||||
 | 
						"git.sr.ht/~cco/go-scopes/config"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Config() config.Config {
 | 
					func Config() config.Config {
 | 
				
			||||||
	return config.MakeConfig("dummy")
 | 
						b := config.MakeBase
 | 
				
			||||||
 | 
						cfg := scopes.Cfg{
 | 
				
			||||||
 | 
							BaseConfig: b("dummy"),
 | 
				
			||||||
 | 
							AppType:    "standard",
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						cfg.Add(config.Cfg{b("config"), "etc"})
 | 
				
			||||||
 | 
						return &cfg
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,8 +10,8 @@ import (
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func main() {
 | 
					func main() {
 | 
				
			||||||
	fmt.Println(etc.Config().Name())
 | 
					 | 
				
			||||||
	fmt.Println(etc.Override()["name"])
 | 
						fmt.Println(etc.Override()["name"])
 | 
				
			||||||
	cfg := config.Setup(etc.Config())
 | 
						cfg := config.Setup(etc.Config())
 | 
				
			||||||
 | 
						fmt.Println(cfg.Name())
 | 
				
			||||||
	scopes.RunApp(cfg)
 | 
						scopes.RunApp(cfg)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,11 @@ package scopes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import "git.sr.ht/~cco/go-scopes/config"
 | 
					import "git.sr.ht/~cco/go-scopes/config"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Cfg struct {
 | 
				
			||||||
 | 
						*config.BaseConfig
 | 
				
			||||||
 | 
						AppType string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func RunApp(cfg config.Config) {
 | 
					func RunApp(cfg config.Config) {
 | 
				
			||||||
	_ = cfg
 | 
						_ = cfg
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,18 @@
 | 
				
			||||||
package etc
 | 
					package etc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import "git.sr.ht/~cco/go-scopes/config"
 | 
					import (
 | 
				
			||||||
 | 
						"git.sr.ht/~cco/go-scopes"
 | 
				
			||||||
 | 
						"git.sr.ht/~cco/go-scopes/config"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Config() config.Config {
 | 
					func Config() config.Config {
 | 
				
			||||||
	return config.MakeConfig("dummy")
 | 
						b := config.MakeBase
 | 
				
			||||||
 | 
						cfg := scopes.Cfg{
 | 
				
			||||||
 | 
							BaseConfig: b("dummy"),
 | 
				
			||||||
 | 
							AppType:    "standard",
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						cfg.Add(config.Cfg{b("config"), "etc"})
 | 
				
			||||||
 | 
						return &cfg
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// collect here the names of fields that may be overridden via
 | 
					// collect here the names of fields that may be overridden via
 | 
				
			||||||
| 
						 | 
					@ -12,8 +21,8 @@ const (
 | 
				
			||||||
	NAME = "name"
 | 
						NAME = "name"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// in a production scenario this should be put in separate file `settings.go`
 | 
					// in a production scenario this should be put in separate
 | 
				
			||||||
// that should not be stored in code repository.
 | 
					// file `settings.go` that should not be stored in code repository.
 | 
				
			||||||
func Override() map[string]string {
 | 
					func Override() map[string]string {
 | 
				
			||||||
	return map[string]string{
 | 
						return map[string]string{
 | 
				
			||||||
		NAME: "overridden",
 | 
							NAME: "overridden",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,8 +15,8 @@ func TestConfig(tb *tbase.T) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func ConfigTest(t *testing.T) {
 | 
					func ConfigTest(t *testing.T) {
 | 
				
			||||||
	t.AssertEqual(etc.Config().Name(), "dummy")
 | 
					 | 
				
			||||||
	t.AssertEqual(etc.Override()[etc.NAME], "overridden")
 | 
						t.AssertEqual(etc.Override()[etc.NAME], "overridden")
 | 
				
			||||||
	cfg := config.Setup(etc.Config())
 | 
						cfg := config.Setup(etc.Config())
 | 
				
			||||||
 | 
						t.AssertEqual(cfg.Name(), "dummy")
 | 
				
			||||||
	scopes.RunApp(cfg)
 | 
						scopes.RunApp(cfg)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue