@@ -221,11 +221,11 @@ fn update_dict(parent: &mut Hash, child: &Hash) -> Result<()> {
221
221
for ( key, val) in child. iter ( ) {
222
222
match key {
223
223
Yaml :: String ( key) if key == "_path" || key == "_include" => continue ,
224
- key if parent. contains_key ( key) => {
224
+ Yaml :: String ( k ) if parent. contains_key ( key) && k . starts_with ( '_' ) => {
225
225
if let Entry :: Occupied ( mut e) = parent. entry ( key. clone ( ) ) {
226
226
match e. get_mut ( ) {
227
227
el if el == val => {
228
- println ! ( "In {key:? }: dublicate rule {val:?}, ignored" ) ;
228
+ println ! ( "In {k }: dublicate rule {val:?}, ignored" ) ;
229
229
}
230
230
Yaml :: Array ( a) => match val {
231
231
Yaml :: Array ( val) => {
@@ -235,7 +235,7 @@ fn update_dict(parent: &mut Hash, child: &Hash) -> Result<()> {
235
235
if !a. contains ( val) {
236
236
a. push ( val. clone ( ) ) ;
237
237
} else {
238
- println ! ( "In {key:? }: dublicate rule {val:?}, ignored" ) ;
238
+ println ! ( "In {k }: dublicate rule {val:?}, ignored" ) ;
239
239
}
240
240
}
241
241
_ => { }
@@ -250,18 +250,45 @@ fn update_dict(parent: &mut Hash, child: &Hash) -> Result<()> {
250
250
a. insert ( 0 , s. clone ( ) ) ;
251
251
e. insert ( Yaml :: Array ( a) ) ;
252
252
} else {
253
- println ! ( "In {key:? }: dublicate rule {s:?}, ignored" ) ;
253
+ println ! ( "In {k }: dublicate rule {s:?}, ignored" ) ;
254
254
}
255
255
}
256
256
s2 if matches ! ( s2, Yaml :: String ( _) ) => {
257
- println ! ( "In {key:? }: conflicting rules {s:?} and {s2:?}, ignored" ) ;
257
+ println ! ( "In {k }: conflicting rules {s:?} and {s2:?}, ignored" ) ;
258
258
}
259
259
_ => { }
260
260
} ,
261
261
_ => { }
262
262
}
263
263
}
264
264
}
265
+ Yaml :: String ( _) if parent. contains_key ( key) => {
266
+ let mut i = 0 ;
267
+ loop {
268
+ let key = Yaml :: Array ( vec ! [ key. clone( ) , Yaml :: Integer ( i) ] ) ;
269
+ if !parent. contains_key ( & key) {
270
+ parent. insert ( key, val. clone ( ) ) ;
271
+ break ;
272
+ }
273
+ i += 1 ;
274
+ }
275
+ }
276
+ Yaml :: Array ( a)
277
+ if parent. contains_key ( key)
278
+ && matches ! ( a. as_slice( ) , [ Yaml :: String ( _) , Yaml :: Integer ( _) ] ) =>
279
+ {
280
+ if let [ k @ Yaml :: String ( _) , Yaml :: Integer ( _) ] = a. as_slice ( ) {
281
+ let mut i = 0 ;
282
+ loop {
283
+ let key = Yaml :: Array ( vec ! [ k. clone( ) , Yaml :: Integer ( i) ] ) ;
284
+ if !parent. contains_key ( & key) {
285
+ parent. insert ( key, val. clone ( ) ) ;
286
+ break ;
287
+ }
288
+ i += 1 ;
289
+ }
290
+ }
291
+ }
265
292
_ => {
266
293
parent. insert ( key. clone ( ) , val. clone ( ) ) ;
267
294
}
0 commit comments