6
6
"gopkg.in/ini.v1"
7
7
"log"
8
8
"os"
9
- "strings"
9
+ "reflect"
10
+ "strings"
10
11
"time"
11
12
)
12
13
@@ -69,19 +70,7 @@ func MapTo() {
69
70
}
70
71
}
71
72
72
- func mapTo (section string , v interface {}) {
73
- err := Conf .Section (section ).MapTo (v )
74
- if err != nil {
75
- log .Fatalf ("Cfg.MapTo %s err: %v" , section , err )
76
- }
77
- }
78
73
79
- func reflectFrom (section string , v interface {}) {
80
- err := Conf .Section (section ).ReflectFrom (v )
81
- if err != nil {
82
- log .Fatalf ("Cfg.ReflectFrom %s err: %v" , section , err )
83
- }
84
- }
85
74
86
75
func Save () (err error ) {
87
76
for k , v := range sections {
@@ -95,6 +84,33 @@ func Save() (err error) {
95
84
return
96
85
}
97
86
87
+ func ProtectedFill (targetSettings interface {}, newSettings interface {}) {
88
+ s := reflect .TypeOf (targetSettings ).Elem ()
89
+ vt := reflect .ValueOf (targetSettings ).Elem ()
90
+ vn := reflect .ValueOf (newSettings ).Elem ()
91
+
92
+ // copy the values from new to target settings if it is not protected
93
+ for i := 0 ; i < s .NumField (); i ++ {
94
+ if s .Field (i ).Tag .Get ("protected" ) != "true" {
95
+ vt .Field (i ).Set (vn .Field (i ))
96
+ }
97
+ }
98
+ }
99
+
100
+ func mapTo (section string , v interface {}) {
101
+ err := Conf .Section (section ).MapTo (v )
102
+ if err != nil {
103
+ log .Fatalf ("Cfg.MapTo %s err: %v" , section , err )
104
+ }
105
+ }
106
+
107
+ func reflectFrom (section string , v interface {}) {
108
+ err := Conf .Section (section ).ReflectFrom (v )
109
+ if err != nil {
110
+ log .Fatalf ("Cfg.ReflectFrom %s err: %v" , section , err )
111
+ }
112
+ }
113
+
98
114
func parseEnv (ptr interface {}, prefix string ) {
99
115
err := env .ParseWithOptions (ptr , env.Options {
100
116
Prefix : EnvPrefix + prefix ,
@@ -105,3 +121,5 @@ func parseEnv(ptr interface{}, prefix string) {
105
121
log .Fatalf ("settings.parseEnv: %v\n " , err )
106
122
}
107
123
}
124
+
125
+
0 commit comments