-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfs.go
65 lines (61 loc) · 1.34 KB
/
fs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package firebase
import (
"encoding/json"
"errors"
"github.com/spf13/afero"
"os"
"path/filepath"
"strings"
)
type customFs struct {
fs afero.Fs
}
func (f *customFs) UnMarshalFromDir(dirName string, data interface{}) error {
dir, err := f.fs.Open(dirName)
if err != nil {
return err
}
defer dir.Close()
fileInfoList, err := dir.Readdir(0)
if err != nil {
return err
}
var errs []error
for _, fileInfo := range fileInfoList {
if fileInfo.IsDir() {
continue
}
err = f.UnmarshalFromFile(filepath.Join(dirName, fileInfo.Name()), data)
if err != nil && err.Error() != "EOF"{
errs = append(errs, err)
}
}
if len(errs) != 0 {
sb := strings.Builder{}
for i := range errs {
sb.WriteString("\n\t" + errs[i].Error())
}
return errors.New(sb.String())
}
return nil
}
func (f *customFs) UnmarshalFromFile(fileName string, data interface{}) error {
file, err := f.fs.Open(fileName)
if err != nil {
return err
}
defer file.Close()
return json.NewDecoder(file).Decode(data)
}
func (f *customFs) WriteJsonToFile(data interface{}, filePath string) error {
f.fs.MkdirAll(filepath.Dir(filePath), 0744)
file, err := f.fs.OpenFile(filePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil {
return err
}
defer file.Close()
d := json.NewEncoder(file)
d.SetIndent("", "\t")
d.SetEscapeHTML(false)
return d.Encode(data)
}