Skip to main content

icydb_model/base/types/
finance.rs

1//! Module: base::types::finance
2//!
3//! Responsibility: base domain type declarations.
4//! Does not own: runtime storage, query execution, or validator implementation internals.
5//! Boundary: declares macro-modeled domain wrappers and records for downstream schemas.
6
7use crate::prelude::*;
8
9///
10/// Usd
11///
12/// Decimal amount denominated in USD.
13/// - Enforces at most 2 decimal places.
14/// - Must be non-negative.
15///
16
17#[newtype(
18    primitive = "Decimal",
19    item(prim = "Decimal", scale = 2),
20    ty(
21        normalizer(path = "base::normalizer::num::RoundDecimalPlaces", args(2)),
22        rule(name = "nonnegative", kind = "numeric_minimum_inclusive", args(0))
23    )
24)]
25pub struct Usd {}
26
27///
28/// E8s
29///
30/// Decimal amount constrained to at most 8 decimal places and non-negative.
31///
32
33#[newtype(
34    primitive = "Decimal",
35    item(prim = "Decimal", scale = 8),
36    ty(rule(name = "nonnegative", kind = "numeric_minimum_inclusive", args(0)))
37)]
38pub struct E8s {}
39
40///
41/// E18s
42///
43/// Decimal amount constrained to at most 18 decimal places and non-negative.
44///
45
46#[newtype(
47    primitive = "Decimal",
48    item(prim = "Decimal", scale = 18),
49    ty(rule(name = "nonnegative", kind = "numeric_minimum_inclusive", args(0)))
50)]
51pub struct E18s {}