gcs_rsync/gcp/oauth2/
mod.rs

1use std::path::{Path, PathBuf};
2
3pub mod token;
4
5#[derive(Debug)]
6pub enum Error {
7    DeserializationError {
8        expected_type: String,
9        error: serde_json::Error,
10    },
11    EnvVarError {
12        key: String,
13        error: std::env::VarError,
14    },
15    IoError {
16        path: PathBuf,
17        message: String,
18        error: std::io::Error,
19    },
20    HttpError(reqwest::Error),
21    JWTError(jsonwebtoken::errors::Error),
22    MissingScope,
23    UnexpectedApiResponse {
24        expected_type: String,
25        json: serde_json::Value,
26    },
27}
28
29impl Error {
30    pub fn unexpected_api_response<T>(json: serde_json::Value) -> Error {
31        let expected_type = std::any::type_name::<T>().to_owned();
32        Error::UnexpectedApiResponse {
33            expected_type,
34            json,
35        }
36    }
37
38    pub fn io_error<T, U>(message: T, path: U, error: std::io::Error) -> Error
39    where
40        T: AsRef<str>,
41        U: AsRef<Path>,
42    {
43        let message = message.as_ref().to_owned();
44        let path = path.as_ref().to_owned();
45        Error::IoError {
46            message,
47            error,
48            path,
49        }
50    }
51
52    pub fn env_var_error(key: &str, error: std::env::VarError) -> Error {
53        Error::EnvVarError {
54            key: key.to_owned(),
55            error,
56        }
57    }
58
59    pub fn deserialization_error<T>(error: serde_json::Error) -> Error {
60        let expected_type = std::any::type_name::<T>().to_owned();
61        Error::DeserializationError {
62            expected_type,
63            error,
64        }
65    }
66}
67
68type TokenResult<T> = std::result::Result<T, Error>;