lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README

order_economics.rs (6398B)


      1 #![forbid(unsafe_code)]
      2 
      3 #[cfg(not(feature = "std"))]
      4 use alloc::{string::String, vec::Vec};
      5 
      6 use radroots_core::{Currency, Decimal, Money, Unit};
      7 
      8 use crate::id::{InventoryBinId, OrderQuoteId};
      9 
     10 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))]
     11 #[cfg_attr(all(test, feature = "std"), dto(export))]
     12 #[cfg_attr(all(test, feature = "std"), dto(ts(name = "OrderItem")))]
     13 #[cfg_attr(
     14     any(feature = "serde", test),
     15     derive(serde::Serialize, serde::Deserialize)
     16 )]
     17 #[derive(Clone, Debug, PartialEq, Eq)]
     18 pub struct OrderItem {
     19     pub bin_id: InventoryBinId,
     20     pub bin_count: u32,
     21 }
     22 
     23 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))]
     24 #[cfg_attr(all(test, feature = "std"), dto(export))]
     25 #[cfg_attr(all(test, feature = "std"), dto(ts(name = "OrderPricingBasis")))]
     26 #[cfg_attr(
     27     any(feature = "serde", test),
     28     derive(serde::Serialize, serde::Deserialize)
     29 )]
     30 #[cfg_attr(any(feature = "serde", test), serde(rename_all = "snake_case"))]
     31 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
     32 pub enum OrderPricingBasis {
     33     #[cfg_attr(any(feature = "serde", test), serde(rename = "listing_event"))]
     34     ListingEvent,
     35 }
     36 
     37 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))]
     38 #[cfg_attr(all(test, feature = "std"), dto(export))]
     39 #[cfg_attr(all(test, feature = "std"), dto(ts(name = "OrderEconomicLineKind")))]
     40 #[cfg_attr(
     41     any(feature = "serde", test),
     42     derive(serde::Serialize, serde::Deserialize)
     43 )]
     44 #[cfg_attr(any(feature = "serde", test), serde(rename_all = "snake_case"))]
     45 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
     46 pub enum OrderEconomicLineKind {
     47     #[cfg_attr(any(feature = "serde", test), serde(rename = "listing_discount"))]
     48     ListingDiscount,
     49     #[cfg_attr(any(feature = "serde", test), serde(rename = "basket_adjustment"))]
     50     BasketAdjustment,
     51     #[cfg_attr(any(feature = "serde", test), serde(rename = "revision_adjustment"))]
     52     RevisionAdjustment,
     53 }
     54 
     55 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))]
     56 #[cfg_attr(all(test, feature = "std"), dto(export))]
     57 #[cfg_attr(all(test, feature = "std"), dto(ts(name = "OrderEconomicActor")))]
     58 #[cfg_attr(
     59     any(feature = "serde", test),
     60     derive(serde::Serialize, serde::Deserialize)
     61 )]
     62 #[cfg_attr(any(feature = "serde", test), serde(rename_all = "snake_case"))]
     63 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
     64 pub enum OrderEconomicActor {
     65     #[cfg_attr(any(feature = "serde", test), serde(rename = "buyer"))]
     66     Buyer,
     67     #[cfg_attr(any(feature = "serde", test), serde(rename = "seller"))]
     68     Seller,
     69 }
     70 
     71 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))]
     72 #[cfg_attr(all(test, feature = "std"), dto(export))]
     73 #[cfg_attr(all(test, feature = "std"), dto(ts(name = "OrderEconomicEffect")))]
     74 #[cfg_attr(
     75     any(feature = "serde", test),
     76     derive(serde::Serialize, serde::Deserialize)
     77 )]
     78 #[cfg_attr(any(feature = "serde", test), serde(rename_all = "snake_case"))]
     79 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
     80 pub enum OrderEconomicEffect {
     81     #[cfg_attr(any(feature = "serde", test), serde(rename = "increase"))]
     82     Increase,
     83     #[cfg_attr(any(feature = "serde", test), serde(rename = "decrease"))]
     84     Decrease,
     85 }
     86 
     87 #[cfg_attr(
     88     any(feature = "serde", test),
     89     derive(serde::Serialize, serde::Deserialize)
     90 )]
     91 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))]
     92 #[cfg_attr(all(test, feature = "std"), dto(export))]
     93 #[derive(Clone, Debug, PartialEq, Eq)]
     94 pub struct OrderEconomicItem {
     95     pub bin_id: InventoryBinId,
     96     pub bin_count: u32,
     97     #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Decimal")))]
     98     pub quantity_amount: Decimal,
     99     #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Unit")))]
    100     pub quantity_unit: Unit,
    101     #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Decimal")))]
    102     pub unit_price_amount: Decimal,
    103     #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Currency")))]
    104     pub unit_price_currency: Currency,
    105     #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))]
    106     pub line_subtotal: Money,
    107 }
    108 
    109 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))]
    110 #[cfg_attr(all(test, feature = "std"), dto(export))]
    111 #[cfg_attr(all(test, feature = "std"), dto(ts(name = "OrderEconomicLine")))]
    112 #[cfg_attr(
    113     any(feature = "serde", test),
    114     derive(serde::Serialize, serde::Deserialize)
    115 )]
    116 #[derive(Clone, Debug, PartialEq, Eq)]
    117 pub struct OrderEconomicLine {
    118     pub id: String,
    119     pub kind: OrderEconomicLineKind,
    120     pub actor: OrderEconomicActor,
    121     pub effect: OrderEconomicEffect,
    122     #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))]
    123     pub amount: Money,
    124     pub reason: String,
    125 }
    126 
    127 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))]
    128 #[cfg_attr(all(test, feature = "std"), dto(export))]
    129 #[cfg_attr(all(test, feature = "std"), dto(ts(name = "OrderEconomicTotals")))]
    130 #[cfg_attr(
    131     any(feature = "serde", test),
    132     derive(serde::Serialize, serde::Deserialize)
    133 )]
    134 #[derive(Clone, Debug, PartialEq, Eq)]
    135 pub struct OrderEconomicTotals {
    136     #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))]
    137     pub subtotal: Money,
    138     #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))]
    139     pub discount_total: Money,
    140     #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))]
    141     pub adjustment_total: Money,
    142     #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))]
    143     pub total: Money,
    144 }
    145 
    146 #[cfg_attr(
    147     any(feature = "serde", test),
    148     derive(serde::Serialize, serde::Deserialize)
    149 )]
    150 #[cfg_attr(all(test, feature = "std"), derive(dto_bindgen::Dto))]
    151 #[cfg_attr(all(test, feature = "std"), dto(export))]
    152 #[derive(Clone, Debug, PartialEq, Eq)]
    153 pub struct OrderEconomics {
    154     pub quote_id: OrderQuoteId,
    155     pub quote_version: u32,
    156     pub pricing_basis: OrderPricingBasis,
    157     #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Currency")))]
    158     pub currency: Currency,
    159     pub items: Vec<OrderEconomicItem>,
    160     pub discounts: Vec<OrderEconomicLine>,
    161     pub adjustments: Vec<OrderEconomicLine>,
    162     #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))]
    163     pub subtotal: Money,
    164     #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))]
    165     pub discount_total: Money,
    166     #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))]
    167     pub adjustment_total: Money,
    168     #[cfg_attr(all(test, feature = "std"), dto(ts(type = "Money")))]
    169     pub total: Money,
    170 }