polyester/codecs/decode/
money.rs1use crate::types::{AssetAmount, Price, Quantity, QuantityDomain};
4
5pub fn decode_price_ticks(ticks: i64, symbol: Option<String>) -> Option<Price> {
6 if ticks == 0 {
7 return None;
8 }
9 Price::from_ticks(ticks, symbol).ok()
10}
11
12pub fn decode_qty_scaled(
13 scaled: i64,
14 scale: Option<u32>,
15 symbol: Option<String>,
16 symbol_id: Option<u32>,
17) -> Option<Quantity> {
18 if scaled == 0 {
19 return None;
20 }
21 Quantity::from_scaled(scaled, scale, QuantityDomain::OrderBase, symbol, symbol_id).ok()
22}
23
24pub fn decode_qty_scaled_allow_zero(
29 scaled: i64,
30 scale: Option<u32>,
31 symbol: Option<String>,
32 symbol_id: Option<u32>,
33) -> Option<Quantity> {
34 if scaled < 0 {
35 return None;
36 }
37 Quantity::from_scaled(scaled, scale, QuantityDomain::OrderBase, symbol, symbol_id).ok()
38}
39
40pub fn decode_asset_amount_u128(
42 hi: u64,
43 lo: u64,
44 scale: Option<u32>,
45 domain: QuantityDomain,
46 asset_id: Option<u32>,
47) -> Option<AssetAmount> {
48 let value = (u128::from(hi) << 64) | u128::from(lo);
49 let scaled = i128::try_from(value).ok()?;
50 AssetAmount::from_scaled(scaled, scale, domain, asset_id).ok()
51}