diff options
Diffstat (limited to 'guix-data-service/web/render.scm')
-rw-r--r-- | guix-data-service/web/render.scm | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/guix-data-service/web/render.scm b/guix-data-service/web/render.scm index 744c66c..fee5daf 100644 --- a/guix-data-service/web/render.scm +++ b/guix-data-service/web/render.scm @@ -139,30 +139,41 @@ #f))) (define* (render-html #:key sxml (extra-headers '()) - (code 200)) + (code 200) + stream?) (list (build-response #:code code #:headers (append extra-headers '((content-type . (text/html (charset . "utf-8"))) (vary . (accept))))) - (call-with-encoded-output-string - "utf-8" - (lambda (port) - (sxml->html sxml port))))) + (if stream? + (lambda (port) + (set-port-encoding! port "utf-8") + (setvbuf port 'block (expt 2 20)) + (sxml->html sxml port)) + (call-with-encoded-output-string + "utf-8" + (lambda (port) + (sxml->html sxml port)))))) (define* (render-json json #:key (extra-headers '()) - (code 200)) + (code 200) + stream?) (list (build-response #:code code #:headers (append extra-headers '((content-type . (application/json (charset . "utf-8"))) (vary . (accept))))) - (call-with-encoded-output-string - "utf-8" - (lambda (port) - (scm->json json port))))) + (if stream? + (lambda (port) + (setvbuf port 'block (expt 2 16)) + (scm->json json port)) + (call-with-encoded-output-string + "utf-8" + (lambda (port) + (scm->json json port)))))) (define* (render-text text #:key (extra-headers '()) (code 200)) |