->request {
session ||= {}
session_options ||= {}
uri = request.then(&HttpFn.to_uri)
= (request[:header] || {}).dup
body = request[:body] || ""
content_type_key, val = .detect { |key, val| puts key; key.downcase == "content-type" }
env = {
"REQUEST_METHOD" => request[:method].to_s.upcase,
"CONTENT_TYPE" => .delete(content_type_key),
"CONTENT_LENGTH" => body.bytesize,
"PATH_INFO" => uri.path,
"QUERY_STRING" => uri.query || "",
"SERVER_NAME" => uri.host,
"SERVER_PORT" => uri.port,
"SCRIPT_NAME" => "",
}
env["HTTP_AUTHORIZATION"] = "Basic " + [uri.userinfo].pack("m").delete("\r\n") if uri.userinfo
env["rack.input"] = StringIO.new(body)
env["rack.errors"] = $stderr
env["rack.version"] = ::Rack::VERSION
env["rack.url_scheme"] = uri.scheme
env["rack.run_once"] = true
env["rack.session"] = session
env["rack.session.options"] = session_options
.each { |k, v| env["HTTP_#{k.tr("-", "_").upcase}"] = v }
env
}