@@ -221,11 +221,11 @@ fn update_dict(parent: &mut Hash, child: &Hash) -> Result<()> {
221221 for ( key, val) in child. iter ( ) {
222222 match key {
223223 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 ( '_' ) => {
225225 if let Entry :: Occupied ( mut e) = parent. entry ( key. clone ( ) ) {
226226 match e. get_mut ( ) {
227227 el if el == val => {
228- println ! ( "In {key:? }: dublicate rule {val:?}, ignored" ) ;
228+ println ! ( "In {k }: dublicate rule {val:?}, ignored" ) ;
229229 }
230230 Yaml :: Array ( a) => match val {
231231 Yaml :: Array ( val) => {
@@ -235,7 +235,7 @@ fn update_dict(parent: &mut Hash, child: &Hash) -> Result<()> {
235235 if !a. contains ( val) {
236236 a. push ( val. clone ( ) ) ;
237237 } else {
238- println ! ( "In {key:? }: dublicate rule {val:?}, ignored" ) ;
238+ println ! ( "In {k }: dublicate rule {val:?}, ignored" ) ;
239239 }
240240 }
241241 _ => { }
@@ -250,18 +250,45 @@ fn update_dict(parent: &mut Hash, child: &Hash) -> Result<()> {
250250 a. insert ( 0 , s. clone ( ) ) ;
251251 e. insert ( Yaml :: Array ( a) ) ;
252252 } else {
253- println ! ( "In {key:? }: dublicate rule {s:?}, ignored" ) ;
253+ println ! ( "In {k }: dublicate rule {s:?}, ignored" ) ;
254254 }
255255 }
256256 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" ) ;
258258 }
259259 _ => { }
260260 } ,
261261 _ => { }
262262 }
263263 }
264264 }
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+ }
265292 _ => {
266293 parent. insert ( key. clone ( ) , val. clone ( ) ) ;
267294 }
0 commit comments