use serde::{Deserialize, Serialize};
use serde_json::{Value as JsonValue};
use crate::{request::Response, errors::LabraError, LabradorResult};
#[derive(Debug, Deserialize,Serialize)]
pub struct PddGoodsRecommendResponse {
pub total: Option<u64>,
pub list: Option<Vec<PddRecommendItem>>,
pub list_id: Option<String>,
pub search_id: Option<String>,
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddRecommendItem {
pub cat_id: Option<String>,
pub cat_ids: Option<Vec<u64>>,
pub opt_ids: Option<Vec<u64>>,
pub coupon_discount: Option<u64>,
pub coupon_end_time: Option<u64>,
pub coupon_min_order_amount: Option<u64>,
pub coupon_price: Option<u64>,
pub coupon_remain_quantity: Option<u64>,
pub coupon_start_time: Option<u64>,
pub coupon_total_quantity: Option<u64>,
pub create_at: Option<u64>,
pub goods_id: Option<u64>,
pub goods_rate: Option<u64>,
pub desc_txt: Option<String>,
pub goods_desc: Option<String>,
pub goods_gallery_urls: Option<String>,
pub goods_image_url: Option<String>,
pub goods_name: Option<String>,
pub goods_sign: Option<String>,
pub goods_thumbnail_url: Option<String>,
pub goods_type: Option<u64>,
pub mall_id: Option<u64>,
pub market_fee: Option<u64>,
pub min_group_price: Option<u64>,
pub min_normal_price: Option<u64>,
pub predict_promotion_rate: Option<u64>,
pub promotion_rate: Option<u64>,
pub has_coupon: Option<bool>,
pub lgst_txt: Option<String>,
pub mall_name: Option<String>,
pub merchant_type: Option<String>,
pub opt_id: Option<String>,
pub opt_name: Option<String>,
pub qr_code_image_url: Option<String>,
pub sales_tip: Option<String>,
pub serv_txt: Option<String>,
pub share_desc: Option<String>,
pub search_id: Option<String>,
}
impl Response <PddGoodsRecommendResponse> for JsonValue {
fn parse_result(&self) -> LabradorResult<PddGoodsRecommendResponse> {
serde_json::from_value::<PddGoodsRecommendResponse>(self.to_owned()).map_err(LabraError::from)
}
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddGoodsSearchResponse {
pub total_count: Option<u64>,
pub goods_list: Option<Vec<PddGoodItem>>,
pub list_id: Option<String>,
pub search_id: Option<String>,
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddGoodItem {
pub activity_tags: Option<Vec<u64>>,
pub service_tags: Option<Vec<u64>>,
pub cat_ids: Option<Vec<u64>>,
pub activity_type: Option<u64>,
pub clt_cpn_batch_sn: Option<String>,
pub clt_cpn_discount: Option<u64>,
pub clt_cpn_end_time: Option<u64>,
pub clt_cpn_min_amt: Option<u64>,
pub clt_cpn_quantity: Option<u64>,
pub clt_cpn_remain_quantity: Option<u64>,
pub clt_cpn_start_time: Option<u64>,
pub coupon_discount: Option<u64>,
pub coupon_end_time: Option<u64>,
pub coupon_min_order_amount: Option<u64>,
pub coupon_remain_quantity: Option<u64>,
pub coupon_start_time: Option<u64>,
pub coupon_total_quantity: Option<u64>,
pub create_at: Option<u64>,
pub desc_txt: Option<String>,
pub goods_desc: Option<String>,
pub goods_image_url: Option<String>,
pub goods_name: Option<String>,
pub goods_thumbnail_url: Option<String>,
pub has_coupon: Option<bool>,
pub has_mall_coupon: Option<bool>,
pub lgst_txt: Option<String>,
pub mall_coupon_discount_pct: Option<u64>,
pub mall_coupon_end_time: Option<u64>,
pub mall_coupon_id: Option<u64>,
pub mall_coupon_max_discount_amount: Option<u64>,
pub mall_coupon_min_order_amount: Option<u64>,
pub mall_coupon_remain_quantity: Option<u64>,
pub mall_coupon_start_time: Option<u64>,
pub mall_coupon_total_quantity: Option<u64>,
pub mall_id: Option<u64>,
pub mall_cps: Option<u8>,
pub mall_name: Option<String>,
pub merchant_type: Option<u8>,
pub min_group_price: Option<u64>,
pub min_normal_price: Option<u64>,
pub only_scene_auth: Option<bool>,
pub opt_name: Option<String>,
pub sales_tip: Option<String>,
pub search_id: Option<String>,
pub plan_type: Option<u8>,
pub promotion_rate: Option<u64>,
pub zs_duo_id: Option<u64>,
pub predict_promotion_rate: Option<u64>,
pub opt_id: Option<u64>,
pub opt_ids: Option<Vec<u64>>,
pub serv_txt: Option<String>,
pub goods_sign: Option<String>,
pub video_urls: Option<String>,
pub unified_tags: Option<Vec<String>>,
}
impl Response <PddGoodsSearchResponse> for JsonValue {
fn parse_result(&self) -> LabradorResult<PddGoodsSearchResponse> {
serde_json::from_value::<PddGoodsSearchResponse>(self.to_owned()).map_err(LabraError::from)
}
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddAuthorityQueryResponse {
pub bind: Option<u8>,
}
impl Response <PddAuthorityQueryResponse> for JsonValue {
fn parse_result(&self) -> LabradorResult<PddAuthorityQueryResponse> {
serde_json::from_value::<PddAuthorityQueryResponse>(self.to_owned()).map_err(LabraError::from)
}
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddPromotionUrlGenerateResponse {
pub goods_promotion_url_list: Option<Vec<GoodsPromotionUrl>>,
}
#[derive(Debug, Deserialize,Serialize)]
pub struct GoodsPromotionUrl {
pub mobile_short_url: Option<String>,
pub mobile_url: Option<String>,
pub schema_url: Option<String>,
pub short_url: Option<String>,
pub url: Option<String>,
pub we_app_info: Option<WeAppInfo>,
pub qq_app_info: Option<QQAppInfo>,
}
#[derive(Debug, Deserialize,Serialize)]
pub struct QQAppInfo {
pub app_id: Option<String>,
pub banner_url: Option<String>,
pub desc: Option<String>,
pub page_path: Option<String>,
pub qq_app_icon_url: Option<String>,
pub source_display_name: Option<String>,
pub title: Option<String>,
pub user_name: Option<String>,
}
#[derive(Debug, Deserialize,Serialize)]
pub struct WeAppInfo {
pub app_id: Option<String>,
pub banner_url: Option<String>,
pub desc: Option<String>,
pub page_path: Option<String>,
pub we_app_icon_url: Option<String>,
pub source_display_name: Option<String>,
pub title: Option<String>,
pub user_name: Option<String>,
}
impl Response <PddPromotionUrlGenerateResponse> for JsonValue {
fn parse_result(&self) -> LabradorResult<PddPromotionUrlGenerateResponse> {
serde_json::from_value::<PddPromotionUrlGenerateResponse>(self.to_owned()).map_err(LabraError::from)
}
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddGoodsDetailResponse {
pub goods_details: Option<Vec<PddGoodsDetail>>,
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddGoodsDetail {
pub activity_tags: Option<Vec<u64>>,
pub service_tags: Option<Vec<u64>>,
pub cat_ids: Option<Vec<u64>>,
pub activity_type: Option<u64>,
pub clt_cpn_batch_sn: Option<String>,
pub clt_cpn_discount: Option<u64>,
pub clt_cpn_end_time: Option<u64>,
pub clt_cpn_min_amt: Option<u64>,
pub clt_cpn_quantity: Option<u64>,
pub clt_cpn_remain_quantity: Option<u64>,
pub clt_cpn_start_time: Option<u64>,
pub coupon_discount: Option<u64>,
pub coupon_end_time: Option<u64>,
pub coupon_min_order_amount: Option<u64>,
pub coupon_remain_quantity: Option<u64>,
pub coupon_start_time: Option<u64>,
pub coupon_total_quantity: Option<u64>,
pub create_at: Option<u64>,
pub desc_txt: Option<String>,
pub goods_desc: Option<String>,
pub goods_image_url: Option<String>,
pub goods_name: Option<String>,
pub goods_thumbnail_url: Option<String>,
pub has_coupon: Option<bool>,
pub has_mall_coupon: Option<bool>,
pub lgst_txt: Option<String>,
pub mall_coupon_discount_pct: Option<u64>,
pub mall_coupon_end_time: Option<u64>,
pub mall_coupon_id: Option<u64>,
pub mall_coupon_max_discount_amount: Option<u64>,
pub mall_coupon_min_order_amount: Option<u64>,
pub mall_coupon_remain_quantity: Option<u64>,
pub mall_coupon_start_time: Option<u64>,
pub mall_coupon_total_quantity: Option<u64>,
pub mall_id: Option<u64>,
pub mall_cps: Option<u8>,
pub mall_name: Option<String>,
pub merchant_type: Option<u8>,
pub min_group_price: Option<u64>,
pub min_normal_price: Option<u64>,
pub only_scene_auth: Option<bool>,
pub opt_name: Option<String>,
pub sales_tip: Option<String>,
pub search_id: Option<String>,
pub plan_type: Option<u8>,
pub promotion_rate: Option<u64>,
pub zs_duo_id: Option<u64>,
pub predict_promotion_rate: Option<u64>,
pub opt_id: Option<u64>,
pub cat_id: Option<u64>,
pub goods_id: Option<u64>,
pub opt_ids: Option<Vec<u64>>,
pub serv_txt: Option<String>,
pub goods_sign: Option<String>,
pub video_urls: Option<Vec<String>>,
pub unified_tags: Option<Vec<String>>,
pub goods_gallery_urls: Option<Vec<String>>,
}
impl Response <PddGoodsDetailResponse> for JsonValue {
fn parse_result(&self) -> LabradorResult<PddGoodsDetailResponse> {
serde_json::from_value::<PddGoodsDetailResponse>(self.to_owned()).map_err(LabraError::from)
}
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddZsUrlGenerateResponse {
pub mobile_short_url: Option<String>,
pub mobile_url: Option<String>,
pub multi_group_mobile_short_url: Option<String>,
pub multi_group_mobile_url: Option<String>,
pub multi_group_short_url: Option<String>,
pub multi_group_url: Option<String>,
pub short_url: Option<String>,
pub url: Option<String>,
}
impl Response <PddZsUrlGenerateResponse> for JsonValue {
fn parse_result(&self) -> LabradorResult<PddZsUrlGenerateResponse> {
serde_json::from_value::<PddZsUrlGenerateResponse>(self.to_owned()).map_err(LabraError::from)
}
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddGoodsTopResponse {
pub total: Option<u64>,
pub list: Option<Vec<PddTopItem>>,
pub list_id: Option<String>,
pub search_id: Option<String>,
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddTopItem {
pub cat_id: Option<String>,
pub cat_ids: Option<Vec<u64>>,
pub opt_ids: Option<Vec<u64>>,
pub coupon_discount: Option<u64>,
pub coupon_end_time: Option<u64>,
pub coupon_min_order_amount: Option<u64>,
pub coupon_price: Option<u64>,
pub coupon_remain_quantity: Option<u64>,
pub coupon_start_time: Option<u64>,
pub coupon_total_quantity: Option<u64>,
pub create_at: Option<u64>,
pub goods_id: Option<u64>,
pub goods_rate: Option<u64>,
pub desc_txt: Option<String>,
pub goods_desc: Option<String>,
pub goods_gallery_urls: Option<Vec<String>>,
pub goods_image_url: Option<String>,
pub goods_name: Option<String>,
pub goods_sign: Option<String>,
pub goods_thumbnail_url: Option<String>,
pub goods_type: Option<u64>,
pub mall_id: Option<u64>,
pub market_fee: Option<u64>,
pub min_group_price: Option<u64>,
pub min_normal_price: Option<u64>,
pub predict_promotion_rate: Option<u64>,
pub promotion_rate: Option<u64>,
pub has_coupon: Option<bool>,
pub lgst_txt: Option<String>,
pub mall_name: Option<String>,
pub merchant_type: Option<String>,
pub opt_id: Option<u64>,
pub opt_name: Option<String>,
pub qr_code_image_url: Option<String>,
pub sales_tip: Option<String>,
pub serv_txt: Option<String>,
pub share_desc: Option<String>,
pub search_id: Option<String>,
}
impl Response <PddGoodsTopResponse> for JsonValue {
fn parse_result(&self) -> LabradorResult<PddGoodsTopResponse> {
serde_json::from_value::<PddGoodsTopResponse>(self.to_owned()).map_err(LabraError::from)
}
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddRpUrlGenerateResponse {
pub resource_list: Option<ResourceList>,
pub url_list: Option<Vec<UrlList>>,
}
#[derive(Debug, Deserialize,Serialize)]
pub struct ResourceList {
pub desc: Option<String>,
pub url: Option<String>,
}
#[derive(Debug, Deserialize,Serialize)]
pub struct UrlList {
pub mobile_short_url: Option<String>,
pub mobile_url: Option<String>,
pub multi_group_mobile_short_url: Option<String>,
pub multi_group_mobile_url: Option<String>,
pub multi_group_short_url: Option<String>,
pub multi_group_url: Option<String>,
pub qq_app_info: Option<QQAppInfo>,
pub we_app_info: Option<WeAppInfo>,
pub schema_url: Option<String>,
pub short_url: Option<String>,
pub url: Option<String>,
}
impl Response <PddRpUrlGenerateResponse> for JsonValue {
fn parse_result(&self) -> LabradorResult<PddRpUrlGenerateResponse> {
serde_json::from_value::<PddRpUrlGenerateResponse>(self.to_owned()).map_err(LabraError::from)
}
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddCmsUrlGenerateResponse {
pub total: Option<u64>,
pub url_list: Option<Vec<UrlList>>,
pub multi_url_list: Option<UrlList>,
}
#[derive(Debug, Deserialize,Serialize)]
pub struct CmsUrlList {
pub mobile_short_url: Option<String>,
pub mobile_url: Option<String>,
pub multi_group_mobile_short_url: Option<String>,
pub multi_group_mobile_url: Option<String>,
pub multi_group_short_url: Option<String>,
pub single_url_list: Option<UrlList>,
pub multi_group_url: Option<UrlList>,
pub multi_url_list: Option<String>,
pub sign: Option<String>,
pub short_url: Option<String>,
pub url: Option<String>,
}
impl Response <PddCmsUrlGenerateResponse> for JsonValue {
fn parse_result(&self) -> LabradorResult<PddCmsUrlGenerateResponse> {
serde_json::from_value::<PddCmsUrlGenerateResponse>(self.to_owned()).map_err(LabraError::from)
}
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddOrderRangeQueryResponse {
pub last_order_id: Option<String>,
pub order_list: Option<Vec<PddOrderDetail>>,
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddOrderIncrementQueryResponse {
pub total_count: Option<u64>,
pub order_list: Option<Vec<PddOrderDetail>>,
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddOrderDetail {
pub auth_duo_id: Option<u64>,
pub goods_id: Option<u64>,
pub goods_quantity: Option<u64>,
pub group_id: Option<u64>,
pub goods_price: Option<u64>,
pub order_amount: Option<u64>,
pub cpa_new: Option<u8>,
pub is_direct: Option<u8>,
pub batch_no: Option<String>,
pub custom_parameters: Option<String>,
pub goods_thumbnail_url: Option<String>,
pub goods_sign: Option<String>,
pub fail_reason: Option<String>,
pub goods_name: Option<String>,
pub cat_ids: Option<Vec<u64>>,
pub order_create_time: Option<u64>,
pub order_group_success_time: Option<u64>,
pub order_modify_at: Option<u64>,
pub order_pay_time: Option<u64>,
pub order_receive_time: Option<u64>,
pub order_settle_time: Option<u64>,
pub order_sn: Option<String>,
pub order_status_desc: Option<String>,
pub p_id: Option<String>,
pub order_status: Option<u64>,
pub price_compare_status: Option<u8>,
pub order_verify_time: Option<u64>,
pub promotion_amount: Option<u64>,
pub promotion_rate: Option<u64>,
pub sep_duo_id: Option<u64>,
pub sep_market_fee: Option<u64>,
pub zs_duo_id: Option<u64>,
pub sep_rate: Option<u64>,
pub sep_parameters: Option<String>,
pub sep_pid: Option<String>,
#[serde(rename = "type")]
pub bill_type: Option<String>,
pub order_id: Option<String>,
}
impl Response <PddOrderRangeQueryResponse> for JsonValue {
fn parse_result(&self) -> LabradorResult<PddOrderRangeQueryResponse> {
serde_json::from_value::<PddOrderRangeQueryResponse>(self.to_owned()).map_err(LabraError::from)
}
}
impl Response <PddOrderIncrementQueryResponse> for JsonValue {
fn parse_result(&self) -> LabradorResult<PddOrderIncrementQueryResponse> {
serde_json::from_value::<PddOrderIncrementQueryResponse>(self.to_owned()).map_err(LabraError::from)
}
}
impl Response <PddOrderDetail> for JsonValue {
fn parse_result(&self) -> LabradorResult<PddOrderDetail> {
serde_json::from_value::<PddOrderDetail>(self.to_owned()).map_err(LabraError::from)
}
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddPidGenerateResponse {
pub remain_pid_count: Option<u64>,
pub p_id_list: Option<Vec<PidList>>,
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PidList {
pub create_time: Option<u64>,
pub media_id: Option<u64>,
pub pid_name: Option<String>,
pub p_id: Option<String>,
pub status: Option<u8>,
}
impl Response <PddPidGenerateResponse> for JsonValue {
fn parse_result(&self) -> LabradorResult<PddPidGenerateResponse> {
serde_json::from_value::<PddPidGenerateResponse>(self.to_owned()).map_err(LabraError::from)
}
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddPidQueryResponse {
pub total_count: Option<u64>,
pub p_id_list: Option<Vec<PidList>>,
}
impl Response <PddPidQueryResponse> for JsonValue {
fn parse_result(&self) -> LabradorResult<PddPidQueryResponse> {
serde_json::from_value::<PddPidQueryResponse>(self.to_owned()).map_err(LabraError::from)
}
}
#[derive(Debug, Deserialize,Serialize)]
pub struct PddPidBindMediaResponse {
pub msg: Option<String>,
pub result: Option<bool>,
}
impl Response <PddPidBindMediaResponse> for JsonValue {
fn parse_result(&self) -> LabradorResult<PddPidBindMediaResponse> {
if let Some(res) = self.get("result") {
let msg = if let Some(msg) = res.get("msg") {
msg.as_str().unwrap_or_default().to_owned()
} else {
String::default()
};
let result = if let Some(result) = res.get("msg") {
result.as_bool().unwrap_or_default().to_owned()
} else {
false
};
Ok(PddPidBindMediaResponse{ msg: msg.into(), result: result.into()})
} else {
Err(LabraError::MissingField("返回结果有误,缺少字段。".to_owned()))
}
}
}