use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct SearchItem {
pub itemid: u64,
pub shopid: u64,
pub name: String,
pub price: u64,
pub price_min: u64,
pub price_max: u64,
#[serde(default)]
pub currency: Option<String>,
#[serde(default)]
pub stock: i64,
#[serde(default)]
pub historical_sold: i64,
#[serde(default)]
pub liked_count: u64,
#[serde(default)]
pub rating_star: f64,
#[serde(default)]
pub rating_count: u64,
#[serde(default)]
pub shop_location: Option<String>,
#[serde(default)]
pub image: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct SearchResults {
pub keyword: String,
#[serde(default)]
pub total_count: u64,
pub items: Vec<SearchItem>,
#[serde(default)]
pub page: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct RelatedItems {
pub source_itemid: u64,
pub source_shopid: u64,
pub hot_sales: Vec<RecommendedItem>,
pub recommended: Vec<RecommendedItem>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct RecommendedItem {
pub itemid: u64,
pub shopid: u64,
pub name: String,
pub price: u64,
#[serde(default)]
pub currency: Option<String>,
#[serde(default)]
pub stock: i64,
#[serde(default)]
pub is_sold_out: bool,
#[serde(default)]
pub rating_star: f64,
#[serde(default)]
pub rating_count: u64,
#[serde(default)]
pub image: Option<String>,
#[serde(default)]
pub shop_location: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ProductDetail {
pub itemid: u64,
pub shopid: u64,
pub name: String,
#[serde(default)]
pub description: Option<String>,
pub price: u64,
pub price_min: u64,
pub price_max: u64,
#[serde(default)]
pub currency: Option<String>,
#[serde(default)]
pub stock: i64,
#[serde(default)]
pub historical_sold: i64,
#[serde(default)]
pub liked_count: u64,
#[serde(default)]
pub rating_star: f64,
#[serde(default)]
pub rating_count: u64,
#[serde(default)]
pub shop_location: Option<String>,
#[serde(default)]
pub image: Option<String>,
#[serde(default)]
pub images: Vec<String>,
#[serde(default)]
pub models: Vec<ProductModel>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ProductModel {
pub modelid: u64,
pub name: String,
pub price: u64,
#[serde(default)]
pub stock: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct CartPreview {
pub total_count: u64,
pub unique_count: u64,
pub recent_items: Vec<CartItem>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct CartItem {
pub itemid: u64,
pub shopid: u64,
pub modelid: u64,
pub name: String,
pub price: u64,
#[serde(default)]
pub image: Option<String>,
#[serde(default)]
pub status: i64,
#[serde(default)]
pub is_add_on_sub_item: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Discover {
pub feeds: Vec<RecommendedItem>,
#[serde(default)]
pub feed_total: u64,
pub flash_sale: Vec<FlashSaleItem>,
pub mall_shops: Vec<MallShop>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct FlashSaleItem {
pub itemid: u64,
pub shopid: u64,
pub name: String,
pub price: u64,
#[serde(default)]
pub raw_discount: u32,
#[serde(default)]
pub end_time: i64,
#[serde(default)]
pub stock: i64,
#[serde(default)]
pub image: Option<String>,
#[serde(default)]
pub promotionid: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct MallShop {
pub shopid: u64,
pub url: String,
#[serde(default)]
pub image: Option<String>,
#[serde(default)]
pub promo_text: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Category {
pub catid: u64,
#[serde(default)]
pub parent_catid: u64,
#[serde(default)]
pub name: String,
#[serde(default)]
pub display_name: String,
#[serde(default)]
pub image: Option<String>,
#[serde(default)]
pub level: u32,
#[serde(default)]
pub children: Vec<Category>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct CategoryDetail {
pub catid: u64,
#[serde(default)]
pub name: String,
#[serde(default)]
pub display_name: String,
#[serde(default)]
pub level: u32,
#[serde(default)]
pub parent_cat_id: Option<u64>,
#[serde(default)]
pub image: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct CategoryPage {
#[serde(skip_serializing_if = "Option::is_none")]
pub category: Option<CategoryDetail>,
pub items: Vec<SearchItem>,
#[serde(default)]
pub total_count: u64,
#[serde(default)]
pub page: u32,
#[serde(default)]
pub has_more: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ShopInfo {
pub shop_id: u64,
#[serde(default)]
pub user_id: u64,
pub name: String,
#[serde(default)]
pub place: Option<String>,
#[serde(default)]
pub is_official_shop: bool,
#[serde(default)]
pub is_shopee_verified: bool,
#[serde(default)]
pub holiday_mode: bool,
#[serde(default)]
pub item_count: u64,
#[serde(default)]
pub follower_count: u64,
#[serde(default)]
pub rating_star: f64,
#[serde(default)]
pub rating_good: u64,
#[serde(default)]
pub rating_normal: u64,
#[serde(default)]
pub rating_bad: u64,
#[serde(default)]
pub response_rate: u32,
#[serde(default)]
pub response_time: u64,
#[serde(default)]
pub ctime: i64,
#[serde(default)]
pub last_active_time: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Reviews {
pub itemid: u64,
pub shopid: u64,
#[serde(default)]
pub item_rating_star: f64,
#[serde(default)]
pub item_rating_count: u64,
#[serde(default)]
pub has_more: bool,
pub ratings: Vec<Review>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Review {
pub cmtid: u64,
pub itemid: u64,
pub shopid: u64,
pub rating_star: u32,
#[serde(default)]
pub comment: String,
#[serde(default)]
pub images: Vec<String>,
pub ctime: i64,
#[serde(default)]
pub author_username: String,
#[serde(default)]
pub anonymous: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ShopItems {
pub shopid: u64,
pub page: u32,
#[serde(default)]
pub total_count: u64,
#[serde(default)]
pub nomore: bool,
pub items: Vec<RecommendedItem>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct UserSearchResults {
pub keyword: String,
pub users: Vec<UserMatch>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct UserMatch {
pub shopid: u64,
#[serde(default)]
pub userid: u64,
pub username: String,
#[serde(default)]
pub shopname: String,
#[serde(default)]
pub nickname: String,
#[serde(default)]
pub portrait: Option<String>,
#[serde(default)]
pub shop_rating: f64,
#[serde(default)]
pub follower_count: u64,
#[serde(default)]
pub products: u64,
#[serde(default)]
pub is_official_shop: bool,
#[serde(default)]
pub shopee_verified_flag: u32,
#[serde(default)]
pub response_rate: u32,
#[serde(default)]
pub response_time: u64,
#[serde(default)]
pub country: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct HomepageBundle {
#[serde(skip_serializing_if = "Option::is_none")]
pub cart: Option<CartPreview>,
pub discover: Discover,
pub categories: Vec<Category>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct AccountInfo {
#[serde(default)]
pub userid: u64,
#[serde(default)]
pub username: Option<String>,
#[serde(default)]
pub nickname: Option<String>,
#[serde(default)]
pub email: Option<String>,
#[serde(default)]
pub phone: Option<String>,
#[serde(default)]
pub country: Option<String>,
#[serde(default)]
pub portrait: Option<String>,
#[serde(default)]
pub created_time: i64,
#[serde(default)]
pub verify_status: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw: Option<serde_json::Value>,
}