use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct InvoiceRow {
#[serde(rename = "projectName", skip_serializing_if = "Option::is_none")]
pub project_name: Option<String>,
#[serde(rename = "period", skip_serializing_if = "Option::is_none")]
pub period: Option<String>,
#[serde(rename = "nature", skip_serializing_if = "Option::is_none")]
pub nature: Option<String>,
#[serde(rename = "amount", skip_serializing_if = "Option::is_none")]
pub amount: Option<f64>,
#[serde(rename = "rate", skip_serializing_if = "Option::is_none")]
pub rate: Option<f64>,
#[serde(rename = "hoursPerDay", skip_serializing_if = "Option::is_none")]
pub hours_per_day: Option<f64>,
#[serde(rename = "amountType", skip_serializing_if = "Option::is_none")]
pub amount_type: Option<AmountType>,
#[serde(rename = "rateType", skip_serializing_if = "Option::is_none")]
pub rate_type: Option<RateType>,
#[serde(rename = "total", skip_serializing_if = "Option::is_none")]
pub total: Option<f64>,
}
impl InvoiceRow {
pub fn new() -> InvoiceRow {
InvoiceRow {
project_name: None,
period: None,
nature: None,
amount: None,
rate: None,
hours_per_day: None,
amount_type: None,
rate_type: None,
total: None,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum AmountType {
#[serde(rename = "DAYS")]
Days,
#[serde(rename = "HOURS")]
Hours,
}
impl Default for AmountType {
fn default() -> AmountType {
Self::Days
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum RateType {
#[serde(rename = "DAYS")]
Days,
#[serde(rename = "HOURS")]
Hours,
}
impl Default for RateType {
fn default() -> RateType {
Self::Days
}
}