use derive_more::{Display, Error, From};
use hyper::{http, http::uri::InvalidUri, StatusCode};
pub(crate) use std::error::Error as StdError;
use std::num::NonZeroU16;
pub(crate) use std::result::Result as StdResult;
#[derive(Debug, Display, Error, From)]
pub enum ApiError {
ApiCall(ApiCallError),
}
#[derive(Debug, Display, Error, From)]
pub enum ApiCallError {
SerializeBody(#[error(source)] serde_json::Error),
GetUrl(GetUrlError),
Call(CallError),
GetToken(GetTokenError),
NoHub,
MultipleMediaUploads,
ResumableUpload(ResumableUploadError),
}
#[derive(Debug, Display, Error, From)]
pub enum ResumableUploadError {
NoOrInvalidLocationHeader,
ParseSessionUrl(#[error(source)] url::ParseError),
ParseRangesHeader,
ResolveRange,
NoMediaBody,
NoUrl,
SeekPosition(#[error(source)] std::io::Error),
ParseRange(ParseRangeError),
}
#[derive(Debug, Display, Error, From)]
pub enum ParseRangeError {
StartAndEndEmpty,
}
#[derive(Debug, Display, Error, From)]
pub enum GetTokenError {
Auth(yup_oauth2::Error),
TokenExpired,
NoToken,
}
#[derive(Debug, Display, Error, From)]
pub enum CallError {
ParseResponse(serde_json::Error),
WriteBodyToStream(#[error(source)] std::io::Error),
NonSuccessStatusCode(NonSuccessStatusCodeError),
InvalidRequest(#[error(source)] http::Error),
Request(#[error(source)] hyper_util::client::legacy::Error),
GetBody(#[error(source)] hyper::Error),
NoDownloadTarget,
DownloadSetInNotDownloadCall,
}
#[derive(Debug, Display, Error, From)]
#[display("code:{} message:{}", status_code, message)]
pub struct NonSuccessStatusCodeError {
status_code: StatusCode,
message: String,
}
#[derive(Debug, Display, Error, From)]
pub enum GetUrlError {
GetBase,
GetPath,
NoMediaPath,
Parse(#[error(source)] url::ParseError),
Build(#[error(source)] http::Error),
FromStr(#[error(source)] InvalidUri),
}