use std::collections::BTreeMap;
use serde::Serialize;
use serde_json::Value;
use crate::taobao::method::TaobaoMethod;
use crate::TaobaoRequest;
#[derive(Debug, Serialize, Default)]
pub struct TbMaterialSelectRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub page_size: Option<u64>,
pub adzone_id: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_no: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device_value: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device_encrypt: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content_id: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content_source: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub favorites_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub item_id: Option<u64>,
pub material_id: u64,
}
impl TaobaoRequest for TbMaterialSelectRequest {
fn get_api_method_name(&self) -> TaobaoMethod {
TaobaoMethod::MaterialSelect
}
fn get_text_params(&self) -> BTreeMap<String, String> {
let mut params = BTreeMap::new();
let v = serde_json::to_value(self).unwrap_or(Value::Null);
if let Some(data) = v.as_object() {
for (k, v) in data.into_iter() {
if v.is_null() {
continue;
}
params.insert(k.to_string(), v.to_string());
}
}
params
}
}
#[derive(Debug, Serialize, Default)]
pub struct TbJhsSearchRequest {
pub current_page: Option<u64>,
pub page_size: Option<u64>,
pub pid: String,
pub postage: Option<bool>,
pub status: Option<u8>,
pub taobao_category_id: Option<u64>,
pub word: Option<String>,
}
impl TaobaoRequest for TbJhsSearchRequest {
fn get_api_method_name(&self) -> TaobaoMethod {
TaobaoMethod::JhsSearch
}
fn get_text_params(&self) -> BTreeMap<String, String> {
BTreeMap::from([("param_top_item_query".to_string(), serde_json::to_string(&self).unwrap_or_default())])
}
}
#[derive(Debug, Serialize, Default)]
pub struct TbItemDetailRequest {
pub num_iids: Option<String>,
pub platform: Option<u8>,
pub ip: Option<String>,
}
impl TaobaoRequest for TbItemDetailRequest {
fn get_api_method_name(&self) -> TaobaoMethod {
TaobaoMethod::ItemDetail
}
fn get_text_params(&self) -> BTreeMap<String, String> {
let mut params = BTreeMap::new();
params.insert("num_iids".to_string(), self.num_iids.to_owned().unwrap_or_default().to_string());
if let Some(platform) = &self.platform {
params.insert("platform".to_string(), platform.to_string());
}
if let Some(ip) = &self.ip {
params.insert("ip".to_string(), ip.to_string());
}
params
}
}
#[derive(Debug, Serialize, Default)]
pub struct TbCouponDetailRequest {
pub me: Option<String>,
pub item_id: Option<u64>,
pub activity_id: Option<String>,
}
impl TaobaoRequest for TbCouponDetailRequest {
fn get_api_method_name(&self) -> TaobaoMethod {
TaobaoMethod::CouponDetail
}
fn get_text_params(&self) -> BTreeMap<String, String> {
let mut params = BTreeMap::new();
if let Some(item_id) = &self.item_id {
params.insert("item_id".to_string(), item_id.to_string());
}
if let Some(me) = &self.me {
params.insert("me".to_string(), me.to_string());
}
if let Some(activity_id) = &self.activity_id {
params.insert("activity_id".to_string(), activity_id.to_string());
}
params
}
}
#[derive(Debug, Serialize, Default)]
pub struct TbCreateTPwdRequest {
pub user_id: Option<String>,
pub text: String,
pub url: String,
pub logo: Option<String>,
}
impl TaobaoRequest for TbCreateTPwdRequest {
fn get_api_method_name(&self) -> TaobaoMethod {
TaobaoMethod::CreateTPwd
}
fn get_text_params(&self) -> BTreeMap<String, String> {
let mut params = BTreeMap::new();
if let Some(user_id) = &self.user_id {
params.insert("user_id".to_string(), user_id.to_string());
}
if let Some(logo) = &self.logo {
params.insert("logo".to_string(), logo.to_string());
}
params.insert("url".to_string(), self.url.to_string());
params.insert("text".to_string(), self.text.to_string());
params
}
}
#[derive(Debug, Serialize, Default)]
pub struct TbSpreadGetRequest {
pub requests: Vec<SpreadGetUrl>,
}
#[derive(Debug, Serialize, Default)]
pub struct SpreadGetUrl {
pub url: Option<String>,
}
impl TaobaoRequest for TbSpreadGetRequest {
fn get_api_method_name(&self) -> TaobaoMethod {
TaobaoMethod::SpreadGet
}
fn get_text_params(&self) -> BTreeMap<String, String> {
let mut params = BTreeMap::new();
params.insert("requests".to_string(), serde_json::to_string(&self.requests).unwrap_or_default());
params
}
}
#[derive(Debug, Serialize, Default)]
pub struct TbTPwdReportGetRequest {
pub tao_password: String,
pub adzone_id: u64,
}
impl TaobaoRequest for TbTPwdReportGetRequest {
fn get_api_method_name(&self) -> TaobaoMethod {
TaobaoMethod::GetTPwdReport
}
fn get_text_params(&self) -> BTreeMap<String, String> {
let mut params = BTreeMap::new();
params.insert("tao_password".to_string(), self.tao_password.to_string());
params.insert("adzone_id".to_string(), self.adzone_id.to_string());
params
}
}
#[derive(Debug, Serialize, Default)]
pub struct TbGetActivityInfoRequest {
pub activity_material_id: String,
pub adzone_id: u64,
pub sub_pid: Option<String>,
pub relation_id: Option<String>,
pub union_id: Option<String>,
}
impl TaobaoRequest for TbGetActivityInfoRequest {
fn get_api_method_name(&self) -> TaobaoMethod {
TaobaoMethod::GetTPwdReport
}
fn get_text_params(&self) -> BTreeMap<String, String> {
let mut params = BTreeMap::new();
params.insert("activity_material_id".to_string(), self.activity_material_id.to_string());
params.insert("adzone_id".to_string(), self.adzone_id.to_string());
if let Some(sub_pid) = &self.sub_pid {
params.insert("sub_pid".to_string(), sub_pid.to_string());
}
if let Some(relation_id) = &self.relation_id {
params.insert("relation_id".to_string(), relation_id.to_string());
}
if let Some(union_id) = &self.union_id {
params.insert("union_id".to_string(), union_id.to_string());
}
params
}
}
#[derive(Debug, Serialize, Default)]
pub struct TbMaterialSearchRequest {
pub page_size: Option<u64>,
pub adzone_id: u64,
pub page_no: Option<u64>,
pub platform: Option<u8>,
pub end_tk_rate: Option<u64>,
pub start_tk_rate: Option<u64>,
pub end_price: Option<u64>,
pub start_price: Option<u64>,
pub end_ka_tk_rate: Option<u64>,
pub start_ka_tk_rate: Option<u64>,
pub is_tmall: Option<bool>,
pub has_coupon: Option<bool>,
pub need_free_shipment: Option<bool>,
pub need_prepay: Option<bool>,
pub include_good_rate: Option<bool>,
pub include_pay_rate_30: Option<bool>,
pub include_rfd_rate: Option<bool>,
pub npx_level: Option<u8>,
pub sort: Option<String>,
pub itemloc: Option<String>,
pub ip: Option<String>,
pub q: Option<String>,
pub cat: Option<String>,
pub material_id: Option<u64>,
pub item_id: Option<u64>,
pub device_value: Option<String>,
pub device_encrypt: Option<String>,
pub longitude: Option<String>,
pub latitude: Option<String>,
pub city_code: Option<String>,
pub seller_ids: Option<String>,
pub special_id: Option<String>,
pub relation_id: Option<String>,
pub device_type: Option<String>,
pub lock_rate_end_time: Option<u64>,
pub lock_rate_start_time: Option<u64>,
}
impl TaobaoRequest for TbMaterialSearchRequest {
fn get_api_method_name(&self) -> TaobaoMethod {
TaobaoMethod::MaterialSearch
}
fn get_text_params(&self) -> BTreeMap<String, String> {
let mut params = BTreeMap::new();
params.insert("adzone_id".to_string(), self.adzone_id.to_string());
if let Some(page_size) = &self.page_size {
params.insert("page_size".to_string(), page_size.to_string());
}
if let Some(material_id) = &self.material_id {
params.insert("material_id".to_string(), material_id.to_string());
}
if let Some(page_no) = &self.page_no {
params.insert("page_no".to_string(), page_no.to_string());
}
if let Some(item_id) = &self.item_id {
params.insert("item_id".to_string(), item_id.to_string());
}
if let Some(q) = &self.q {
params.insert("q".to_string(), q.to_string());
}
if let Some(cat) = self.cat.to_owned() {
params.insert("cat".to_owned(), cat.to_string());
}
params
}
}