schwab-developer 0.1.0

A library for Charles Schwab API.
Documentation
pub struct Client {
    bearer_token: String,
    http_client: reqwest::Client
}

impl Client {
    pub fn new(bearer_token: &str) -> Self {
        Self {
            bearer_token: bearer_token.to_string(),
            http_client: reqwest::Client::new()
        }
    }

    pub async fn get_request(&self, url: &str, query: &[(String, String)]) -> anyhow::Result<serde_json::Value> {
        let mut request = self.http_client
            .get(url)
            .bearer_auth(&self.bearer_token);
        if !query.is_empty() {
            request = request.query(&query);
        }
        let response = request.send().await?;
        Self::handle_response(response).await
    }

    async fn handle_response(response: reqwest::Response) -> anyhow::Result<serde_json::Value> {
        let status = response.status();
        if !status.is_success() {
            let text = response.text().await?;
            anyhow::bail!("Response status: {}, text: {}", status, text);
        }
        let resp_body = response.json().await?;
        Ok(resp_body)
    }
}