pub mod auth_code_flow;
pub mod c_c_flow;
use crate::util::*;
pub use auth_code_flow::*;
pub use c_c_flow::*;
use serde::{Serialize, Deserialize};
use std::env::{self, VarError};
use std::ffi::OsStr;
use std::time::{Duration, Instant};
#[derive(Debug, Clone)]
pub struct ClientCredentials {
pub id: String,
pub secret: String,
}
impl ClientCredentials {
pub fn from_env_vars<I: AsRef<OsStr>, S: AsRef<OsStr>>(
client_id: I,
client_secret: S,
) -> Result<Self, VarError> {
Ok(Self {
id: env::var(client_id)?,
secret: env::var(client_secret)?,
})
}
pub fn from_env() -> Result<Self, VarError> {
Self::from_env_vars("CLIENT_ID", "CLIENT_SECRET")
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccessToken {
#[serde(rename = "access_token")]
pub token: String,
#[serde(rename = "expires_in", with = "serde_instant_seconds")]
pub expires: Instant,
}
impl Default for AccessToken {
fn default() -> Self {
Self {
token: String::new(),
expires: Instant::now() - Duration::from_secs(1),
}
}
}