lib/json: regenerate json_lexer with private DFAStates
[nit.git] / lib / json_serialization.nit
index b4b1062..c06c3f4 100644 (file)
@@ -17,7 +17,7 @@
 module json_serialization
 
 import serialization
-import simple_json_reader
+import json::static
 
 class JsonSerializer
        super Serializer
@@ -146,7 +146,16 @@ class JsonDeserializer
                                return value
                        end
 
-                       # char? TODO
+                       # char?
+                       if kind == "char" then
+                               assert object.keys.has("__val")
+                               var val = object["__val"]
+                               assert val isa String
+
+                               if val.length != 1 then print "Error: expected a single char when deserializing '{val}'."
+                               
+                               return val.chars.first
+                       end
 
                        print "Malformed Json string: unexpected Json Object kind '{kind}'"
                        abort
@@ -181,17 +190,18 @@ redef class Bool
 end
 
 redef class Char
-       redef fun serialize_to_json(v) do v.stream.write("'{to_s}'")
+       redef fun serialize_to_json(v) do v.stream.write "\{\"__kind\": \"char\", \"__val\": \"{to_s.to_json_s}\"\}"
 end
 
 redef class String
        redef fun serialize_to_json(v) do v.stream.write("\"{to_json_s}\"")
 
        private fun to_json_s: String do return self.replace("\\", "\\\\").
-               replace("\"", "\\\"").replace("\b", "\\b").replace("/", "\\/").
+               replace("\"", "\\\"").replace("/", "\\/").
                replace("\n", "\\n").replace("\r", "\\r").replace("\t", "\\t")
                # FIXME add support for unicode char when supported by Nit strings
                # FIXME add support for \f! # .replace("\f", "\\f")
+               # FIXME add support for \b .replace("\b", "\\b")
 end
 
 redef class NativeString