aboutsummaryrefslogtreecommitdiff
path: root/lib/mergehash.pm6
blob: 6e84aa8eeeabd0ee5fd2c06989106ef3e948645e (plain)
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
use MONKEY;
augment class Hash {
    method merge (%b) {
        hashmerge self, %b;
    }
    sub hashmerge (%merge-into, %merge-source) {
        for %merge-source.keys -> $key {
            if %merge-into{$key}:exists {
                if %merge-source{$key} ~~ Hash {
                    hashmerge %merge-into{$key}, %merge-source{$key};
                }
                elsif %merge-source{$key} ~~ Positional {
                    my @a;
                    for %merge-into{$key}.list {
                        say $_;
                        @a.push: $_;
                    }
                    for %merge-source{$key}.list {
                        say $_;
                        @a.push: $_;
                    }
                    %merge-into{$key} = @a;
                }
                else {
                    %merge-into{$key} = %merge-source{$key};
                }
            }
            else {
                note 'source';
                %merge-into{$key} = %merge-source{$key};
            }
        }
        %merge-into;
    }
}