Module: Fusion::CLI::Decoder
Constant Summary collapse
- ENVELOPE_SHAPES =
{ array: "[0, _] or [1, _]", object: '{"value": _} or {"error": _}', }.freeze
Instance Method Summary collapse
-
#decode(text, mode:) ⇒ Object
String -> WirePair Doesn’t support mode ‘:unix`.
Instance Method Details
#decode(text, mode:) ⇒ Object
String -> WirePair Doesn’t support mode ‘:unix`
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/fusion/cli/decoder.rb', line 20 def decode(text, mode:) case mode when :bang decode_bang(text) when :array decode_envelope(text, mode) do |raw| next unless raw.is_a?(Array) && raw.length == 2 && raw[0].is_a?(Integer) # The tag must be exactly the integer 0 or 1 (no 0.0 — Fusion equality is exact). [raw[0], raw[1]] if raw[0] == 0 || raw[0] == 1 end when :object decode_envelope(text, mode) do |raw| next unless raw.is_a?(Hash) && raw.size == 1 if raw.key?("value") then [0, raw["value"]] elsif raw.key?("error") then [1, raw["error"]] end end else raise Unreachable, "Unknown input mode #{mode}" end end |