nitcorn: HttpResponse::body is now an agnostic Writable
authorJean Privat <jean@pryen.org>
Thu, 31 May 2018 18:18:24 +0000 (14:18 -0400)
committerJean Privat <jean@pryen.org>
Thu, 31 May 2018 19:52:25 +0000 (15:52 -0400)
The only quirk is computing the length :(

Signed-off-by: Jean Privat <jean@pryen.org>

lib/nitcorn/http_response.nit

index b80fb7b..97276ca 100644 (file)
@@ -39,7 +39,7 @@ class HttpResponse
        var header = new HashMap[String, String]
 
        # Body of this response
-       var body = "" is writable
+       var body: Writable = "" is writable
 
        # Files appended after `body`
        var files = new Array[String]
@@ -50,7 +50,20 @@ class HttpResponse
                # Set the content length if not already set
                if not header.keys.has("Content-Length") then
                        # Size of the body
-                       var len = body.byte_length
+                       var len
+                       var body = self.body
+                       if body isa Text then
+                               len = body.byte_length
+                       else if body isa Bytes then
+                               len = body.length
+                       else
+                               # We need the length, but there is no length in a writable.
+                               # So just render it as a bytes then measure :/
+                               body = body.write_to_bytes
+                               len = body.length
+                               # Keep the body as bytes since we have it
+                               self.body = body
+                       end
 
                        # Size of included files
                        for path in files do