Skip to content

Instantly share code, notes, and snippets.

@metaleap
Created June 15, 2024 12:30
Show Gist options
  • Save metaleap/eb64c9e6cd09d753cccb70ce560d49fd to your computer and use it in GitHub Desktop.
Save metaleap/eb64c9e6cd09d753cccb70ce560d49fd 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 transport.reader +input-buffer-size+))
(def obuf (open-buffered-writer transport.writer +output-buffer-size+))
(while #t
(let (headers (read-request-headers ibuf))
(def json (bytes->json (read-request-body ibuf headers)))
(displayln "NOOP")
)
)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment