Add /me/time_entries
This commit is contained in:
parent
9c20dc09ec
commit
c1b8636407
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -1464,6 +1464,7 @@ dependencies = [
|
|||||||
"serde_json_path_to_error",
|
"serde_json_path_to_error",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
"url",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
@ -17,3 +17,4 @@ base64 = "0.22.1"
|
|||||||
serde = { version = "1.0.204", features = ["derive"] }
|
serde = { version = "1.0.204", features = ["derive"] }
|
||||||
serde_json = "1.0.120"
|
serde_json = "1.0.120"
|
||||||
serde_json_path_to_error = "0.1.4"
|
serde_json_path_to_error = "0.1.4"
|
||||||
|
url = "2.5.2"
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
use std::ops::Sub;
|
||||||
|
use chrono::{TimeDelta, Utc};
|
||||||
use toggl::TogglApi;
|
use toggl::TogglApi;
|
||||||
|
|
||||||
mod toggl;
|
mod toggl;
|
||||||
@ -10,5 +12,8 @@ async fn main() {
|
|||||||
sensitive::WORKSPACE_ID,
|
sensitive::WORKSPACE_ID,
|
||||||
);
|
);
|
||||||
|
|
||||||
dbg!(api.get_tags().await);
|
dbg!(api.get_time_user_entries_between(
|
||||||
|
Utc::now().sub(TimeDelta::days(2)),
|
||||||
|
Utc::now(),
|
||||||
|
).await);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,7 +9,8 @@ use governor::clock::DefaultClock;
|
|||||||
use reqwest::header::{HeaderMap, HeaderValue};
|
use reqwest::header::{HeaderMap, HeaderValue};
|
||||||
use base64::engine::general_purpose::STANDARD;
|
use base64::engine::general_purpose::STANDARD;
|
||||||
use base64::Engine;
|
use base64::Engine;
|
||||||
use reqwest::Response;
|
use chrono::{DateTime, SecondsFormat, Utc};
|
||||||
|
use reqwest::{Response, Url};
|
||||||
use serde::de::DeserializeOwned;
|
use serde::de::DeserializeOwned;
|
||||||
|
|
||||||
struct ReqwestRateLimiter {
|
struct ReqwestRateLimiter {
|
||||||
@ -72,6 +73,38 @@ impl TogglApi {
|
|||||||
headers
|
headers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Fetches all time entries for this user from Toggl that have been modified since the given
|
||||||
|
/// date.
|
||||||
|
pub async fn get_time_entries_for_user_modified_since(&self, since: DateTime<Utc>) -> Result<Vec<types::TimeEntry>, TogglError> {
|
||||||
|
let url = format!(
|
||||||
|
"{base_url}/me/time_entries?since={since}",
|
||||||
|
base_url = BASE_URL,
|
||||||
|
since = since.timestamp()
|
||||||
|
);
|
||||||
|
|
||||||
|
Self::parse(self.client.get(&url)
|
||||||
|
.headers(self.headers.clone())
|
||||||
|
.send().await?).await
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Fetches all time entries for this user from Toggl that have a start time between the given
|
||||||
|
/// start and end times.
|
||||||
|
pub async fn get_time_user_entries_between(&self, start: DateTime<Utc>, until: DateTime<Utc>) -> Result<Vec<types::TimeEntry>, TogglError> {
|
||||||
|
let url = format!(
|
||||||
|
"{base_url}/me/time_entries",
|
||||||
|
base_url = BASE_URL,
|
||||||
|
);
|
||||||
|
|
||||||
|
let mut url = Url::parse(&url).unwrap();
|
||||||
|
url.query_pairs_mut()
|
||||||
|
.append_pair("start_date", &start.to_rfc3339_opts(SecondsFormat::Secs, true))
|
||||||
|
.append_pair("end_date", &until.to_rfc3339_opts(SecondsFormat::Secs, true));
|
||||||
|
|
||||||
|
Self::parse(self.client.get(url)
|
||||||
|
.headers(self.headers.clone())
|
||||||
|
.send().await?).await
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn get_current_time_entry(&self) -> Result<Option<types::TimeEntry>, TogglError> {
|
pub async fn get_current_time_entry(&self) -> Result<Option<types::TimeEntry>, TogglError> {
|
||||||
let url = format!(
|
let url = format!(
|
||||||
"{base_url}/me/time_entries/current",
|
"{base_url}/me/time_entries/current",
|
||||||
@ -268,6 +301,9 @@ mod types {
|
|||||||
|
|
||||||
#[derive(Debug, thiserror::Error)]
|
#[derive(Debug, thiserror::Error)]
|
||||||
pub enum TogglError {
|
pub enum TogglError {
|
||||||
|
#[error("Toggl returned error: {0}")]
|
||||||
|
TogglError(serde_json::Value),
|
||||||
|
|
||||||
#[error("Reqwest error: {0}")]
|
#[error("Reqwest error: {0}")]
|
||||||
ReqwestError(#[from] reqwest_middleware::Error),
|
ReqwestError(#[from] reqwest_middleware::Error),
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user