name
from the object open for deserializationThe static_type
restricts what kind of object can be deserialized.
Return the deserialized value or null on error, and set
deserialize_attribute_missing
to whether the attribute was missing.
Internal method to be implemented by the engines.
# Deserialize the attribute with `name` from the object open for deserialization
#
# The `static_type` restricts what kind of object can be deserialized.
#
# Return the deserialized value or null on error, and set
# `deserialize_attribute_missing` to whether the attribute was missing.
#
# Internal method to be implemented by the engines.
fun deserialize_attribute(name: String, static_type: nullable String): nullable Object is abstract
lib/serialization/serialization_core.nit:118,2--126,99
redef fun deserialize_attribute(name, static_type)
do
if path.is_empty then
# The was a parsing error or the root is not an object
if not root isa Error then
errors.add new Error("Deserialization Error: parsed JSON value is not an object.")
end
deserialize_attribute_missing = false
return null
end
var current = path.last
if not current.keys.has(name) then
# Let the generated code / caller of `deserialize_attribute` raise the missing attribute error
deserialize_attribute_missing = true
return null
end
var value = current[name]
attributes_path.add name
var res = convert_object(value, static_type)
attributes_path.pop
deserialize_attribute_missing = false
return res
end
lib/json/serialization_read.nit:53,2--80,4
redef fun deserialize_attribute(name, static_type)
do
if path.is_empty then
# The was a parsing error or the root is not an object
deserialize_attribute_missing = false
return null
end
var current = path.last
var serialized_value = null
var serialized_value_found = false
if current.keys.has(name) then
# Non-cached string
serialized_value = current[name]
serialized_value_found = true
else
# It may be cached, deserialize all keys until we find it
for key in current.keys.to_a do
if key isa Array[nullable Serializable] or key isa MsgPackExt then
var str = convert_object(key, "String")
if str isa String then
var value = current[key]
current.keys.remove key
current[str] = value
if str == name then
serialized_value = value
serialized_value_found = true
break
end
end
end
end
end
if not serialized_value_found then
# Let the generated code / caller of `deserialize_attribute` raise the missing attribute error
deserialize_attribute_missing = true
return null
end
attributes_path.add name
var res = convert_object(serialized_value, static_type)
attributes_path.pop
deserialize_attribute_missing = false
return res
end
lib/msgpack/serialization_read.nit:105,2--153,4