use std::io;
use bytes::Bytes;
use quinn_proto::{ConnectError, ConnectionError, ReadError, ReadableError, VarInt, WriteError};
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum Error {
#[error("connection closed")]
ConnectionClosed,
#[error("connection is closing")]
ConnectionClosing,
#[error("invalid connection")]
InvalidConnection,
#[error("connect: {0}")]
Connect(#[from] ConnectError),
#[error("connection: {0}")]
Connection(#[from] ConnectionError),
#[error("write: {0}")]
Write(#[from] WriteError),
#[error("read: {0}")]
Read(#[from] ReadError),
#[error("readable: {0}")]
Readable(#[from] ReadableError),
#[error("stream is closed")]
StreamClosed,
#[error("peer stopped sending: code={}", .0.into_inner())]
StreamStopped(VarInt),
#[error("datagrams disabled locally")]
DatagramDisabled,
#[error("datagrams unsupported by peer")]
DatagramUnsupportedByPeer,
#[error("datagram too large for peer")]
DatagramTooLarge,
#[error("datagram buffer blocked")]
DatagramBlocked(Bytes),
#[error("io: {0}")]
Io(#[from] io::Error),
}