(import isal.igzip [compress :as gzip]) (import isal.isal_zlib [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))