1#![warn(missing_docs)]
4
5use std::{convert::Infallible, io};
6
7use bytes::Bytes;
8use http_body_util::combinators::BoxBody;
9use hyper::{Response, Version};
10use prosa::core::error::ProcError;
11use thiserror::Error;
12
13const H2: &[u8] = b"h2";
14
15#[derive(Debug, Error)]
17pub enum HyperProcError {
18 #[error("Hyper IO error: {0}")]
20 Io(#[from] io::Error),
21 #[error("Hyper error: {0}")]
23 Hyper(#[from] hyper::Error),
24 #[error("Other error: {0}")]
26 Other(String),
27}
28
29impl ProcError for HyperProcError {
30 fn recoverable(&self) -> bool {
31 match self {
32 HyperProcError::Io(error) => error.recoverable(),
33 HyperProcError::Hyper(_) => true,
34 HyperProcError::Other(_) => true,
35 }
36 }
37}
38
39fn hyper_version_str(version: Version) -> &'static str {
41 match version {
42 hyper::Version::HTTP_11 => "HTTP/1.1",
43 hyper::Version::HTTP_2 => "HTTP/2",
44 hyper::Version::HTTP_3 => "HTTP/3",
45 _ => "Unknown",
46 }
47}
48
49#[derive(Debug)]
51pub enum HyperResp<M> {
52 SrvReq(String, M),
54 HttpResp(Response<BoxBody<Bytes, Infallible>>),
56 HttpErr(hyper::Error),
58}
59
60pub mod server;