Module: Fusion::CLI::Serializer

Extended by:
Serializer
Included in:
Serializer
Defined in:
lib/fusion/cli/serializer.rb

Instance Method Summary collapse

Instance Method Details

#serialize(runtime_value, lenient: false) ⇒ Object

runtime value -> WirePair Only use “lenient: true” in the REPL!



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/fusion/cli/serializer.rb', line 14

def serialize(runtime_value, lenient: false)
  message = catch(:unserializable) do
    if runtime_value.is_a?(Interpreter::ErrorVal)
      data = convert(runtime_value.payload, lenient: lenient || runtime_value.internal_error?).to_json
      return WirePair.new(status: 1, data: data)
    else
      return WirePair.new(status: 0, data: convert(runtime_value, lenient: lenient).to_json)
    end
  end

  internal_error = Interpreter::ErrorVal.internal(
    kind: "serialization_error",
    location: "output",
    operation: "serializing result",
    input: runtime_value,
    message: message
  )

  serialize(internal_error, lenient: true)
end