Skip to main content

gapirs_common/
errors.rs

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}