4
4
"encoding/json"
5
5
"fmt"
6
6
"regexp"
7
+ "sort"
7
8
"strconv"
8
9
"strings"
9
- "time"
10
10
)
11
11
12
12
var (
20
20
stringOverrides = map [ConfigName ]string {}
21
21
)
22
22
23
- var BlockTime = 5 * time .Second
23
+ // var BlockTime = 5 * time.Second
24
24
25
25
// ConfigVals implement ConfigValues interface
26
26
type ConfigVals struct {
@@ -71,23 +71,40 @@ func (cv *ConfigVals) GetStringValue(name ConfigName) string {
71
71
}
72
72
73
73
func (cv * ConfigVals ) String () string {
74
+ // get all the keys
75
+ int64Keys := make ([]ConfigName , 0 , len (cv .int64values ))
76
+ for k := range cv .int64values {
77
+ int64Keys = append (int64Keys , k )
78
+ }
79
+ sort .Slice (int64Keys , func (i , j int ) bool {
80
+ return int64Keys [i ].String () < int64Keys [j ].String ()
81
+ })
82
+
83
+ boolKeys := make ([]ConfigName , 0 , len (cv .boolValues ))
84
+ for k := range cv .boolValues {
85
+ boolKeys = append (boolKeys , k )
86
+ }
87
+ sort .Slice (boolKeys , func (i , j int ) bool {
88
+ return boolKeys [i ].String () < boolKeys [j ].String ()
89
+ })
90
+
74
91
sb := strings.Builder {}
75
- // analyze-ignore(map-iteration)
76
- for k , v := range cv .int64values {
92
+ for _ , k := range int64Keys {
77
93
if overrideValue , ok := int64Overrides [k ]; ok {
78
94
sb .WriteString (fmt .Sprintf ("%s:%d\n " , k , overrideValue ))
79
95
continue
80
96
}
81
- sb .WriteString (fmt .Sprintf ("%s:%d\n " , k , v ))
97
+ sb .WriteString (fmt .Sprintf ("%s:%d\n " , k , cv . int64values [ k ] ))
82
98
}
83
- // analyze-ignore(map-iteration)
84
- for k , v := range cv . boolValues {
99
+
100
+ for _ , k := range boolKeys {
85
101
if overrideValue , ok := boolOverrides [k ]; ok {
86
102
sb .WriteString (fmt .Sprintf ("%s:%v\n " , k , overrideValue ))
87
103
continue
88
104
}
89
- sb .WriteString (fmt .Sprintf ("%s:%v\n " , k , v ))
105
+ sb .WriteString (fmt .Sprintf ("%s:%v\n " , k , cv . boolValues [ k ] ))
90
106
}
107
+
91
108
return sb .String ()
92
109
}
93
110
@@ -101,29 +118,70 @@ func (cv ConfigVals) MarshalJSON() ([]byte, error) {
101
118
result .Int64Values = make (map [string ]int64 )
102
119
result .BoolValues = make (map [string ]bool )
103
120
result .StringValues = make (map [string ]string )
104
- // analyze-ignore(map-iteration)
105
- for k , v := range cv .int64values {
106
- result .Int64Values [k .String ()] = v
121
+
122
+ // get and sort all keys including overrides
123
+ int64Keys := make ([]ConfigName , 0 , len (cv .int64values )+ len (int64Overrides ))
124
+ for k := range cv .int64values {
125
+ int64Keys = append (int64Keys , k )
126
+ }
127
+ for k := range int64Overrides {
128
+ if _ , exists := cv .int64values [k ]; ! exists {
129
+ int64Keys = append (int64Keys , k )
130
+ }
131
+ }
132
+ sort .Slice (int64Keys , func (i , j int ) bool {
133
+ return int64Keys [i ].String () < int64Keys [j ].String ()
134
+ })
135
+
136
+ // Same for bool and string keys
137
+ boolKeys := make ([]ConfigName , 0 , len (cv .boolValues )+ len (boolOverrides ))
138
+ for k := range cv .boolValues {
139
+ boolKeys = append (boolKeys , k )
140
+ }
141
+ for k := range boolOverrides {
142
+ if _ , exists := cv .boolValues [k ]; ! exists {
143
+ boolKeys = append (boolKeys , k )
144
+ }
107
145
}
108
- // analyze-ignore(map-iteration)
109
- for k , v := range int64Overrides {
110
- result .Int64Values [k .String ()] = v
146
+ sort .Slice (boolKeys , func (i , j int ) bool {
147
+ return boolKeys [i ].String () < boolKeys [j ].String ()
148
+ })
149
+
150
+ stringKeys := make ([]ConfigName , 0 , len (cv .stringValues )+ len (stringOverrides ))
151
+ for k := range cv .stringValues {
152
+ stringKeys = append (stringKeys , k )
111
153
}
112
- // analyze-ignore(map-iteration)
113
- for k , v := range cv .boolValues {
114
- result .BoolValues [k .String ()] = v
154
+ for k := range stringOverrides {
155
+ if _ , exists := cv .stringValues [k ]; ! exists {
156
+ stringKeys = append (stringKeys , k )
157
+ }
115
158
}
116
- // analyze-ignore(map-iteration)
117
- for k , v := range boolOverrides {
118
- result .BoolValues [k .String ()] = v
159
+ sort .Slice (stringKeys , func (i , j int ) bool {
160
+ return stringKeys [i ].String () < stringKeys [j ].String ()
161
+ })
162
+
163
+ for _ , k := range int64Keys {
164
+ if override , ok := int64Overrides [k ]; ok {
165
+ result .Int64Values [k .String ()] = override
166
+ } else {
167
+ result .Int64Values [k .String ()] = cv .int64values [k ]
168
+ }
119
169
}
120
- // analyze-ignore(map-iteration)
121
- for k , v := range cv .stringValues {
122
- result .StringValues [k .String ()] = v
170
+
171
+ for _ , k := range boolKeys {
172
+ if override , ok := boolOverrides [k ]; ok {
173
+ result .BoolValues [k .String ()] = override
174
+ } else {
175
+ result .BoolValues [k .String ()] = cv .boolValues [k ]
176
+ }
123
177
}
124
- // analyze-ignore(map-iteration)
125
- for k , v := range stringOverrides {
126
- result .StringValues [k .String ()] = v
178
+
179
+ for _ , k := range stringKeys {
180
+ if override , ok := stringOverrides [k ]; ok {
181
+ result .StringValues [k .String ()] = override
182
+ } else {
183
+ result .StringValues [k .String ()] = cv .stringValues [k ]
184
+ }
127
185
}
128
186
129
187
return json .MarshalIndent (result , "" , " " )
0 commit comments