diff --git a/go.mod b/go.mod index bae49d3..86ab7a5 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,6 @@ go 1.18 require ( github.com/iancoleman/strcase v0.3.0 - github.com/pelletier/go-toml v1.9.0 github.com/stretchr/testify v1.7.0 github.com/tidwall/gjson v1.7.5 gopkg.in/ini.v1 v1.62.0 diff --git a/go.sum b/go.sum index 71c71e0..ff705df 100644 --- a/go.sum +++ b/go.sum @@ -12,8 +12,6 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/pelletier/go-toml v1.9.0 h1:NOd0BRdOKpPf0SxkL3HxSQOG7rNh+4kl6PHcBPFs7Q0= -github.com/pelletier/go-toml v1.9.0/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= diff --git a/provider/toml/provider.go b/provider/toml/provider.go deleted file mode 100644 index 073aa8b..0000000 --- a/provider/toml/provider.go +++ /dev/null @@ -1,71 +0,0 @@ -package toml - -import ( - "context" - "fmt" - "strings" - - "github.com/pelletier/go-toml" - "gitoa.ru/go-4devs/config" - "gitoa.ru/go-4devs/config/value" -) - -const ( - Name = "toml" - Separator = "." -) - -var _ config.Provider = (*Provider)(nil) - -func NewFile(file string, opts ...Option) (*Provider, error) { - tree, err := toml.LoadFile(file) - if err != nil { - return nil, fmt.Errorf("toml: failed load file: %w", err) - } - - return configure(tree, opts...), nil -} - -type Option func(*Provider) - -func configure(tree *toml.Tree, opts ...Option) *Provider { - prov := &Provider{ - tree: tree, - key: func(s []string) string { - return strings.Join(s, Separator) - }, - } - - for _, opt := range opts { - opt(prov) - } - - return prov -} - -func New(data []byte, opts ...Option) (*Provider, error) { - tree, err := toml.LoadBytes(data) - if err != nil { - return nil, fmt.Errorf("toml failed load data: %w", err) - } - - return configure(tree, opts...), nil -} - -type Provider struct { - tree *toml.Tree - key func([]string) string - name string -} - -func (p *Provider) Name() string { - return p.name -} - -func (p *Provider) Value(ctx context.Context, path ...string) (config.Value, error) { - if k := p.key(path); p.tree.Has(k) { - return Value{Value: value.Value{Val: p.tree.Get(k)}}, nil - } - - return nil, config.ErrValueNotFound -} diff --git a/provider/toml/provider_test.go b/provider/toml/provider_test.go deleted file mode 100644 index 89c3abe..0000000 --- a/provider/toml/provider_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package toml_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - "gitoa.ru/go-4devs/config/provider/toml" - "gitoa.ru/go-4devs/config/test" -) - -func TestProvider(t *testing.T) { - t.Parallel() - - prov, err := toml.NewFile(test.FixturePath("config.toml")) - require.NoError(t, err) - - m := []int{} - - read := []test.Read{ - test.NewRead("192.168.1.1", "database.server"), - test.NewRead("TOML Example", "title"), - test.NewRead("10.0.0.1", "servers.alpha.ip"), - test.NewRead(true, "database.enabled"), - test.NewRead(5000, "database.connection_max"), - test.NewReadUnmarshal(&[]int{8001, 8001, 8002}, &m, "database", "ports"), - } - - test.Run(t, prov, read) -} diff --git a/provider/toml/value.go b/provider/toml/value.go deleted file mode 100644 index 7d2ab9d..0000000 --- a/provider/toml/value.go +++ /dev/null @@ -1,41 +0,0 @@ -package toml - -import ( - "encoding/json" - "fmt" - - "gitoa.ru/go-4devs/config" - "gitoa.ru/go-4devs/config/value" -) - -type Value struct { - value.Value -} - -func (s Value) Int() int { - v, _ := s.ParseInt() - - return v -} - -func (s Value) ParseInt() (int, error) { - v, err := s.ParseInt64() - if err != nil { - return 0, fmt.Errorf("toml failed parce int: %w", err) - } - - return int(v), nil -} - -func (s Value) Unmarshal(target interface{}) error { - b, err := json.Marshal(s.Raw()) - if err != nil { - return fmt.Errorf("%w: %w", config.ErrInvalidValue, err) - } - - if err := json.Unmarshal(b, target); err != nil { - return fmt.Errorf("%w: %w", config.ErrInvalidValue, err) - } - - return nil -} diff --git a/test/fixture/config.toml b/test/fixture/config.toml deleted file mode 100644 index 493429e..0000000 --- a/test/fixture/config.toml +++ /dev/null @@ -1,31 +0,0 @@ -title = "TOML Example" - -[owner] -name = "Tom Preston-Werner" -dob = 1979-05-27T07:32:00-08:00 # First class dates - -[database] -server = "192.168.1.1" -ports = [ 8001, 8001, 8002 ] -connection_max = 5000 -enabled = true - -[servers] - - # Indentation (tabs and/or spaces) is allowed but not required - [servers.alpha] - ip = "10.0.0.1" - dc = "eqdc10" - - [servers.beta] - ip = "10.0.0.2" - dc = "eqdc10" - -[clients] -data = [ ["gamma", "delta"], [1, 2] ] - -# Line breaks are OK when inside arrays -hosts = [ - "alpha", - "omega" -] \ No newline at end of file