gurufocus_api 0.9.0

A rust adapter to the GuruFocus API, a provider of financial data.
Documentation
use gurufocus_api as gfapi;
use std::{convert::TryFrom, env};
use time::{Date, UtcDateTime};

type UpdatedStocks = Vec<String>;

fn get_months_before(date: Date, months: u8) -> Date {
    let mut day = date.day();
    let mut month = date.month() as u8;
    let mut year = date.year();

    while month + 1 < months {
        month += 12;
        year -= 1;
    }

    month -= months;
    let month: time::Month = time::Month::try_from(month).unwrap();
    day = day.min(month.length(year));

    Date::from_calendar_date(year, month, day).unwrap()
}

#[tokio::main]
async fn main() {
    let token = env::var("GURUFOCUS_TOKEN").unwrap();
    let gf_connect = gfapi::GuruFocusConnector::new(token);

    let now = UtcDateTime::now().date();
    let one_months_ago = get_months_before(now, 6);
    let stocks = gf_connect.get_updated_stocks(one_months_ago).await.unwrap();

    let stocks: UpdatedStocks = serde_json::from_value(stocks).unwrap();
    println!(
        "List of stocks with updated fundamental data since {}\n{:#?}",
        one_months_ago, stocks
    );
}