Skip to content

Instantly share code, notes, and snippets.

@metaleap
Last active June 15, 2024 14:30
Show Gist options
  • Save metaleap/a6164276011b2a7d7c62b201f9d4652a to your computer and use it in GitHub Desktop.
Save metaleap/a6164276011b2a7d7c62b201f9d4652a to your computer and use it in GitHub Desktop.
;; repro: just `gerbil new` something and paste this into its main.ss
(import :std/io
:std/sugar
:std/text/json
:std/net/json-rpc
(only-in :std/net/httpd/handler read-request-headers read-request-body))
(export main)
(include "../manifest.ss")
(def +input-buffer-size+ (expt 2 13))
(def +output-buffer-size+ (expt 2 15))
(def (bytes->json b) ;; Don't intern JSON keys, using strings
(parameterize ((json-symbolic-keys #f)) (bytes->json-object b)))
(defstruct Transport ((reader : Reader) (writer : Writer)) final: #t)
(def (transport-stdio)
(make-Transport (Reader (make-raw-binary-input-port (current-input-port)))
(Writer (make-raw-binary-output-port (current-output-port)))))
(def (main . args)
(def transport (transport-stdio))
(using (transport :- Transport)
(def ibuf (open-buffered-reader (current-input-port) 22))
(def obuf (open-buffered-writer transport.writer +output-buffer-size+))
(while #t
(displayln "FOO1") (thread-yield!)
(let (headers (read-request-headers ibuf))
(displayln "FOO2") (thread-yield!)
(def json (bytes->json (read-request-body ibuf headers)))
(displayln "FOO3") (thread-yield!)
))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment