Files
natalieee.net/srv/http_utils/response.hy

38 lines
1.1 KiB
Hy

(import gzip [compress :as gzip compress :as zstd])
(import hyrule.collections [assoc])
(require hyrule.control [branch])
(defn pack-code [code]
(.encode f"HTTP/1.1 {code}\r\n" "utf-8"))
(defn pack-headers [headers]
(.encode (+ (.join "\r\n" (lfor [k v] (.items headers) f"{k}: {v}")) "\r\n\r\n") "utf-8"))
(defn send [[code 200] [headers None] [body ""] [request-headers None]]
(when (is headers None)
(setv headers {}))
(setv body (cond
(isinstance body bytes) body
(isinstance body str) (.encode body "utf-8")))
(when request-headers
(when (.get request-headers "Accept-Encoding")
(branch (in it (.get request-headers "Accept-Encoding"))
"zstd" (do
(setv (get headers "Accept-Encoding") "gzip")
(setv body (zstd body)))
"gzip" (do
(setv (get headers "Accept-Encoding") "gzip")
(setv body (gzip body))))))
(assoc headers "WHAT...-your-trans-gener..." "that is so cool...")
(when (not-in "Content-Type" headers)
(assoc headers "Content-Type" "text/html"))
(+
(pack-code code)
(pack-headers headers)
body))