Skip to content

Commit 9139581

Browse files
authored
Merge pull request #7 from darklam/darklam/add-embedded-fs-support
Add ability to instantiate the json provider from fs interface
2 parents cf2fbbc + 16b40f7 commit 9139581

3 files changed

Lines changed: 48 additions & 1 deletion

File tree

providers/json.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@ package providers
33
import (
44
"errors"
55
"fmt"
6-
json "github.com/titanous/json5"
6+
"io"
7+
"io/fs"
78
"os"
9+
10+
json "github.com/titanous/json5"
811
)
912

1013
type JSONProvider struct {
@@ -27,6 +30,27 @@ func NewJSONProvider(filePath string) (*JSONProvider, error) {
2730
return &JSONProvider{parsedFile: parsed}, nil
2831
}
2932

33+
func NewJSONProviderFromFs(fs fs.FS, filePath string) (*JSONProvider, error) {
34+
file, err := fs.Open(filePath)
35+
if err != nil {
36+
return nil, err
37+
}
38+
39+
contents, err := io.ReadAll(file)
40+
if err != nil {
41+
return nil, err
42+
}
43+
44+
parsed := map[string]interface{}{}
45+
46+
err = json.Unmarshal(contents, &parsed)
47+
if err != nil {
48+
return nil, err
49+
}
50+
51+
return &JSONProvider{parsedFile: parsed}, nil
52+
}
53+
3054
func (jp JSONProvider) GetValue(fieldPath []string) (string, error) {
3155
var currentValue interface{} = jp.parsedFile
3256

providers/json_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package providers
22

33
import (
4+
"embed"
45
"errors"
56
"fmt"
67
"os"
@@ -81,3 +82,19 @@ func TestJSONProvider_GetValue(t *testing.T) {
8182
})
8283
}
8384
}
85+
86+
//go:embed test.config.json5
87+
var config embed.FS
88+
89+
func TestNewJSONProviderFromFs(t *testing.T) {
90+
jp, err := NewJSONProviderFromFs(config, "test.config.json5")
91+
assert.Nil(t, err)
92+
93+
value, err := jp.GetValue([]string{"some"})
94+
assert.Nil(t, err)
95+
assert.Equal(t, "value", value)
96+
97+
value, err = jp.GetValue([]string{"nested", "key"})
98+
assert.Nil(t, err)
99+
assert.Equal(t, "value", value)
100+
}

providers/test.config.json5

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
some: "value",
3+
nested: {
4+
key: "value",
5+
},
6+
}

0 commit comments

Comments
 (0)