23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/spurline/session/serializer.rb', line 23
def from_json(json, store:)
payload = JSON.parse(json)
unless payload.is_a?(Hash)
raise Spurline::SessionDeserializationError, "Session payload must be a JSON object."
end
version = payload.fetch("format_version")
unless version == FORMAT_VERSION
raise Spurline::SessionDeserializationError,
"Unsupported session format version: #{version.inspect}."
end
session_data = deserialize_session(payload.fetch("session"))
Session.restore(session_data, store: store)
rescue Spurline::SessionDeserializationError
raise
rescue JSON::ParserError, KeyError, TypeError, NoMethodError, ArgumentError, Spurline::ConfigurationError => e
raise Spurline::SessionDeserializationError, "Failed to deserialize session payload: #{e.message}"
end
|