use crate::models;
use crate::result::Result;
#[derive(Debug, Deserialize)]
pub struct NewProduct {
pub name: String,
pub quantity: u32,
pub cents: u32,
pub description: String,
pub featured: bool,
pub category_path: String,
pub photo_data: String,
}
impl Into<Result<models::Product>> for NewProduct {
fn into(self) -> Result<models::Product> {
Ok(models::Product {
id: 0,
name: self.name,
quantity: self.quantity,
cents: self.cents,
description: self.description,
featured: self.featured,
category: self.category_path,
photo_set: models::PhotoSet::from_data_uri(&self.photo_data)?,
})
}
}
#[derive(Debug, Deserialize)]
pub struct ProductPatch {
pub name: Option<String>,
pub quantity: Option<i32>,
pub cents: Option<i32>,
pub description: Option<String>,
pub featured: Option<bool>,
pub category_path: Option<String>,
pub photo_data: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct Product {
pub id: u32,
pub name: String,
pub description: String,
pub cents: u32,
pub quantity: u32,
pub featured: bool,
pub photo_base: String,
pub photo_fullsize: String,
pub photo_thumbnail: String,
pub category: String,
}
impl From<models::Product> for Product {
fn from(p: models::Product) -> Self {
Product {
id: p.id,
name: p.name,
description: p.description,
cents: p.cents,
quantity: p.quantity,
featured: p.featured,
category: p.category,
photo_fullsize: p.photo_set.fullsize.path,
photo_base: p.photo_set.base.path,
photo_thumbnail: p.photo_set.thumbnail.path,
}
}
}