use serde::{Serialize, Deserialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct BillableRates {
pub previous_page: Option<i64>,
pub total_entries: i64,
pub billable_rates: Vec<BillableRate>,
pub per_page: i64,
pub page: i64,
pub total_pages: i64,
pub next_page: Option<i64>,
pub links: PaginationLinks,
}
impl std::fmt::Display for BillableRates {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct PaginationLinks {
pub last: String,
pub first: String,
pub previous: Option<String>,
pub next: Option<String>,
}
impl std::fmt::Display for PaginationLinks {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct User {
pub avatar_url: Option<String>,
pub access_roles: Option<Vec<String>>,
pub last_name: Option<String>,
pub timezone: Option<String>,
pub email: Option<String>,
pub cost_rate: Option<f64>,
pub id: Option<i64>,
pub created_at: Option<String>,
pub first_name: Option<String>,
pub updated_at: Option<String>,
pub weekly_capacity: Option<i64>,
pub roles: Option<Vec<String>>,
pub has_access_to_all_future_projects: Option<bool>,
pub telephone: Option<String>,
pub is_contractor: Option<bool>,
pub is_active: Option<bool>,
pub default_hourly_rate: Option<f64>,
}
impl std::fmt::Display for User {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TaskAssignments {
pub page: i64,
pub total_entries: i64,
pub links: PaginationLinks,
pub per_page: i64,
pub total_pages: i64,
pub task_assignments: Vec<TaskAssignment>,
pub next_page: Option<i64>,
pub previous_page: Option<i64>,
}
impl std::fmt::Display for TaskAssignments {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct UninvoicedReportResults {
pub results: Vec<UninvoicedReportResult>,
pub next_page: Option<i64>,
pub links: PaginationLinks,
pub total_pages: i64,
pub previous_page: Option<i64>,
pub per_page: i64,
pub total_entries: i64,
pub page: i64,
}
impl std::fmt::Display for UninvoicedReportResults {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct EstimateMessage {
pub sent_by_email: Option<String>,
pub updated_at: Option<String>,
pub recipients: Option<Vec<EstimateMessageRecipient>>,
pub event_type: Option<String>,
pub sent_from: Option<String>,
pub id: Option<i64>,
pub subject: Option<String>,
pub send_me_a_copy: Option<bool>,
pub sent_from_email: Option<String>,
pub sent_by: Option<String>,
pub body: Option<String>,
pub created_at: Option<String>,
}
impl std::fmt::Display for EstimateMessage {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct InvoiceLineItem {
pub project: Option<serde_json::Value>,
pub id: Option<i64>,
pub unit_price: Option<f64>,
pub taxed2: Option<bool>,
pub kind: Option<String>,
pub description: Option<String>,
pub amount: Option<f64>,
pub quantity: Option<f64>,
pub taxed: Option<bool>,
}
impl std::fmt::Display for InvoiceLineItem {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct Client {
pub address: Option<String>,
pub created_at: Option<String>,
pub name: Option<String>,
pub statement_key: Option<String>,
pub updated_at: Option<String>,
pub is_active: Option<bool>,
pub currency: Option<String>,
pub id: Option<i64>,
}
impl std::fmt::Display for Client {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct InvoiceMessageSubjectAndBody {
pub subject: String,
pub invoice_id: i64,
pub body: String,
pub reminder: bool,
pub thank_you: bool,
}
impl std::fmt::Display for InvoiceMessageSubjectAndBody {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TaskAssignment {
pub task: Option<serde_json::Value>,
pub is_active: Option<bool>,
pub budget: Option<f64>,
pub billable: Option<bool>,
pub hourly_rate: Option<f64>,
pub updated_at: Option<String>,
pub id: Option<i64>,
pub project: Option<serde_json::Value>,
pub created_at: Option<String>,
}
impl std::fmt::Display for TaskAssignment {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Tasks {
pub page: i64,
pub total_pages: i64,
pub previous_page: Option<i64>,
pub links: PaginationLinks,
pub next_page: Option<i64>,
pub per_page: i64,
pub total_entries: i64,
pub tasks: Vec<Task>,
}
impl std::fmt::Display for Tasks {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Contacts {
pub page: i64,
pub next_page: Option<i64>,
pub links: PaginationLinks,
pub per_page: i64,
pub total_entries: i64,
pub previous_page: Option<i64>,
pub contacts: Vec<Contact>,
pub total_pages: i64,
}
impl std::fmt::Display for Contacts {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct EstimateMessageRecipient {
pub email: Option<String>,
pub name: Option<String>,
}
impl std::fmt::Display for EstimateMessageRecipient {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Clients {
pub previous_page: Option<i64>,
pub page: i64,
pub total_pages: i64,
pub links: PaginationLinks,
pub clients: Vec<Client>,
pub next_page: Option<i64>,
pub total_entries: i64,
pub per_page: i64,
}
impl std::fmt::Display for Clients {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EstimateItemCategories {
pub previous_page: Option<i64>,
pub total_entries: i64,
pub total_pages: i64,
pub next_page: Option<i64>,
pub links: PaginationLinks,
pub per_page: i64,
pub estimate_item_categories: Vec<EstimateItemCategory>,
pub page: i64,
}
impl std::fmt::Display for EstimateItemCategories {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct InvoicePayments {
pub links: PaginationLinks,
pub total_entries: i64,
pub per_page: i64,
pub previous_page: Option<i64>,
pub page: i64,
pub total_pages: i64,
pub invoice_payments: Vec<InvoicePayment>,
pub next_page: Option<i64>,
}
impl std::fmt::Display for InvoicePayments {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Estimates {
pub total_pages: i64,
pub next_page: Option<i64>,
pub links: PaginationLinks,
pub estimates: Vec<Estimate>,
pub per_page: i64,
pub total_entries: i64,
pub page: i64,
pub previous_page: Option<i64>,
}
impl std::fmt::Display for Estimates {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Expenses {
pub per_page: i64,
pub total_entries: i64,
pub previous_page: Option<i64>,
pub page: i64,
pub next_page: Option<i64>,
pub links: PaginationLinks,
pub total_pages: i64,
pub expenses: Vec<Expense>,
}
impl std::fmt::Display for Expenses {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TimeEntries {
pub total_pages: i64,
pub total_entries: i64,
pub per_page: i64,
pub previous_page: Option<i64>,
pub time_entries: Vec<TimeEntry>,
pub next_page: Option<i64>,
pub page: i64,
pub links: PaginationLinks,
}
impl std::fmt::Display for TimeEntries {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ExpenseReportsResults {
pub page: i64,
pub total_pages: i64,
pub previous_page: Option<i64>,
pub results: Vec<ExpenseReportsResult>,
pub links: PaginationLinks,
pub next_page: Option<i64>,
pub total_entries: i64,
pub per_page: i64,
}
impl std::fmt::Display for ExpenseReportsResults {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct UserAssignment {
pub created_at: Option<String>,
pub use_default_rates: Option<bool>,
pub updated_at: Option<String>,
pub id: Option<i64>,
pub user: Option<serde_json::Value>,
pub is_active: Option<bool>,
pub is_project_manager: Option<bool>,
pub project: Option<serde_json::Value>,
pub hourly_rate: Option<f64>,
pub budget: Option<f64>,
}
impl std::fmt::Display for UserAssignment {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct BillableRate {
pub end_date: Option<String>,
pub updated_at: Option<String>,
pub created_at: Option<String>,
pub id: Option<i64>,
pub start_date: Option<String>,
pub amount: Option<f64>,
}
impl std::fmt::Display for BillableRate {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Projects {
pub page: i64,
pub total_pages: i64,
pub next_page: Option<i64>,
pub projects: Vec<Project>,
pub per_page: i64,
pub total_entries: i64,
pub previous_page: Option<i64>,
pub links: PaginationLinks,
}
impl std::fmt::Display for Projects {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Teammates {
pub per_page: i64,
pub page: i64,
pub teammates: Vec<Teammate>,
pub total_pages: i64,
pub links: PaginationLinks,
pub next_page: Option<i64>,
pub previous_page: Option<i64>,
pub total_entries: i64,
}
impl std::fmt::Display for Teammates {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Roles {
pub roles: Vec<Role>,
pub previous_page: Option<i64>,
pub page: i64,
pub total_pages: i64,
pub total_entries: i64,
pub next_page: Option<i64>,
pub per_page: i64,
pub links: PaginationLinks,
}
impl std::fmt::Display for Roles {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Companies {
pub per_page: i64,
pub total_pages: i64,
pub links: PaginationLinks,
pub next_page: Option<i64>,
pub page: i64,
pub companies: Vec<Company>,
pub total_entries: i64,
pub previous_page: Option<i64>,
}
impl std::fmt::Display for Companies {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct Role {
pub name: Option<String>,
pub user_ids: Option<Vec<i64>>,
pub created_at: Option<String>,
pub updated_at: Option<String>,
pub id: Option<i64>,
}
impl std::fmt::Display for Role {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct InvoiceMessageRecipients {
pub total_pages: i64,
pub next_page: Option<i64>,
pub previous_page: Option<i64>,
pub page: i64,
pub invoice_message_recipients: Vec<InvoiceMessageRecipient>,
pub total_entries: i64,
pub links: PaginationLinks,
pub per_page: i64,
}
impl std::fmt::Display for InvoiceMessageRecipients {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Invoices {
pub invoices: Vec<Invoice>,
pub total_entries: i64,
pub page: i64,
pub per_page: i64,
pub links: PaginationLinks,
pub next_page: Option<i64>,
pub previous_page: Option<i64>,
pub total_pages: i64,
}
impl std::fmt::Display for Invoices {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct ExpenseCategory {
pub updated_at: Option<String>,
pub name: Option<String>,
pub unit_price: Option<f64>,
pub created_at: Option<String>,
pub id: Option<i64>,
pub unit_name: Option<String>,
pub is_active: Option<bool>,
}
impl std::fmt::Display for ExpenseCategory {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct InvoiceMessageRecipient {
pub name: Option<String>,
pub email: Option<String>,
}
impl std::fmt::Display for InvoiceMessageRecipient {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TimeReportsResults {
pub total_entries: i64,
pub page: i64,
pub next_page: Option<i64>,
pub per_page: i64,
pub links: PaginationLinks,
pub previous_page: Option<i64>,
pub results: Vec<TimeReportsResult>,
pub total_pages: i64,
}
impl std::fmt::Display for TimeReportsResults {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct Company {
pub decimal_symbol: Option<String>,
pub base_uri: Option<String>,
pub plan_type: Option<String>,
pub expense_feature: Option<bool>,
pub is_active: Option<bool>,
pub time_format: Option<String>,
pub color_scheme: Option<String>,
pub weekly_capacity: Option<i64>,
pub name: Option<String>,
pub week_start_day: Option<String>,
pub thousands_separator: Option<String>,
pub invoice_feature: Option<bool>,
pub estimate_feature: Option<bool>,
pub clock: Option<String>,
pub wants_timestamp_timers: Option<bool>,
pub full_domain: Option<String>,
pub currency_code_display: Option<String>,
pub currency_symbol_display: Option<String>,
pub approval_feature: Option<bool>,
pub date_format: Option<String>,
}
impl std::fmt::Display for Company {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Contact {
pub last_name: Option<String>,
pub title: Option<String>,
pub phone_office: Option<String>,
pub phone_mobile: Option<String>,
pub client: Option<serde_json::Value>,
pub updated_at: Option<String>,
pub first_name: Option<String>,
pub fax: Option<String>,
pub created_at: Option<String>,
pub email: Option<String>,
pub id: Option<i64>,
}
impl std::fmt::Display for Contact {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct ProjectBudgetReportResult {
pub budget_spent: Option<f64>,
pub client_id: Option<i64>,
pub budget_by: Option<String>,
pub budget: Option<f64>,
pub project_name: Option<String>,
pub budget_is_monthly: Option<bool>,
pub budget_remaining: Option<f64>,
pub is_active: Option<bool>,
pub client_name: Option<String>,
pub project_id: Option<i64>,
}
impl std::fmt::Display for ProjectBudgetReportResult {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EstimateMessages {
pub next_page: Option<i64>,
pub previous_page: Option<i64>,
pub page: i64,
pub per_page: i64,
pub links: PaginationLinks,
pub estimate_messages: Vec<EstimateMessage>,
pub total_entries: i64,
pub total_pages: i64,
}
impl std::fmt::Display for EstimateMessages {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct Error {
pub message: Option<String>,
pub code: Option<i64>,
}
impl std::fmt::Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct InvoiceMessages {
pub total_pages: i64,
pub per_page: i64,
pub page: i64,
pub links: PaginationLinks,
pub next_page: Option<i64>,
pub previous_page: Option<i64>,
pub invoice_messages: Vec<InvoiceMessage>,
pub total_entries: i64,
}
impl std::fmt::Display for InvoiceMessages {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct UserAssignments {
pub page: i64,
pub links: PaginationLinks,
pub per_page: i64,
pub total_entries: i64,
pub previous_page: Option<i64>,
pub next_page: Option<i64>,
pub user_assignments: Vec<UserAssignment>,
pub total_pages: i64,
}
impl std::fmt::Display for UserAssignments {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct EstimateLineItem {
pub quantity: Option<f64>,
pub taxed2: Option<bool>,
pub id: Option<i64>,
pub unit_price: Option<f64>,
pub kind: Option<String>,
pub description: Option<String>,
pub amount: Option<f64>,
pub taxed: Option<bool>,
}
impl std::fmt::Display for EstimateLineItem {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Teammate {
pub first_name: Option<String>,
pub id: Option<serde_json::Value>,
pub last_name: Option<String>,
pub email: Option<String>,
}
impl std::fmt::Display for Teammate {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ProjectAssignment {
pub updated_at: Option<String>,
pub is_project_manager: Option<bool>,
pub use_default_rates: Option<bool>,
pub budget: Option<f64>,
pub created_at: Option<String>,
pub project: Option<serde_json::Value>,
pub client: Option<serde_json::Value>,
pub task_assignments: Option<Vec<TaskAssignment>>,
pub hourly_rate: Option<f64>,
pub id: Option<i64>,
pub is_active: Option<bool>,
}
impl std::fmt::Display for ProjectAssignment {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct TeammatesPatchResponse {
pub teammates: Vec<Teammate>,
}
impl std::fmt::Display for TeammatesPatchResponse {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct InvoiceItemCategory {
pub id: Option<i64>,
pub use_as_service: Option<bool>,
pub created_at: Option<String>,
pub name: Option<String>,
pub use_as_expense: Option<bool>,
pub updated_at: Option<String>,
}
impl std::fmt::Display for InvoiceItemCategory {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Project {
pub budget_by: Option<String>,
pub is_billable: Option<bool>,
pub budget_is_monthly: Option<bool>,
pub starts_on: Option<String>,
pub created_at: Option<String>,
pub is_fixed_fee: Option<bool>,
pub notify_when_over_budget: Option<bool>,
pub bill_by: Option<String>,
pub over_budget_notification_percentage: Option<f64>,
pub fee: Option<f64>,
pub cost_budget_include_expenses: Option<bool>,
pub cost_budget: Option<f64>,
pub show_budget_to_all: Option<bool>,
pub notes: Option<String>,
pub is_active: Option<bool>,
pub client: Option<serde_json::Value>,
pub hourly_rate: Option<f64>,
pub budget: Option<f64>,
pub ends_on: Option<String>,
pub updated_at: Option<String>,
pub id: Option<i64>,
pub over_budget_notification_date: Option<String>,
pub name: Option<String>,
pub code: Option<String>,
}
impl std::fmt::Display for Project {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EstimateMessageRecipients {
pub page: i64,
pub links: PaginationLinks,
pub estimate_message_recipients: Vec<EstimateMessageRecipient>,
pub total_pages: i64,
pub per_page: i64,
pub total_entries: i64,
pub previous_page: Option<i64>,
pub next_page: Option<i64>,
}
impl std::fmt::Display for EstimateMessageRecipients {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct InvoicePayment {
pub recorded_by_email: Option<String>,
pub payment_gateway: Option<serde_json::Value>,
pub paid_at: Option<String>,
pub created_at: Option<String>,
pub paid_date: Option<String>,
pub recorded_by: Option<String>,
pub updated_at: Option<String>,
pub id: Option<i64>,
pub notes: Option<String>,
pub amount: Option<f64>,
pub transaction_id: Option<String>,
}
impl std::fmt::Display for InvoicePayment {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct InvoiceMessage {
pub thank_you: Option<bool>,
pub created_at: Option<String>,
pub sent_from_email: Option<String>,
pub id: Option<i64>,
pub send_me_a_copy: Option<bool>,
pub event_type: Option<String>,
pub include_link_to_client_invoice: Option<bool>,
pub sent_by_email: Option<String>,
pub sent_from: Option<String>,
pub recipients: Option<Vec<InvoiceMessageRecipient>>,
pub subject: Option<String>,
pub reminder: Option<bool>,
pub body: Option<String>,
pub attach_pdf: Option<bool>,
pub send_reminder_on: Option<String>,
pub sent_by: Option<String>,
pub updated_at: Option<String>,
}
impl std::fmt::Display for InvoiceMessage {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TimeEntry {
pub task: Option<serde_json::Value>,
pub task_assignment: Option<TaskAssignment>,
pub user_assignment: Option<UserAssignment>,
pub notes: Option<String>,
pub user: Option<serde_json::Value>,
pub external_reference: Option<serde_json::Value>,
pub hours: Option<f64>,
pub client: Option<serde_json::Value>,
pub billable_rate: Option<f64>,
pub updated_at: Option<String>,
pub budgeted: Option<bool>,
pub locked_reason: Option<String>,
pub created_at: Option<String>,
pub id: Option<i64>,
pub is_billed: Option<bool>,
pub started_time: Option<String>,
pub ended_time: Option<String>,
pub billable: Option<bool>,
pub hours_without_timer: Option<f64>,
pub is_closed: Option<bool>,
pub timer_started_at: Option<String>,
pub is_running: Option<bool>,
pub rounded_hours: Option<f64>,
pub is_locked: Option<bool>,
pub spent_date: Option<String>,
pub invoice: Option<serde_json::Value>,
pub cost_rate: Option<f64>,
pub project: Option<serde_json::Value>,
}
impl std::fmt::Display for TimeEntry {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct CostRate {
pub created_at: Option<String>,
pub updated_at: Option<String>,
pub start_date: Option<String>,
pub id: Option<i64>,
pub end_date: Option<String>,
pub amount: Option<f64>,
}
impl std::fmt::Display for CostRate {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ExpenseCategories {
pub page: i64,
pub next_page: Option<i64>,
pub total_entries: i64,
pub total_pages: i64,
pub per_page: i64,
pub previous_page: Option<i64>,
pub links: PaginationLinks,
pub expense_categories: Vec<ExpenseCategory>,
}
impl std::fmt::Display for ExpenseCategories {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct CostRates {
pub per_page: i64,
pub total_pages: i64,
pub previous_page: Option<i64>,
pub total_entries: i64,
pub links: PaginationLinks,
pub page: i64,
pub next_page: Option<i64>,
pub cost_rates: Vec<CostRate>,
}
impl std::fmt::Display for CostRates {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct InvoiceItemCategories {
pub total_entries: i64,
pub previous_page: Option<i64>,
pub per_page: i64,
pub page: i64,
pub invoice_item_categories: Vec<InvoiceItemCategory>,
pub next_page: Option<i64>,
pub links: PaginationLinks,
pub total_pages: i64,
}
impl std::fmt::Display for InvoiceItemCategories {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Estimate {
pub notes: Option<String>,
pub number: Option<String>,
pub client: Option<serde_json::Value>,
pub currency: Option<String>,
pub purchase_order: Option<String>,
pub subject: Option<String>,
pub state: Option<String>,
pub sent_at: Option<String>,
pub client_key: Option<String>,
pub creator: Option<serde_json::Value>,
pub tax2: Option<f64>,
pub tax2_amount: Option<f64>,
pub discount: Option<f64>,
pub discount_amount: Option<f64>,
pub accepted_at: Option<String>,
pub updated_at: Option<String>,
pub created_at: Option<String>,
pub id: Option<i64>,
pub tax_amount: Option<f64>,
pub issue_date: Option<String>,
pub declined_at: Option<String>,
pub amount: Option<f64>,
pub line_items: Option<Vec<EstimateLineItem>>,
pub tax: Option<f64>,
}
impl std::fmt::Display for Estimate {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct InvoiceLineItems {
pub per_page: i64,
pub total_entries: i64,
pub links: PaginationLinks,
pub invoice_line_items: Vec<InvoiceLineItem>,
pub page: i64,
pub total_pages: i64,
pub next_page: Option<i64>,
pub previous_page: Option<i64>,
}
impl std::fmt::Display for InvoiceLineItems {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EstimateLineItems {
pub estimate_line_items: Vec<EstimateLineItem>,
pub per_page: i64,
pub next_page: Option<i64>,
pub total_pages: i64,
pub previous_page: Option<i64>,
pub page: i64,
pub total_entries: i64,
pub links: PaginationLinks,
}
impl std::fmt::Display for EstimateLineItems {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ProjectBudgetReportResults {
pub total_pages: i64,
pub results: Vec<ProjectBudgetReportResult>,
pub next_page: Option<i64>,
pub per_page: i64,
pub total_entries: i64,
pub previous_page: Option<i64>,
pub page: i64,
pub links: PaginationLinks,
}
impl std::fmt::Display for ProjectBudgetReportResults {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct EstimateItemCategory {
pub id: Option<i64>,
pub created_at: Option<String>,
pub updated_at: Option<String>,
pub name: Option<String>,
}
impl std::fmt::Display for EstimateItemCategory {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct Task {
pub is_default: Option<bool>,
pub billable_by_default: Option<bool>,
pub default_hourly_rate: Option<f64>,
pub is_active: Option<bool>,
pub created_at: Option<String>,
pub updated_at: Option<String>,
pub name: Option<String>,
pub id: Option<i64>,
}
impl std::fmt::Display for Task {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct ExpenseReportsResult {
pub client_name: Option<String>,
pub user_name: Option<String>,
pub currency: Option<String>,
pub billable_amount: Option<f64>,
pub expense_category_id: Option<i64>,
pub project_id: Option<i64>,
pub is_contractor: Option<bool>,
pub project_name: Option<String>,
pub expense_category_name: Option<String>,
pub user_id: Option<i64>,
pub client_id: Option<i64>,
pub total_amount: Option<f64>,
}
impl std::fmt::Display for ExpenseReportsResult {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct TimeReportsResult {
pub client_id: Option<i64>,
pub task_id: Option<i64>,
pub user_id: Option<i64>,
pub task_name: Option<String>,
pub user_name: Option<String>,
pub billable_hours: Option<f64>,
pub billable_amount: Option<f64>,
pub project_name: Option<String>,
pub project_id: Option<i64>,
pub client_name: Option<String>,
pub is_contractor: Option<bool>,
pub currency: Option<String>,
pub total_hours: Option<f64>,
}
impl std::fmt::Display for TimeReportsResult {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ProjectAssignments {
pub project_assignments: Vec<ProjectAssignment>,
pub total_pages: i64,
pub per_page: i64,
pub page: i64,
pub total_entries: i64,
pub next_page: Option<i64>,
pub links: PaginationLinks,
pub previous_page: Option<i64>,
}
impl std::fmt::Display for ProjectAssignments {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Users {
pub total_entries: i64,
pub next_page: Option<i64>,
pub links: PaginationLinks,
pub per_page: i64,
pub previous_page: Option<i64>,
pub page: i64,
pub total_pages: i64,
pub users: Vec<User>,
}
impl std::fmt::Display for Users {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Invoice {
pub number: Option<String>,
pub issue_date: Option<String>,
pub due_date: Option<String>,
pub subject: Option<String>,
pub closed_at: Option<String>,
pub period_start: Option<String>,
pub payment_term: Option<String>,
pub paid_at: Option<String>,
pub amount: Option<f64>,
pub notes: Option<String>,
pub tax2: Option<f64>,
pub due_amount: Option<f64>,
pub discount_amount: Option<f64>,
pub currency: Option<String>,
pub paid_date: Option<String>,
pub client_key: Option<String>,
pub recurring_invoice_id: Option<i64>,
pub estimate: Option<serde_json::Value>,
pub sent_at: Option<String>,
pub discount: Option<f64>,
pub period_end: Option<String>,
pub tax: Option<f64>,
pub client: Option<serde_json::Value>,
pub purchase_order: Option<String>,
pub line_items: Option<Vec<InvoiceLineItem>>,
pub id: Option<i64>,
pub state: Option<String>,
pub creator: Option<serde_json::Value>,
pub tax2_amount: Option<f64>,
pub retainer: Option<serde_json::Value>,
pub created_at: Option<String>,
pub tax_amount: Option<f64>,
pub updated_at: Option<String>,
}
impl std::fmt::Display for Invoice {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Expense {
pub user_assignment: Option<UserAssignment>,
pub units: Option<i64>,
pub locked_reason: Option<String>,
pub id: Option<i64>,
pub receipt: Option<serde_json::Value>,
pub created_at: Option<String>,
pub billable: Option<bool>,
pub is_closed: Option<bool>,
pub expense_category: Option<serde_json::Value>,
pub invoice: Option<serde_json::Value>,
pub total_cost: Option<f64>,
pub updated_at: Option<String>,
pub user: Option<serde_json::Value>,
pub spent_date: Option<String>,
pub notes: Option<String>,
pub project: Option<serde_json::Value>,
pub is_locked: Option<bool>,
pub client: Option<serde_json::Value>,
pub is_billed: Option<bool>,
}
impl std::fmt::Display for Expense {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct UninvoicedReportResult {
pub uninvoiced_expenses: Option<f64>,
pub client_id: Option<i64>,
pub client_name: Option<String>,
pub project_name: Option<String>,
pub total_hours: Option<f64>,
pub currency: Option<String>,
pub project_id: Option<i64>,
pub uninvoiced_amount: Option<f64>,
pub uninvoiced_hours: Option<f64>,
}
impl std::fmt::Display for UninvoicedReportResult {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "{}", serde_json::to_string(self).unwrap())
}
}