cull_gmail/
credential.rs

1use std::{env, fs, path::PathBuf};
2
3use google_gmail1::yup_oauth2;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Serialize, Deserialize)]
7pub struct Installed {
8    pub(crate) client_id: String,
9    pub(crate) project_id: Option<String>,
10    pub(crate) auth_uri: String,
11    pub(crate) token_uri: String,
12    pub(crate) auth_provider_x509_cert_url: Option<String>,
13    pub(crate) client_secret: String,
14    pub(crate) redirect_uris: Vec<String>,
15}
16
17/// Struct for google credentials
18#[derive(Debug, Serialize, Deserialize)]
19pub struct Credential {
20    installed: Option<Installed>,
21}
22
23impl Credential {
24    /// Load the credential from a file.
25    pub fn load_json_file(path: &str) -> Self {
26        let home_dir = env::home_dir().unwrap();
27
28        let path = PathBuf::new().join(home_dir).join(".cull-gmail").join(path);
29        let json_str = fs::read_to_string(path).expect("could not read path");
30
31        serde_json::from_str(&json_str).expect("could not convert to struct")
32    }
33}
34
35impl From<Credential> for yup_oauth2::ApplicationSecret {
36    fn from(value: Credential) -> Self {
37        let mut out = Self::default();
38        if let Some(installed) = value.installed {
39            out.client_id = installed.client_id;
40            out.client_secret = installed.client_secret;
41            out.token_uri = installed.token_uri;
42            out.auth_uri = installed.auth_uri;
43            out.redirect_uris = installed.redirect_uris;
44            out.project_id = installed.project_id;
45            // out.client_email = installed.client_email;
46            out.auth_provider_x509_cert_url = installed.auth_provider_x509_cert_url;
47            // out.client_x509_cert_url = installed.client_x509_cert_url;
48        }
49        out
50    }
51}