gcs_rsync/gcp/oauth2/
mod.rs1use 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>;