use crate::socket::BoxedSocketError;
#[derive(Debug, thiserror::Error)]
pub enum EstablishError {
#[error("invalid socket address")]
InvalidAddress,
#[error("socket error: {0}")]
Io(BoxedSocketError),
#[error("QUIC error: {0}")]
Quic(squiche::Error),
#[error("handshake failed")]
Handshake,
#[error("ALPN mismatch: expected h3")]
AlpnMismatch,
#[error("failed to initialize the HTTP/3 layer")]
H3Init,
}
#[derive(Debug, thiserror::Error)]
pub enum RequestError {
#[error("connection establishment failed: {0}")]
Establish(#[from] EstablishError),
#[error("connection closed")]
ConnectionClosed,
#[error("stream reset by peer (code {0:#x})")]
Reset(u64),
#[error("h3 error: {0}")]
H3(squiche::h3::Error),
#[error("request blocked: concurrent stream limit reached")]
StreamBlocked,
}