1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
use chrono::{DateTime, Utc}; use serde_json::Value; use utils::deserialize_timestamp; #[derive(Debug, Serialize, Deserialize)] #[allow(non_snake_case)] pub struct FeedAck { pub feedId: String, } #[derive(Debug, Serialize, Deserialize)] #[allow(non_snake_case)] pub struct FeedStatus { pub feedId: String, pub feedType: String, pub partnerId: String, pub itemsReceived: i32, pub itemsSucceeded: i32, pub itemsFailed: i32, pub itemsProcessing: i32, pub feedStatus: String, #[serde(deserialize_with="deserialize_timestamp")] pub feedDate: DateTime<Utc>, #[serde(deserialize_with="deserialize_timestamp")] pub modifiedDtm: DateTime<Utc>, pub fileName: Option<String>, pub itemDataErrorCount: i32, pub itemSystemErrorCount: i32, pub itemTimeoutErrorCount: i32, } #[derive(Debug, Serialize, Deserialize)] pub struct FeedStatusesResults { pub feed: Vec<FeedStatus>, } #[derive(Debug, Serialize, Deserialize)] #[allow(non_snake_case)] pub struct FeedStatuses { pub totalResults: i32, pub offset: i32, pub limit: i32, pub results: FeedStatusesResults, } #[derive(Debug, Serialize, Deserialize)] #[allow(non_snake_case)] pub struct ItemIngestionStatus { pub martId: i32, pub sku: String, pub wpid: String, pub ingestionStatus: String, pub ingestionErrors: IngestionErrors, } #[derive(Debug, Serialize, Deserialize)] #[allow(non_snake_case)] pub struct IngestionErrors { pub ingestionError: Value, } #[derive(Debug, Serialize, Deserialize)] #[allow(non_snake_case)] pub struct ItemDetails { pub itemIngestionStatus: Vec<ItemIngestionStatus>, } #[derive(Debug, Serialize, Deserialize)] #[allow(non_snake_case)] pub struct PartnerFeedResponse { pub feedId: String, pub feedStatus: String, pub ingestionErrors: IngestionErrors, pub itemsReceived: i32, pub itemsSucceeded: i32, pub itemsFailed: i32, pub itemsProcessing: i32, pub offset: i32, pub limit: i32, pub itemDetails: ItemDetails, } #[cfg(test)] mod tests { use super::*; use serde_json::from_str; #[test] fn deserialize_partner_feed_response() { from_str::<PartnerFeedResponse>(r##"{ "feedId": "117E39F0B7654B08A059457FB6E803FF@AQYBAAA", "feedStatus": "PROCESSED", "shipNode": null, "ingestionErrors": { "ingestionError": null }, "itemsReceived": 1, "itemsSucceeded": 0, "itemsFailed": 1, "itemsProcessing": 0, "offset": 0, "limit": 50, "itemDetails": { "itemIngestionStatus": [] } }"##).unwrap(); } }