-
Notifications
You must be signed in to change notification settings - Fork 2
/
configinterface.go
57 lines (47 loc) · 1.05 KB
/
configinterface.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
package dsv
import (
"encoding/json"
"io/ioutil"
"path"
)
//
// ConfigInterface for reader and writer for initializing the config from JSON.
//
type ConfigInterface interface {
GetConfigPath() string
SetConfigPath(dir string)
}
//
// ConfigOpen configuration file and initialize the attributes.
//
func ConfigOpen(rw interface{}, fcfg string) error {
cfg, e := ioutil.ReadFile(fcfg)
if nil != e {
return e
}
// Get directory where the config reside.
rwconfig := rw.(ConfigInterface)
rwconfig.SetConfigPath(path.Dir(fcfg))
return ConfigParse(rw, cfg)
}
//
// ConfigParse from JSON string.
//
func ConfigParse(rw interface{}, cfg []byte) error {
return json.Unmarshal(cfg, rw)
}
//
// ConfigCheckPath if no path in file, return the config path plus file name,
// otherwise leave it unchanged.
//
func ConfigCheckPath(comin ConfigInterface, file string) string {
dir := path.Dir(file)
if dir == "." {
cfgPath := comin.GetConfigPath()
if cfgPath != "" && cfgPath != "." {
return cfgPath + "/" + file
}
}
// nothing happen.
return file
}