tests: adds sav file for pep8analysis_web
[nit.git] / lib / serialization.nit
index cd80d3d..ae971c9 100644 (file)
@@ -28,13 +28,20 @@ interface Serializer
        # Serialize an attribute, used by `Serializable::core_serialize_to`
        fun serialize_attribute(name: String, value: nullable Object)
        do
        # Serialize an attribute, used by `Serializable::core_serialize_to`
        fun serialize_attribute(name: String, value: nullable Object)
        do
+               if not try_to_serialize(value) then
+                       warn("argument {value.class_name}::{name} is not serializable.")
+               end
+       end
+
+       # Serialize `value` is possie, i.e. it is `Serializable` or `null`
+       fun try_to_serialize(value: nullable Object): Bool
+       do
                if value isa Serializable then
                        value.serialize_to_or_delay(self)
                else if value == null then
                        serialize value
                if value isa Serializable then
                        value.serialize_to_or_delay(self)
                else if value == null then
                        serialize value
-               else
-                       warn("argument {value.class_name}::{name} is not serializable.")
-               end
+               else return false
+               return true
        end
 
        # Warn of problems and potential errors (such as if an attribute
        end
 
        # Warn of problems and potential errors (such as if an attribute
@@ -42,6 +49,25 @@ interface Serializer
        fun warn(msg: String) do print "Serialization warning: {msg}"
 end
 
        fun warn(msg: String) do print "Serialization warning: {msg}"
 end
 
+# Abstract deserialization service
+#
+# After initialization of one of its sub-classes, call `deserialize`
+interface Deserializer
+       # Main method of this class, returns a Nit object
+       fun deserialize: nullable Object is abstract
+
+       # Internal method to be implemented by sub-classes
+       fun deserialize_attribute(name: String): nullable Object is abstract
+
+       # Internal method called by objects in creation,
+       # to be implemented by sub-classes
+       fun notify_of_creation(new_object: Object) is abstract
+
+       # Mainly generated method to return the next instance of the givent
+       # class by name
+       fun deserialize_class(class_name: String): Object do abort
+end
+
 # Instances of this class can be passed to `Serializer::serialize`
 interface Serializable
        # Full or true serialization
 # Instances of this class can be passed to `Serializer::serialize`
 interface Serializable
        # Full or true serialization
@@ -69,3 +95,4 @@ redef class Int super DirectSerializable end
 redef class Float super DirectSerializable end
 redef class NativeString super DirectSerializable end
 redef class String super DirectSerializable end
 redef class Float super DirectSerializable end
 redef class NativeString super DirectSerializable end
 redef class String super DirectSerializable end
+redef class Array[E] super Serializable end