use serde::Serialize;
#[derive(Debug, Clone, Serialize)]
pub struct ElemeConvertRequest {
pub sid: String,
#[serde(rename = "activity_id")]
pub activity_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub customer_id: Option<String>,
}
impl ElemeConvertRequest {
pub fn new(sid: impl Into<String>, activity_id: impl Into<String>) -> Self {
Self {
sid: sid.into(),
activity_id: activity_id.into(),
customer_id: None,
}
}
pub fn customer_id(mut self, customer_id: impl Into<String>) -> Self {
self.customer_id = Some(customer_id.into());
self
}
}
#[derive(Debug, Clone, Serialize)]
pub struct ElemeOrderQueryRequest {
#[serde(rename = "type")]
pub query_type: u32,
pub page: u32,
pub page_size: u32,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "startTime")]
pub start_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "endTime")]
pub end_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub orderid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sid: Option<String>,
#[serde(rename = "san_pingtai_id")]
pub san_pingtai_id: String,
}
impl ElemeOrderQueryRequest {
pub fn new(query_type: u32, page: u32, page_size: u32) -> Self {
Self {
query_type,
page,
page_size: page_size.min(50),
start_time: None,
end_time: None,
orderid: None,
sid: None,
san_pingtai_id: "8".to_string(), }
}
pub fn start_time(mut self, start_time: impl Into<String>) -> Self {
self.start_time = Some(start_time.into());
self
}
pub fn end_time(mut self, end_time: impl Into<String>) -> Self {
self.end_time = Some(end_time.into());
self
}
pub fn time_range(mut self, start: impl Into<String>, end: impl Into<String>) -> Self {
self.start_time = Some(start.into());
self.end_time = Some(end.into());
self
}
pub fn orderid(mut self, orderid: impl Into<String>) -> Self {
self.orderid = Some(orderid.into());
self
}
pub fn sid(mut self, sid: impl Into<String>) -> Self {
self.sid = Some(sid.into());
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_eleme_convert_request_serialize() {
let request = ElemeConvertRequest::new("sid123", "10144");
let json = serde_json::to_value(&request).unwrap();
assert_eq!(json["sid"], "sid123");
assert_eq!(json["activity_id"], "10144");
assert!(json.get("customer_id").is_none());
}
#[test]
fn test_eleme_convert_request_with_customer_id() {
let request = ElemeConvertRequest::new("sid123", "10144").customer_id("100000");
let json = serde_json::to_value(&request).unwrap();
assert_eq!(json["customer_id"], "100000");
}
#[test]
fn test_eleme_order_query_request_serialize() {
let request = ElemeOrderQueryRequest::new(1, 1, 50);
let json = serde_json::to_value(&request).unwrap();
assert_eq!(json["type"], 1);
assert_eq!(json["page"], 1);
assert_eq!(json["page_size"], 50);
assert_eq!(json["san_pingtai_id"], "8");
assert!(json.get("startTime").is_none());
}
#[test]
fn test_eleme_order_query_request_with_time_range() {
let request = ElemeOrderQueryRequest::new(1, 1, 50)
.time_range("2021-04-30 08:00:00", "2021-04-30 09:00:00")
.sid("sid123");
let json = serde_json::to_value(&request).unwrap();
assert_eq!(json["startTime"], "2021-04-30 08:00:00");
assert_eq!(json["endTime"], "2021-04-30 09:00:00");
assert_eq!(json["sid"], "sid123");
}
#[test]
fn test_eleme_order_query_page_size_limit() {
let request = ElemeOrderQueryRequest::new(1, 1, 100);
assert_eq!(request.page_size, 50); }
#[test]
fn test_optional_fields_not_serialized() {
let request = ElemeConvertRequest::new("sid", "10144");
let json_str = serde_json::to_string(&request).unwrap();
assert!(!json_str.contains("customer_id"));
}
}