1use chrono::NaiveDate;
2use rust_decimal::Decimal;
3use serde::{Deserialize, Serialize};
4
5#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
9pub struct CurrencyCode(pub String);
10
11impl From<&str> for CurrencyCode {
12 fn from(s: &str) -> Self {
13 Self(s.to_ascii_uppercase())
14 }
15}
16impl From<String> for CurrencyCode {
17 fn from(s: String) -> Self {
18 Self(s.to_ascii_uppercase())
19 }
20}
21
22#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
25#[derive(Debug, Clone, PartialEq)]
26pub struct Money {
27 pub amount: Decimal,
28 pub currency: Option<CurrencyCode>,
30 pub value_date: Option<NaiveDate>,
33}
34
35impl Money {
36 pub fn new(amount: Decimal) -> Self {
37 Self {
38 amount,
39 currency: None,
40 value_date: None,
41 }
42 }
43}