use crate::model::{shared, types};
use serde::{Deserialize, Serialize};
#[derive(PartialEq, Deserialize, Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct TimeEntries {
pub results: Vec<TimeEntry>,
pub has_more: bool,
}
#[derive(PartialEq, Deserialize, Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct TimeEntry {
pub id: types::UUID,
pub type_id: Type,
pub status_id: Status,
pub client_status_id: Option<ClientStatus>,
pub date: types::Date,
pub minutes: i64,
pub timer_started_at: Option<types::Timestamp>,
pub notes: String,
pub is_billable: bool,
pub invoiced: bool,
pub rate_currency: Option<String>,
pub rate: Option<f64>,
pub cost_currency: Option<String>,
pub cost_per_hour: Option<f64>,
pub created_at: types::Timestamp,
pub start_time: Option<types::Time>,
pub end_time: Option<types::Time>,
pub member: shared::Entity,
pub project: Option<shared::Project>,
pub role: Option<shared::Entity>,
pub task: Option<shared::Entity>,
pub time_off_type: Option<shared::Entity>,
pub invoice: Option<Invoice>,
}
#[derive(PartialEq, Deserialize, Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Invoice {
pub id: types::UUID,
pub number: String,
pub line: Line,
}
#[derive(PartialEq, Deserialize, Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Line {
pub id: types::UUID,
pub number: i64,
}
#[derive(PartialEq, Deserialize, Serialize, Debug)]
#[serde(rename_all = "snake_case")]
pub enum Type {
ProjectTime,
TimeOff,
}
#[derive(PartialEq, Deserialize, Serialize, Debug)]
#[serde(rename_all = "snake_case")]
pub enum Status {
NotSubmitted,
PendingApproval,
Approved,
Rejected,
}
#[derive(PartialEq, Deserialize, Serialize, Debug)]
#[serde(rename_all = "snake_case")]
pub enum ClientStatus {
Approved,
Rejected,
}
#[cfg(test)]
mod tests;