mirror of
https://github.com/Luzifer/rconfig.git
synced 2024-12-21 03:31:19 +00:00
Add ParseAndValidate method
Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
31d785fa79
commit
fbcc119420
2 changed files with 37 additions and 0 deletions
18
config.go
18
config.go
|
@ -13,6 +13,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
|
validator "gopkg.in/validator.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -45,6 +46,15 @@ func Parse(config interface{}) error {
|
||||||
return parse(config, nil)
|
return parse(config, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ParseAndValidate works exactly like Parse but implements an additional run of
|
||||||
|
// the go-validator package on the configuration struct. Therefore additonal struct
|
||||||
|
// tags are supported like described in the readme file of the go-validator package:
|
||||||
|
//
|
||||||
|
// https://github.com/go-validator/validator/tree/v2#usage
|
||||||
|
func ParseAndValidate(config interface{}) error {
|
||||||
|
return parseAndValidate(config, nil)
|
||||||
|
}
|
||||||
|
|
||||||
// Args returns the non-flag command-line arguments.
|
// Args returns the non-flag command-line arguments.
|
||||||
func Args() []string {
|
func Args() []string {
|
||||||
return fs.Args()
|
return fs.Args()
|
||||||
|
@ -65,6 +75,14 @@ func SetVariableDefaults(defaults map[string]string) {
|
||||||
variableDefaults = defaults
|
variableDefaults = defaults
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseAndValidate(in interface{}, args []string) error {
|
||||||
|
if err := parse(in, args); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return validator.Validate(in)
|
||||||
|
}
|
||||||
|
|
||||||
func parse(in interface{}, args []string) error {
|
func parse(in interface{}, args []string) error {
|
||||||
if args == nil {
|
if args == nil {
|
||||||
args = os.Args
|
args = os.Args
|
||||||
|
|
|
@ -15,6 +15,10 @@ var _ = Describe("Testing general parsing", func() {
|
||||||
SadFlag string
|
SadFlag string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type tValidated struct {
|
||||||
|
Test string `flag:"test" default:"" validate:"nonzero"`
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
args []string
|
args []string
|
||||||
|
@ -106,4 +110,19 @@ var _ = Describe("Testing general parsing", func() {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Context("making use of the validator package", func() {
|
||||||
|
var cfgValidated tValidated
|
||||||
|
|
||||||
|
BeforeEach(func() {
|
||||||
|
cfgValidated = tValidated{}
|
||||||
|
args = []string{}
|
||||||
|
})
|
||||||
|
|
||||||
|
JustBeforeEach(func() {
|
||||||
|
err = parseAndValidate(&cfgValidated, args)
|
||||||
|
})
|
||||||
|
|
||||||
|
It("should have errored", func() { Expect(err).To(HaveOccurred()) })
|
||||||
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue