use serde::{Deserialize, Serialize}; use std::path::Path; use thiserror::Error; pub use teslatte::auth::{AccessToken, RefreshToken}; #[derive(Serialize, Deserialize, Clone, Debug)] pub struct AuthInfo { pub access_token: AccessToken, pub refresh_token: Option, } impl AuthInfo { pub fn save(&self, path: Option<&Path>) -> Result, ron::Error> { let ser = ron::ser::to_string(self)?; Ok(match path { Some(path) => std::fs::write(path, ser.clone()) .map(|_v| None) .unwrap_or(Some(ser)), None => Some(ser), }) } } #[derive(Serialize, Deserialize, Clone, Debug)] pub struct SuccessfulAuth { pub code: String, pub state: String, } #[derive(Error, Debug)] pub enum SaveError { #[error("stdio error")] StdIo(#[from] std::io::Error), #[error("ron")] RonSpanned(#[from] ron::Error), }