From c094ed7dfb3e8acb70a5313550c6aa309df655c4 Mon Sep 17 00:00:00 2001 From: Karchnu Date: Sun, 29 Nov 2020 01:08:18 +0100 Subject: [PATCH] cq: loop over STDIN, seems working. --- src/cq.cr | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/cq.cr b/src/cq.cr index e3d127f..da3c4f1 100644 --- a/src/cq.cr +++ b/src/cq.cr @@ -6,13 +6,6 @@ if ARGV.size >= 1 && ARGV[0] == "-h" exit 0 end -data = CBOR::Decoder.new(STDIN).read_value - -if ARGV.size == 0 - pp data - exit 0 -end - def dig(data, attribute : String) case data when Hash @@ -25,10 +18,25 @@ def dig(data, attribute : String) end end -ARGV.each do |attribute| - current_data = data.clone - attribute.split(/[.]/).each do |attr| - current_data = dig current_data, attr +buffer = Bytes.new 1_000_000 # 1 MB + +until STDIN.read(buffer) == 0 + decoder = CBOR::Decoder.new(buffer) + while data = decoder.read_value + break if data == 0 + + if ARGV.size == 0 + pp data + next + end + + ARGV.each do |attribute| + current_data = data.clone + attribute.split(/[.]/).each do |attr| + current_data = dig current_data, attr + end + pp current_data + end end - pp current_data + buffer = Bytes.new 1_000_000 # 1 MB end