lib/serialization: adds a method to detect unserializable type
authorAlexis Laferrière <alexis.laf@xymus.net>
Sat, 1 Feb 2014 18:33:39 +0000 (13:33 -0500)
committerAlexis Laferrière <alexis.laf@xymus.net>
Fri, 7 Feb 2014 19:44:41 +0000 (14:44 -0500)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

lib/serialization.nit

index cd80d3d..f673ded 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
+               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
-               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