ztk_rust_sdk/jd/
enums.rs

1//! 京东平台枚举类型
2//!
3//! 定义京东平台特有的枚举类型
4
5use serde::{Deserialize, Serialize};
6use serde_repr::{Deserialize_repr, Serialize_repr};
7
8/// 京粉频道 ID
9///
10/// 京东京粉精选商品的频道分类
11#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize_repr, Deserialize_repr)]
12#[repr(u32)]
13pub enum JdEliteId {
14    /// 好券商品
15    GoodCoupon = 1,
16    /// 精选卖场
17    Selected = 2,
18    /// 9.9 包邮
19    NineNine = 10,
20    /// 京东配送
21    JdDelivery = 15,
22    /// 实时热销榜
23    HotSale = 22,
24    /// 为你推荐
25    Recommend = 23,
26    /// 数码家电
27    Digital = 24,
28    /// 超市
29    Supermarket = 25,
30    /// 母婴玩具
31    Baby = 26,
32    /// 家具日用
33    Home = 27,
34    /// 美妆穿搭
35    Beauty = 28,
36    /// 图书文具
37    Book = 30,
38    /// 今日必推
39    TodayMust = 31,
40    /// 京东好物
41    JdGood = 32,
42    /// 京东秒杀
43    Seckill = 33,
44    /// 拼购商品
45    Pingou = 34,
46    /// 高收益榜
47    HighProfit = 40,
48    /// 自营热卖榜
49    SelfHot = 41,
50    /// 秒杀进行中
51    SeckillNow = 108,
52    /// 新品首发
53    NewProduct = 109,
54    /// 自营
55    SelfOperated = 110,
56    /// 京东爆品
57    JdHot = 112,
58    /// 首购商品
59    FirstBuy = 125,
60    /// 高佣榜单
61    HighCommission = 129,
62    /// 视频商品
63    Video = 130,
64    /// 历史最低价商品榜
65    LowestPrice = 153,
66}
67
68impl Default for JdEliteId {
69    fn default() -> Self {
70        JdEliteId::GoodCoupon
71    }
72}
73
74/// 京东排序字段
75///
76/// 京东商品查询的排序字段选项
77#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
78#[serde(rename_all = "camelCase")]
79pub enum JdSortField {
80    /// 单价
81    Price,
82    /// 佣金比例
83    CommissionShare,
84    /// 佣金
85    Commission,
86    /// 30天引单量
87    InOrderCount30DaysSku,
88    /// 评论数
89    Comments,
90    /// 好评数
91    GoodComments,
92}
93
94impl Default for JdSortField {
95    fn default() -> Self {
96        JdSortField::InOrderCount30DaysSku
97    }
98}
99
100/// 转链类型 (京东)
101///
102/// 控制京东转链返回的链接类型
103#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize_repr, Deserialize_repr)]
104#[repr(u8)]
105pub enum JdChainType {
106    /// 长链
107    Long = 1,
108    /// 短链
109    Short = 2,
110    /// 长链+短链
111    Both = 3,
112}
113
114impl Default for JdChainType {
115    fn default() -> Self {
116        JdChainType::Short
117    }
118}
119
120/// 京东订单查询类型
121///
122/// 控制订单查询的时间维度
123#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize_repr, Deserialize_repr)]
124#[repr(u8)]
125pub enum JdOrderQueryType {
126    /// 按下单时间
127    OrderTime = 1,
128    /// 按完成时间
129    FinishTime = 2,
130    /// 按更新时间
131    UpdateTime = 3,
132}
133
134impl Default for JdOrderQueryType {
135    fn default() -> Self {
136        JdOrderQueryType::OrderTime
137    }
138}
139
140#[cfg(test)]
141mod tests {
142    use super::*;
143
144    #[test]
145    fn test_jd_elite_id_serialize() {
146        let value = JdEliteId::HotSale;
147        let json = serde_json::to_string(&value).unwrap();
148        assert_eq!(json, "22");
149    }
150
151    #[test]
152    fn test_jd_elite_id_deserialize() {
153        let value: JdEliteId = serde_json::from_str("33").unwrap();
154        assert_eq!(value, JdEliteId::Seckill);
155    }
156
157    #[test]
158    fn test_jd_sort_field_serialize() {
159        let value = JdSortField::CommissionShare;
160        let json = serde_json::to_string(&value).unwrap();
161        assert_eq!(json, "\"commissionShare\"");
162    }
163
164    #[test]
165    fn test_jd_sort_field_deserialize() {
166        let value: JdSortField = serde_json::from_str("\"price\"").unwrap();
167        assert_eq!(value, JdSortField::Price);
168    }
169
170    #[test]
171    fn test_jd_chain_type_serialize() {
172        let value = JdChainType::Short;
173        let json = serde_json::to_string(&value).unwrap();
174        assert_eq!(json, "2");
175    }
176
177    #[test]
178    fn test_jd_chain_type_deserialize() {
179        let value: JdChainType = serde_json::from_str("1").unwrap();
180        assert_eq!(value, JdChainType::Long);
181    }
182
183    #[test]
184    fn test_jd_order_query_type_serialize() {
185        let value = JdOrderQueryType::UpdateTime;
186        let json = serde_json::to_string(&value).unwrap();
187        assert_eq!(json, "3");
188    }
189
190    #[test]
191    fn test_jd_order_query_type_deserialize() {
192        let value: JdOrderQueryType = serde_json::from_str("2").unwrap();
193        assert_eq!(value, JdOrderQueryType::FinishTime);
194    }
195
196    #[test]
197    fn test_default_values() {
198        assert_eq!(JdEliteId::default(), JdEliteId::GoodCoupon);
199        assert_eq!(JdSortField::default(), JdSortField::InOrderCount30DaysSku);
200        assert_eq!(JdChainType::default(), JdChainType::Short);
201        assert_eq!(JdOrderQueryType::default(), JdOrderQueryType::OrderTime);
202    }
203}