use std::convert::Infallible; use bytes::Bytes; use http::{Response, StatusCode, Version}; use http_body_util::{combinators::BoxBody, BodyExt, Full}; use crate::{error, git_bug::format::HtmlString}; pub(super) fn html_response>(html_text: T) -> Response> { html_response_status(html_text, StatusCode::OK) } pub(super) fn html_response_status>( html_text: T, status: StatusCode, ) -> Response> { html_response_status_content_type(html_text, status, "text/html") } pub(super) fn html_response_status_content_type>( html_text: T, status: StatusCode, content_type: &str, ) -> Response> { Response::builder() .status(status) .version(Version::HTTP_2) .header("Content-Type", format!("{}; charset=utf-8", content_type)) .header("x-content-type-options", "nosniff") .header("x-frame-options", "SAMEORIGIN") .body(full(html_text)) .expect("This will always build") } fn full>(chunk: T) -> BoxBody { Full::new(chunk.into()).boxed() } // FIXME: Not all errors should return `INTERNAL_SERVER_ERROR`. <2025-03-08> impl error::Error { pub fn into_response(self) -> Response> { html_response_status( format!( "

Internal server error.

Error: {}
", HtmlString::from(self.to_string()) ), StatusCode::INTERNAL_SERVER_ERROR, ) } }