use stac::Value;
use url::Url;
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum Error {
#[error("cannot download")]
CannotDownload(Value),
#[error(transparent)]
InvalidHeaderName(#[from] reqwest::header::InvalidHeaderName),
#[error(transparent)]
InvalidHeaderValue(#[from] reqwest::header::InvalidHeaderValue),
#[error(transparent)]
Io(#[from] std::io::Error),
#[error(transparent)]
TokioJoin(#[from] tokio::task::JoinError),
#[error(transparent)]
HttpInvalidMethod(#[from] http::method::InvalidMethod),
#[error(transparent)]
Reqwest(#[from] reqwest::Error),
#[error("not found: {0}")]
NotFound(Url),
#[error(transparent)]
TokioMpscSendDownloadMessageError(
#[from] tokio::sync::mpsc::error::SendError<crate::download::Message>,
),
#[error(transparent)]
SerdeJson(#[from] serde_json::Error),
#[error(transparent)]
Stac(#[from] stac::Error),
#[error(transparent)]
StacApi(#[from] stac_api::Error),
#[error(transparent)]
UrlParse(#[from] url::ParseError),
}