lib.rs (14051B)
1 pub use radroots_trade as upstream; 2 3 pub mod dto; 4 5 pub use dto::dto_roots; 6 7 #[derive(Clone, Copy, Debug, Eq, PartialEq)] 8 pub enum TradeTypeDisposition { 9 SourceTradeRoot, 10 EventsBindingImport, 11 SdkLocalPackageShape, 12 } 13 14 #[derive(Clone, Copy, Debug, Eq, PartialEq)] 15 pub struct TradeTypeInventoryEntry { 16 pub export_name: &'static str, 17 pub disposition: TradeTypeDisposition, 18 } 19 20 #[derive(Clone, Copy, Debug, Eq, PartialEq)] 21 pub enum TradeLargeIntegerPolicy { 22 JsonNumberSafeCount, 23 } 24 25 #[derive(Clone, Copy, Debug, Eq, PartialEq)] 26 pub struct TradeLargeIntegerPolicyEntry { 27 pub type_name: &'static str, 28 pub field_name: &'static str, 29 pub policy: TradeLargeIntegerPolicy, 30 } 31 32 pub const TRADE_TYPE_INVENTORY: &[TradeTypeInventoryEntry] = &[ 33 event_import("RadrootsFarmRef"), 34 event_import("RadrootsListing"), 35 event_import("RadrootsListingAvailability"), 36 event_import("RadrootsListingBin"), 37 event_import("RadrootsListingDeliveryMethod"), 38 event_import("RadrootsListingLocation"), 39 event_import("RadrootsListingProduct"), 40 event_import("RadrootsListingStatus"), 41 local_shape("RadrootsTradeFacetCount"), 42 source_root("RadrootsTradeListing"), 43 local_shape("RadrootsTradeListingBackofficeOverlay"), 44 local_shape("RadrootsTradeListingBackofficeQuery"), 45 local_shape("RadrootsTradeListingBackofficeView"), 46 local_shape("RadrootsTradeListingBinProjection"), 47 local_shape("RadrootsTradeListingFacets"), 48 local_shape("RadrootsTradeListingMarketStatus"), 49 local_shape("RadrootsTradeListingProjection"), 50 local_shape("RadrootsTradeListingQuery"), 51 local_shape("RadrootsTradeListingSort"), 52 local_shape("RadrootsTradeListingSortField"), 53 source_root("RadrootsTradeListingSubtotal"), 54 source_root("RadrootsTradeListingTotal"), 55 local_shape("RadrootsTradeMarketplaceListingSummary"), 56 local_shape("RadrootsTradeMarketplaceOrderSummary"), 57 event_import("RadrootsTradeMessageType"), 58 local_shape("RadrootsTradeModerationFlag"), 59 local_shape("RadrootsTradeModerationSeverity"), 60 local_shape("RadrootsTradeModerationStatus"), 61 local_shape("RadrootsTradeOrderBackofficeOverlay"), 62 local_shape("RadrootsTradeOrderBackofficeQuery"), 63 local_shape("RadrootsTradeOrderBackofficeView"), 64 local_shape("RadrootsTradeOrderFacets"), 65 local_shape("RadrootsTradeOrderQuery"), 66 local_shape("RadrootsTradeOrderSort"), 67 local_shape("RadrootsTradeOrderSortField"), 68 event_import("RadrootsTradeOrderStatus"), 69 local_shape("RadrootsTradeOrderWorkflowMessage"), 70 local_shape("RadrootsTradeOrderWorkflowProjection"), 71 local_shape("RadrootsTradeReviewPriority"), 72 local_shape("RadrootsTradeReviewQueueEntry"), 73 local_shape("RadrootsTradeReviewStatus"), 74 local_shape("RadrootsTradeSortDirection"), 75 ]; 76 77 pub const TRADE_LARGE_INTEGER_POLICIES: &[TradeLargeIntegerPolicyEntry] = &[ 78 json_number_safe_count("RadrootsTradeFacetCount", "count"), 79 json_number_safe_count( 80 "RadrootsTradeListingBackofficeView", 81 "open_moderation_flag_count", 82 ), 83 json_number_safe_count("RadrootsTradeListingProjection", "order_count"), 84 json_number_safe_count("RadrootsTradeListingProjection", "open_order_count"), 85 json_number_safe_count("RadrootsTradeListingProjection", "terminal_order_count"), 86 json_number_safe_count("RadrootsTradeMarketplaceListingSummary", "order_count"), 87 json_number_safe_count("RadrootsTradeMarketplaceListingSummary", "open_order_count"), 88 json_number_safe_count( 89 "RadrootsTradeMarketplaceListingSummary", 90 "terminal_order_count", 91 ), 92 json_number_safe_count("RadrootsTradeMarketplaceOrderSummary", "item_count"), 93 json_number_safe_count("RadrootsTradeMarketplaceOrderSummary", "total_bin_count"), 94 json_number_safe_count( 95 "RadrootsTradeOrderBackofficeView", 96 "open_moderation_flag_count", 97 ), 98 json_number_safe_count("RadrootsTradeOrderWorkflowProjection", "question_count"), 99 json_number_safe_count("RadrootsTradeOrderWorkflowProjection", "answer_count"), 100 json_number_safe_count("RadrootsTradeOrderWorkflowProjection", "revision_count"), 101 json_number_safe_count( 102 "RadrootsTradeOrderWorkflowProjection", 103 "discount_request_count", 104 ), 105 json_number_safe_count( 106 "RadrootsTradeOrderWorkflowProjection", 107 "discount_offer_count", 108 ), 109 json_number_safe_count( 110 "RadrootsTradeOrderWorkflowProjection", 111 "discount_accept_count", 112 ), 113 json_number_safe_count( 114 "RadrootsTradeOrderWorkflowProjection", 115 "discount_decline_count", 116 ), 117 json_number_safe_count("RadrootsTradeOrderWorkflowProjection", "cancellation_count"), 118 ]; 119 120 const fn source_root(export_name: &'static str) -> TradeTypeInventoryEntry { 121 TradeTypeInventoryEntry { 122 export_name, 123 disposition: TradeTypeDisposition::SourceTradeRoot, 124 } 125 } 126 127 const fn event_import(export_name: &'static str) -> TradeTypeInventoryEntry { 128 TradeTypeInventoryEntry { 129 export_name, 130 disposition: TradeTypeDisposition::EventsBindingImport, 131 } 132 } 133 134 const fn local_shape(export_name: &'static str) -> TradeTypeInventoryEntry { 135 TradeTypeInventoryEntry { 136 export_name, 137 disposition: TradeTypeDisposition::SdkLocalPackageShape, 138 } 139 } 140 141 const fn json_number_safe_count( 142 type_name: &'static str, 143 field_name: &'static str, 144 ) -> TradeLargeIntegerPolicyEntry { 145 TradeLargeIntegerPolicyEntry { 146 type_name, 147 field_name, 148 policy: TradeLargeIntegerPolicy::JsonNumberSafeCount, 149 } 150 } 151 152 #[cfg(test)] 153 mod tests { 154 use super::{ 155 TRADE_LARGE_INTEGER_POLICIES, TRADE_TYPE_INVENTORY, TradeTypeDisposition, dto_roots, 156 }; 157 158 #[test] 159 fn trade_dto_roots_build_registry() { 160 let registry = dto_bindgen_core::build_registry(dto_roots()); 161 162 assert!( 163 !registry.has_errors(), 164 "trade binding registry has diagnostics: {:?}", 165 registry.diagnostics 166 ); 167 } 168 169 #[test] 170 fn trade_type_inventory_is_deterministic() { 171 let expected = TRADE_TYPE_INVENTORY 172 .iter() 173 .map(|entry| entry.export_name) 174 .collect::<Vec<_>>(); 175 176 assert_eq!( 177 expected, 178 [ 179 "RadrootsFarmRef", 180 "RadrootsListing", 181 "RadrootsListingAvailability", 182 "RadrootsListingBin", 183 "RadrootsListingDeliveryMethod", 184 "RadrootsListingLocation", 185 "RadrootsListingProduct", 186 "RadrootsListingStatus", 187 "RadrootsTradeFacetCount", 188 "RadrootsTradeListing", 189 "RadrootsTradeListingBackofficeOverlay", 190 "RadrootsTradeListingBackofficeQuery", 191 "RadrootsTradeListingBackofficeView", 192 "RadrootsTradeListingBinProjection", 193 "RadrootsTradeListingFacets", 194 "RadrootsTradeListingMarketStatus", 195 "RadrootsTradeListingProjection", 196 "RadrootsTradeListingQuery", 197 "RadrootsTradeListingSort", 198 "RadrootsTradeListingSortField", 199 "RadrootsTradeListingSubtotal", 200 "RadrootsTradeListingTotal", 201 "RadrootsTradeMarketplaceListingSummary", 202 "RadrootsTradeMarketplaceOrderSummary", 203 "RadrootsTradeMessageType", 204 "RadrootsTradeModerationFlag", 205 "RadrootsTradeModerationSeverity", 206 "RadrootsTradeModerationStatus", 207 "RadrootsTradeOrderBackofficeOverlay", 208 "RadrootsTradeOrderBackofficeQuery", 209 "RadrootsTradeOrderBackofficeView", 210 "RadrootsTradeOrderFacets", 211 "RadrootsTradeOrderQuery", 212 "RadrootsTradeOrderSort", 213 "RadrootsTradeOrderSortField", 214 "RadrootsTradeOrderStatus", 215 "RadrootsTradeOrderWorkflowMessage", 216 "RadrootsTradeOrderWorkflowProjection", 217 "RadrootsTradeReviewPriority", 218 "RadrootsTradeReviewQueueEntry", 219 "RadrootsTradeReviewStatus", 220 "RadrootsTradeSortDirection" 221 ] 222 ); 223 } 224 225 #[test] 226 fn source_owned_trade_support_types_are_marked_for_event_import() { 227 for export_name in [ 228 "RadrootsFarmRef", 229 "RadrootsListing", 230 "RadrootsListingAvailability", 231 "RadrootsListingBin", 232 "RadrootsListingDeliveryMethod", 233 "RadrootsListingLocation", 234 "RadrootsListingProduct", 235 "RadrootsListingStatus", 236 "RadrootsTradeMessageType", 237 "RadrootsTradeOrderStatus", 238 ] { 239 assert_eq!( 240 disposition(export_name), 241 TradeTypeDisposition::EventsBindingImport 242 ); 243 } 244 } 245 246 #[test] 247 fn trade_source_roots_are_marked_for_source_registry() { 248 let source_roots = TRADE_TYPE_INVENTORY 249 .iter() 250 .filter(|entry| entry.disposition == TradeTypeDisposition::SourceTradeRoot) 251 .map(|entry| entry.export_name) 252 .collect::<Vec<_>>(); 253 254 assert_eq!( 255 source_roots, 256 [ 257 "RadrootsTradeListing", 258 "RadrootsTradeListingSubtotal", 259 "RadrootsTradeListingTotal" 260 ] 261 ); 262 } 263 264 #[test] 265 fn trade_large_integer_policy_covers_current_count_fields() { 266 let actual = TRADE_LARGE_INTEGER_POLICIES 267 .iter() 268 .map(|entry| (entry.type_name, entry.field_name, entry.policy)) 269 .collect::<Vec<_>>(); 270 271 assert_eq!( 272 actual, 273 [ 274 ( 275 "RadrootsTradeFacetCount", 276 "count", 277 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 278 ), 279 ( 280 "RadrootsTradeListingBackofficeView", 281 "open_moderation_flag_count", 282 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 283 ), 284 ( 285 "RadrootsTradeListingProjection", 286 "order_count", 287 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 288 ), 289 ( 290 "RadrootsTradeListingProjection", 291 "open_order_count", 292 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 293 ), 294 ( 295 "RadrootsTradeListingProjection", 296 "terminal_order_count", 297 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 298 ), 299 ( 300 "RadrootsTradeMarketplaceListingSummary", 301 "order_count", 302 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 303 ), 304 ( 305 "RadrootsTradeMarketplaceListingSummary", 306 "open_order_count", 307 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 308 ), 309 ( 310 "RadrootsTradeMarketplaceListingSummary", 311 "terminal_order_count", 312 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 313 ), 314 ( 315 "RadrootsTradeMarketplaceOrderSummary", 316 "item_count", 317 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 318 ), 319 ( 320 "RadrootsTradeMarketplaceOrderSummary", 321 "total_bin_count", 322 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 323 ), 324 ( 325 "RadrootsTradeOrderBackofficeView", 326 "open_moderation_flag_count", 327 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 328 ), 329 ( 330 "RadrootsTradeOrderWorkflowProjection", 331 "question_count", 332 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 333 ), 334 ( 335 "RadrootsTradeOrderWorkflowProjection", 336 "answer_count", 337 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 338 ), 339 ( 340 "RadrootsTradeOrderWorkflowProjection", 341 "revision_count", 342 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 343 ), 344 ( 345 "RadrootsTradeOrderWorkflowProjection", 346 "discount_request_count", 347 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 348 ), 349 ( 350 "RadrootsTradeOrderWorkflowProjection", 351 "discount_offer_count", 352 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 353 ), 354 ( 355 "RadrootsTradeOrderWorkflowProjection", 356 "discount_accept_count", 357 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 358 ), 359 ( 360 "RadrootsTradeOrderWorkflowProjection", 361 "discount_decline_count", 362 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 363 ), 364 ( 365 "RadrootsTradeOrderWorkflowProjection", 366 "cancellation_count", 367 super::TradeLargeIntegerPolicy::JsonNumberSafeCount 368 ), 369 ] 370 ); 371 } 372 373 fn disposition(export_name: &str) -> TradeTypeDisposition { 374 TRADE_TYPE_INVENTORY 375 .iter() 376 .find(|entry| entry.export_name == export_name) 377 .map(|entry| entry.disposition) 378 .expect("inventory entry") 379 } 380 }