Reimplement fromstream/1 more compactly

This commit is contained in:
Muh Muhten authored and Nico Williams committed 2019-02-26 11:05:25 -06:00
1 parent fc6df0fdc1
commit 8c1e7175ec
1 file changed
+8 -20
+8 -20
View File
@@ -206,26 +206,14 @@ def ascii_upcase:
# Streaming utilities
def truncate_stream(stream):
. as $n | null | stream | . as $input | if (.[0]|length) > $n then setpath([0];$input[0][$n:]) else empty end;
def fromstream(i):
foreach i as $i (
[null, null];
if ($i | length) == 2 then
if ($i[0] | length) == 0 then .
else [ ( .[0] | setpath($i[0]; $i[1]) ), .[1] ]
end
elif ($i[0] | length) == 1 then [ null, .[0] ]
else .
end;
if ($i | length) == 1 then
if ($i[0] | length) == 1 then .[1]
else empty
end
elif ($i[0] | length) == 0 then $i[1]
else empty
end
);
def fromstream(i): {x: null, e: false} as $init |
# .x = object being built; .e = emit and reset state
foreach i as $i ($init
; if .e then $init else . end
| if $i|length == 2
then setpath(["e"]; $i[0]|length==0) | setpath(["x"]+$i[0]; $i[1])
else setpath(["e"]; $i[0]|length==1) end
; if .e then .x else empty end);
def tostream:
{string:true,number:true,boolean:true,null:true} as $leaf_types |
. as $dot |