add dasel provider
All checks were successful
Go Action / goaction (pull_request) Successful in 58s

This commit is contained in:
2025-12-27 16:10:10 +03:00
parent 1be25e67a3
commit e5637b2a49
11 changed files with 332 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
app {
name {
var = [
"name"
]
title = "config title"
timeout = "1m"
success = true
}
}
cfg {
duration = 1260000000000
enabled = true
type = "json"
}

View File

@@ -0,0 +1,28 @@
package hcl
import (
"fmt"
"github.com/tomwright/dasel/v3/parsing"
"github.com/tomwright/dasel/v3/parsing/hcl"
"gitoa.ru/go-4devs/config"
"gitoa.ru/go-4devs/config/provider/dasel"
)
const Name = "dasel:hcl"
func New(data []byte) (dasel.Provider, error) {
readOption := parsing.DefaultReaderOptions()
reader, err := hcl.HCL.NewReader(readOption)
if err != nil {
return dasel.Provider{}, fmt.Errorf("%w:%w", config.ErrInitFactory, err)
}
val, verr := reader.Read(data)
if verr != nil {
return dasel.Provider{}, fmt.Errorf("%w:%w", config.ErrInitFactory, verr)
}
return dasel.New(val, dasel.WithName(Name)), nil
}

View File

@@ -0,0 +1,35 @@
package hcl_test
import (
"embed"
"testing"
"time"
dhcl "gitoa.ru/go-4devs/config/provider/dasel/hcl"
"gitoa.ru/go-4devs/config/test"
"gitoa.ru/go-4devs/config/test/require"
)
//go:embed fixture/*
var fixture embed.FS
func TestProvider(t *testing.T) {
t.Parallel()
js, err := fixture.ReadFile("fixture/config.hcl")
require.NoError(t, err)
prov, derr := dhcl.New(js)
require.NoError(t, derr)
sl := []string{}
read := []test.Read{
test.NewRead("config title", "app", "name", "title"),
test.NewRead(time.Minute, "app.name.timeout"),
test.NewReadUnmarshal(&[]string{"name"}, &sl, "app.name.var"),
test.NewReadConfig("cfg"),
test.NewRead(true, "app", "name", "success"),
}
test.Run(t, prov, read)
}