1use derive_more::{Display, Error, From};
2use hyper::{http, http::uri::InvalidUri, StatusCode};
3pub(crate) use std::error::Error as StdError;
4use std::num::NonZeroU16;
5pub(crate) use std::result::Result as StdResult;
6
7#[derive(Debug, Display, Error, From)]
8pub enum ApiError {
9 ApiCall(ApiCallError),
10}
11
12#[derive(Debug, Display, Error, From)]
13pub enum ApiCallError {
14 SerializeBody(#[error(source)] serde_json::Error),
15 GetUrl(GetUrlError),
16 Call(CallError),
17 GetToken(GetTokenError),
18 NoHub,
19 MultipleMediaUploads,
20 ResumableUpload(ResumableUploadError),
21}
22
23#[derive(Debug, Display, Error, From)]
24pub enum ResumableUploadError {
25 NoOrInvalidLocationHeader,
26 ParseSessionUrl(#[error(source)] url::ParseError),
27 ParseRangesHeader,
28 ResolveRange,
29 NoMediaBody,
30 NoUrl,
31 SeekPosition(#[error(source)] std::io::Error),
32 ParseRange(ParseRangeError),
33}
34#[derive(Debug, Display, Error, From)]
35pub enum ParseRangeError {
36 StartAndEndEmpty,
37}
38#[derive(Debug, Display, Error, From)]
39pub enum GetTokenError {
40 Auth(yup_oauth2::Error),
41 TokenExpired,
42 NoToken,
43}
44
45#[derive(Debug, Display, Error, From)]
46pub enum CallError {
47 ParseResponse(serde_json::Error),
48 WriteBodyToStream(#[error(source)] std::io::Error),
49 NonSuccessStatusCode(NonSuccessStatusCodeError),
50 InvalidRequest(#[error(source)] http::Error),
51 Request(#[error(source)] hyper_util::client::legacy::Error),
52 GetBody(#[error(source)] hyper::Error),
53 NoDownloadTarget,
54 DownloadSetInNotDownloadCall,
55}
56
57#[derive(Debug, Display, Error, From)]
58#[display("code:{} message:{}", status_code, message)]
59pub struct NonSuccessStatusCodeError {
60 status_code: StatusCode,
61 message: String,
62}
63
64#[derive(Debug, Display, Error, From)]
65pub enum GetUrlError {
66 GetBase,
67 GetPath,
68 NoMediaPath,
69 Parse(#[error(source)] url::ParseError),
70 Build(#[error(source)] http::Error),
71 FromStr(#[error(source)] InvalidUri),
72}