collect: init
This commit is contained in:
@@ -17,5 +17,6 @@
|
||||
overrideExisting = import ./src/overrideExisting.nix lib;
|
||||
findFirstIndex = import ./src/findFirstIndex.nix lib;
|
||||
filterAttrs = import ./src/filterAttrs.nix lib;
|
||||
collect = import ./src/collect.nix lib;
|
||||
};
|
||||
}
|
||||
|
||||
85
src/collect.nix
Normal file
85
src/collect.nix
Normal file
@@ -0,0 +1,85 @@
|
||||
lib:
|
||||
with lib;
|
||||
let
|
||||
collectOld =
|
||||
pred: attrs:
|
||||
if pred attrs then
|
||||
[ attrs ]
|
||||
else if isAttrs attrs then
|
||||
concatMap (collect pred) (attrValues attrs)
|
||||
else
|
||||
[ ];
|
||||
|
||||
collectNew =
|
||||
pred: attrs:
|
||||
if pred attrs then [ attrs ] else
|
||||
catAttrs "result" (genericClosure {
|
||||
startSet = [{ key = "<root>"; value = attrs; }];
|
||||
operator = item:
|
||||
if item ? result
|
||||
then [ ]
|
||||
else if isAttrs item.value
|
||||
# Note: this is an unwrapped mapAttrsToList
|
||||
then map (k: {
|
||||
key = "${item.key}/${k}";
|
||||
${if pred item.value.${k} then "result" else "value"} = item.value.${k};
|
||||
}) (attrNames item.value)
|
||||
else [ ];
|
||||
});
|
||||
|
||||
bigdata = {
|
||||
g.f.n.o.b.r = { };
|
||||
g.d.s.b.t.x.g = true;
|
||||
t.y.t.t.t.u.o.m.l.w.l.a.y.l = { };
|
||||
n.e.f.t.j.m = { };
|
||||
u.a.c.r.s = { };
|
||||
j.c.f.q.n.r.h.r.e.o.o.q.c = { };
|
||||
s.t.x.m.h.f.c.g.t.l.s.h.x = { };
|
||||
w.p.g.s.d.t = { };
|
||||
z.e.f.m.m.f.m.w.m.t.e = { };
|
||||
v.p.m.t.c.b.i.w.z.g.i.k.z.o = { };
|
||||
r.p.h = { };
|
||||
k.s.r.p.v.q.u.h.d.h.m.o.k = { };
|
||||
j.s.j.e.l.o.n.y.p.n.l.g.f.h = { };
|
||||
n.r.f.d.o.d.q.g.s.j.m.w.e.p = { };
|
||||
y.b.i.n.u = { };
|
||||
s.s.n.u.k.q.h = { };
|
||||
q.f.v.l.s.n.c.j.z.b.m.y.d = { };
|
||||
b.a.v = { };
|
||||
k.m.g.f = { };
|
||||
z.j.d.n.y.y.l.d.q.y.c.i.x = { };
|
||||
v.y.t.r.l.l.e.o.u.u.p.l.g.u = { };
|
||||
y.f.m.e.a.i.w = { };
|
||||
z.n.l = { };
|
||||
n.w.w = { };
|
||||
b.i.c.a.x.g.x.o.a.i.q = { };
|
||||
h.k.q.k.z.u.y.w = { };
|
||||
f.b.g.h.d.e.o.b = { };
|
||||
v.j.t.k.l.q.s = { };
|
||||
k.s.q.k.e.v.o.v.d.x.f.g.f = { };
|
||||
v.w.w.s.h.l.b.t.a.o.c.h.l = { };
|
||||
w.v.j.p = { };
|
||||
o.i.y.f.d.j = { };
|
||||
d.f.m.p.i.p.a.u.d.m.c.b.i.m = { };
|
||||
n.r.g.e.b.n.g.d = { };
|
||||
d.g.a.v.w.i.r.v.g.q.r.h.p.i = { };
|
||||
s.j.e.t.r.n.a = { };
|
||||
h.s.b = { };
|
||||
d.f.l.v.w = { };
|
||||
s.b.x = { };
|
||||
l.j.k.y.j.f.x.f.y = { };
|
||||
z.n.t.t.b.f.e.z.r.k.x.o.z.s = { };
|
||||
p.d.j.b.p.k.t.x = { };
|
||||
e.d.m.s.y.e.r.y.n = { };
|
||||
u.r.v.j.r.z.o.h.h.i.k = { };
|
||||
h.y.i.e.t.i.i.t = { };
|
||||
y.y.f.h.o.t.d.j.s.s.e.q = { };
|
||||
m.l.j.z.a.g.c.t.x = { };
|
||||
p.o.z.s.m.e.u.c.x = { };
|
||||
i.s.e.y = { };
|
||||
d.f.u.j.c.x.v.e.x.w.p.m.g = { };
|
||||
};
|
||||
in {
|
||||
old = collectOld (x: x ? a) bigdata;
|
||||
new = collectNew (x: x ? a) bigdata;
|
||||
}
|
||||
Reference in New Issue
Block a user