Add /me/time_entries
This commit is contained in:
+37
-1
@@ -9,7 +9,8 @@ use governor::clock::DefaultClock;
|
||||
use reqwest::header::{HeaderMap, HeaderValue};
|
||||
use base64::engine::general_purpose::STANDARD;
|
||||
use base64::Engine;
|
||||
use reqwest::Response;
|
||||
use chrono::{DateTime, SecondsFormat, Utc};
|
||||
use reqwest::{Response, Url};
|
||||
use serde::de::DeserializeOwned;
|
||||
|
||||
struct ReqwestRateLimiter {
|
||||
@@ -72,6 +73,38 @@ impl TogglApi {
|
||||
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> {
|
||||
let url = format!(
|
||||
"{base_url}/me/time_entries/current",
|
||||
@@ -268,6 +301,9 @@ mod types {
|
||||
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
pub enum TogglError {
|
||||
#[error("Toggl returned error: {0}")]
|
||||
TogglError(serde_json::Value),
|
||||
|
||||
#[error("Reqwest error: {0}")]
|
||||
ReqwestError(#[from] reqwest_middleware::Error),
|
||||
|
||||
|
||||
Reference in New Issue
Block a user