schwab-developer 0.1.0

A library for Charles Schwab API.
Documentation
use std::{fs::File, path::{Path, PathBuf}};

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct TokenData {
    pub access_token: String,
    pub refresh_token: String,
    pub expires_in: i64,
    #[serde(default)]
    pub expires_at: i64,
}

pub struct TokenStore {
    path: PathBuf,
}

impl TokenStore {
    pub fn new(path: impl Into<PathBuf>) -> Self {
        Self {
            path: path.into()
        }
    }

    pub fn save(&self, data: &TokenData) -> anyhow::Result<()> {
        let file = File::create(&self.path)?;
        serde_json::to_writer_pretty(file, data)?;
        Ok(())
    }

    pub async fn load(&self) -> Option<TokenData> {
        if !Path::new(&self.path).exists() {
            return None;
        }

        let file = File::open(&self.path).ok()?;
        let tokens: TokenData = serde_json::from_reader(file).ok()?;
        Some(tokens)
    }
}