use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
pub id: i64,
pub email: String,
#[serde(default)]
pub fullname: Option<String>,
#[serde(default)]
pub default_workspace_id: Option<i64>,
#[serde(default)]
pub timezone: Option<String>,
#[serde(default)]
pub beginning_of_week: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimeEntry {
pub id: i64,
#[serde(default)]
pub workspace_id: Option<i64>,
#[serde(default)]
pub project_id: Option<i64>,
#[serde(default)]
pub task_id: Option<i64>,
#[serde(default)]
pub billable: Option<bool>,
pub start: DateTime<Utc>,
#[serde(default)]
pub stop: Option<DateTime<Utc>>,
pub duration: i64,
#[serde(default)]
pub description: Option<String>,
#[serde(default)]
pub tags: Option<Vec<String>>,
#[serde(default)]
pub tag_ids: Option<Vec<i64>>,
#[serde(default)]
pub duronly: Option<bool>,
#[serde(default)]
pub at: Option<DateTime<Utc>>,
#[serde(default)]
pub server_deleted_at: Option<DateTime<Utc>>,
#[serde(default)]
pub user_id: Option<i64>,
#[serde(default)]
pub uid: Option<i64>,
#[serde(default)]
pub wid: Option<i64>,
#[serde(default)]
pub pid: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Project {
pub id: i64,
#[serde(default)]
pub workspace_id: Option<i64>,
#[serde(default)]
pub client_id: Option<i64>,
pub name: String,
#[serde(default)]
pub is_private: Option<bool>,
#[serde(default)]
pub active: Option<bool>,
#[serde(default)]
pub at: Option<DateTime<Utc>>,
#[serde(default)]
pub created_at: Option<DateTime<Utc>>,
#[serde(default)]
pub color: Option<String>,
#[serde(default)]
pub billable: Option<bool>,
#[serde(default)]
pub template: Option<bool>,
#[serde(default)]
pub auto_estimates: Option<bool>,
#[serde(default)]
pub estimated_hours: Option<i64>,
#[serde(default)]
pub rate: Option<f64>,
#[serde(default)]
pub currency: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Workspace {
pub id: i64,
pub name: String,
#[serde(default)]
pub premium: Option<bool>,
#[serde(default)]
pub admin: Option<bool>,
#[serde(default)]
pub default_hourly_rate: Option<f64>,
#[serde(default)]
pub default_currency: Option<String>,
#[serde(default)]
pub only_admins_may_create_projects: Option<bool>,
#[serde(default)]
pub only_admins_see_billable_rates: Option<bool>,
#[serde(default)]
pub rounding: Option<i32>,
#[serde(default)]
pub rounding_minutes: Option<i32>,
#[serde(default)]
pub at: Option<DateTime<Utc>>,
#[serde(default)]
pub logo_url: Option<String>,
}