remove toml provider
This commit is contained in:
1
go.mod
1
go.mod
@@ -4,7 +4,6 @@ go 1.18
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/iancoleman/strcase v0.3.0
|
github.com/iancoleman/strcase v0.3.0
|
||||||
github.com/pelletier/go-toml v1.9.0
|
|
||||||
github.com/stretchr/testify v1.7.0
|
github.com/stretchr/testify v1.7.0
|
||||||
github.com/tidwall/gjson v1.7.5
|
github.com/tidwall/gjson v1.7.5
|
||||||
gopkg.in/ini.v1 v1.62.0
|
gopkg.in/ini.v1 v1.62.0
|
||||||
|
|||||||
2
go.sum
2
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/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 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
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 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
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=
|
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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"
|
|
||||||
]
|
|
||||||
Reference in New Issue
Block a user