#![cfg_attr(not(test), no_std)]
#![feature(impl_trait_projections)]
#![feature(async_fn_in_trait)]
#![allow(incomplete_features)]
#![doc = include_str!("../README.md")]
use core::{num::ParseIntError, str::Utf8Error};
use embedded_io_async::{ReadExactError, WriteAllError};
mod fmt;
pub mod client;
mod concat;
pub mod headers;
pub mod request;
pub mod response;
#[derive(Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum Error {
Dns,
Network(embedded_io::ErrorKind),
Codec,
InvalidUrl(nourl::Error),
#[cfg(feature = "embedded-tls")]
Tls(embedded_tls::TlsError),
BufferTooSmall,
AlreadySent,
IncorrectBodyWritten,
ConnectionClosed,
}
impl embedded_io::Error for Error {
fn kind(&self) -> embedded_io::ErrorKind {
embedded_io::ErrorKind::Other
}
}
impl From<embedded_io::ErrorKind> for Error {
fn from(e: embedded_io::ErrorKind) -> Error {
Error::Network(e)
}
}
impl<E: embedded_io::Error> From<ReadExactError<E>> for Error {
fn from(value: ReadExactError<E>) -> Self {
match value {
ReadExactError::UnexpectedEof => Error::ConnectionClosed,
ReadExactError::Other(e) => Error::Network(e.kind()),
}
}
}
impl<E> From<WriteAllError<E>> for Error
where
E: embedded_io::Error,
{
fn from(value: WriteAllError<E>) -> Self {
match value {
WriteAllError::WriteZero => Error::Network(embedded_io::ErrorKind::Other),
WriteAllError::Other(e) => Error::Network(e.kind()),
}
}
}
#[cfg(feature = "embedded-tls")]
impl From<embedded_tls::TlsError> for Error {
fn from(e: embedded_tls::TlsError) -> Error {
Error::Tls(e)
}
}
impl From<ParseIntError> for Error {
fn from(_: ParseIntError) -> Error {
Error::Codec
}
}
impl From<Utf8Error> for Error {
fn from(_: Utf8Error) -> Error {
Error::Codec
}
}
impl From<nourl::Error> for Error {
fn from(e: nourl::Error) -> Self {
Error::InvalidUrl(e)
}
}