use chrono::NaiveDateTime;
use serde::{Deserialize, Serialize};
use crate::controllers::customers::{CreateCustomer, UpdateCustomer};
use crate::controllers::Entity;
use super::MetaData;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Customer {
pub id: i32,
pub date_created: NaiveDateTime,
pub date_modified: NaiveDateTime,
pub date_modified_gmt: NaiveDateTime,
pub email: String,
pub first_name: String,
pub last_name: String,
pub role: Role,
pub username: String,
pub billing: Billing,
pub shipping: Shipping,
pub is_paying_customer: bool,
pub avatar_url: String,
pub meta_data: Vec<MetaData>,
}
impl Entity for Customer {
fn endpoint() -> String {
String::from("customers/")
}
fn child_endpoint(parent_id: i32) -> String {
let _ = parent_id;
String::new()
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Billing {
pub first_name: String,
pub last_name: String,
pub company: String,
pub address_1: String,
pub address_2: String,
pub city: String,
pub state: String,
pub postcode: String,
pub country: String,
pub email: String,
pub phone: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Shipping {
pub first_name: String,
pub last_name: String,
pub company: String,
pub address_1: String,
pub address_2: String,
pub city: String,
pub state: String,
pub postcode: String,
pub country: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum Role {
Administrator,
Editor,
Author,
Contributor,
Subscriber,
#[default]
Customer,
ShopManager,
}
impl Customer {
pub fn create<T: ToString>(email: T) -> CreateCustomer {
CreateCustomer::new(email)
}
pub fn update() -> UpdateCustomer {
UpdateCustomer::default()
}
}