Skip to content

Commit

Permalink
new api (#2)
Browse files Browse the repository at this point in the history
  • Loading branch information
cristaloleg authored Jul 25, 2020
1 parent 5ea4252 commit c6d30e0
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 0 deletions.
47 changes: 47 additions & 0 deletions aconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ const (
// Loader of user configuration.
type Loader struct {
config LoaderConfig
src interface{}
fields []*fieldData
flagSet *flag.FlagSet
}
Expand Down Expand Up @@ -54,6 +55,52 @@ func NewLoaderFor(cfg interface{}, config LoaderConfig) *Loader {
return l
}

// Loader creates a new Loader based on a config.
// Zero-value config is acceptable.
func LoaderFor(src interface{}) *Loader {
return &Loader{src: src}
}

func (l *Loader) SkipDefaults() *Loader {
l.config.SkipDefaults = true
return l
}

func (l *Loader) SkipFiles() *Loader {
l.config.SkipFile = true
return l
}

func (l *Loader) SkipEnvironment() *Loader {
l.config.SkipEnv = true
return l
}

func (l *Loader) SkipFlags() *Loader {
l.config.SkipFlag = true
return l
}

func (l *Loader) WithFiles(files []string) *Loader {
l.config.Files = files
return l
}

func (l *Loader) WithEnvPrefix(prefix string) *Loader {
l.config.EnvPrefix = prefix
return l
}

func (l *Loader) WithFlagPrefix(prefix string) *Loader {
l.config.FlagPrefix = prefix
return l
}

func (l *Loader) Build() *Loader {
l.preLoad(l.src)
return l
}

func (l *Loader) preLoad(cfg interface{}) {
fields := getFields(cfg)

Expand Down
24 changes: 24 additions & 0 deletions example_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,30 @@ type MyConfig struct {
}
}

func Example_NewApi() {
loader := aconfig.LoaderFor(&MyConfig{}).
SkipDefaults().SkipFiles().SkipEnvironment().SkipFlags().
WithFiles([]string{"/var/opt/myapp/config.json"}).
WithEnvPrefix("APP").
WithFlagPrefix("app").
Build()

var cfg MyConfig
if err := loader.Load(&cfg); err != nil {
log.Panic(err)
}

fmt.Printf("Port: %v\n", cfg.Port)
fmt.Printf("Auth.User: %q\n", cfg.Auth.User)
fmt.Printf("Auth.Pass: %q\n", cfg.Auth.Pass)

// Output:
//
// Port: 0
// Auth.User: ""
// Auth.Pass: ""
}

// Just load defaults from struct defenition.
//
func Example_Defaults() {
Expand Down

0 comments on commit c6d30e0

Please sign in to comment.