Skip to content

Instantly share code, notes, and snippets.

@zupzup
zupzup / main.rs
Created October 29, 2020 13:22
Timeular Public API Deps and Constants
use once_cell::sync::Lazy;
use reqwest::Client;
use serde::{Deserialize, Serialize};
use std::env;
use tokio::fs;
type Error = Box<dyn std::error::Error>;
static CLIENT: Lazy<Client> = Lazy::new(|| Client::new());
@zupzup
zupzup / main.rs
Created October 29, 2020 13:28
Timeular Public API sign_in 1
#[tokio::main]
async fn main() -> Result<(), Error> {
let api_key = env::var("TMLR_API_KEY").expect("TMLR_API_KEY needs to be set");
let api_secret = env::var("TMLR_API_SECRET").expect("TMLR_API_SECRET needs to be set");
println!("signing in..");
let token = sign_in(api_key, api_secret).await?;
@zupzup
zupzup / main.rs
Created October 29, 2020 13:29
Timeular Public API sign_in 2
#[derive(Serialize, Debug)]
#[serde(rename_all = "camelCase")]
struct SignInRequest {
api_key: String,
api_secret: String,
}
#[derive(Deserialize, Debug)]
struct SignInResponse {
token: String,
@zupzup
zupzup / main.rs
Created October 29, 2020 13:30
Timeular Public API url
fn url(path: &str) -> String {
format!("{}{}", BASE_URL, path)
}
@zupzup
zupzup / main.rs
Created October 29, 2020 13:35
Timeular Public API me1
println!("fetching me and spaces...");
let me = fetch_me(&token).await?;
let spaces = fetch_spaces(&token).await?;
println!("fetched spaces: {:?} for {:?}", spaces, me);
@zupzup
zupzup / main.rs
Created October 29, 2020 13:35
Timeular Public API me2
#[derive(Deserialize, Debug)]
struct MeResponse {
data: Me,
}
#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
struct Me {
user_id: String,
name: String,
@zupzup
zupzup / main.rs
Created October 29, 2020 13:35
Timeular Public API spaces1
#[derive(Deserialize, Debug)]
struct SpacesResponse {
data: Vec<Space>,
}
#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
struct Space {
id: String,
name: String,
@zupzup
zupzup / main.rs
Created October 29, 2020 13:36
Timeular Public API activities 1
println!("fetching activities...");
let activities = fetch_activities(&token).await?;
println!("activities: {:?}", activities);
@zupzup
zupzup / main.rs
Created October 29, 2020 13:36
Timeular Public API activities 2
#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
struct ActivitiesResponse {
activities: Vec<Activity>,
inactive_activities: Vec<Activity>,
archived_activities: Vec<Activity>,
}
#[derive(Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
@zupzup
zupzup / main.rs
Created October 29, 2020 13:37
Timeular Public API activities tracking
if !activities.is_empty() {
println!("starting to track...");
let tracking = start_tracking(&activities.get(0).expect("exists").id, &token).await?;
println!("started tracking: {:?}", tracking);
let time_entry = stop_tracking(&token).await?;
println!("created time entry: {:?}", time_entry);
}