mod balance;
mod declarations;
mod names;
mod transaction;
pub use balance::{Amount, Balance};
pub use declarations::{Close, Commodity, Open, Payee};
pub use names::{AccountName, CommodityName, Metadata, MetadataKey};
pub use transaction::{Posting, Transaction, TransactionStatus};
#[derive(Debug, Clone, PartialEq)]
pub struct Journal {
pub entries: Vec<Entry>,
}
impl Journal {
pub fn entries(&self) -> &[Entry] {
&self.entries
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum Entry {
Open(Open),
Close(Close),
Commodity(Commodity),
Payee(Payee),
Transaction(Transaction),
Balance(Balance),
}
impl Entry {
pub fn date(&self) -> Option<chrono::NaiveDate> {
match self {
Entry::Open(open) => Some(open.date),
Entry::Close(close) => Some(close.date),
Entry::Commodity(commodity) => Some(commodity.date),
Entry::Payee(_) => None,
Entry::Transaction(transaction) => Some(transaction.date),
Entry::Balance(balance) => Some(balance.date),
}
}
}