#![forbid(unsafe_code)]
#![warn(missing_docs)]
pub mod amount;
pub mod cost;
pub mod directive;
pub mod display_context;
pub mod extract;
pub mod format;
pub mod intern;
pub mod inventory;
pub mod position;
pub mod synthetic;
#[cfg(kani)]
mod kani_proofs;
pub use amount::{Amount, IncompleteAmount};
pub use cost::{Cost, CostSpec};
pub use directive::{
Balance, Close, Commodity, Custom, Directive, DirectivePriority, Document, Event, MetaValue,
Metadata, Note, Open, Pad, Posting, Price, PriceAnnotation, Query, Transaction,
sort_directives,
};
pub use display_context::DisplayContext;
pub use extract::{
DEFAULT_CURRENCIES, extract_accounts, extract_accounts_iter, extract_currencies,
extract_currencies_iter, extract_payees, extract_payees_iter,
};
pub use format::{FormatConfig, format_directive};
pub use intern::{InternedStr, StringInterner};
pub use inventory::{AccountedBookingError, BookingError, BookingMethod, BookingResult, Inventory};
pub use position::Position;
pub type NaiveDate = jiff::civil::Date;
pub use rust_decimal::Decimal;
#[must_use]
pub fn naive_date(year: i32, month: u32, day: u32) -> Option<NaiveDate> {
i16::try_from(year)
.ok()
.and_then(|y| i8::try_from(month).ok().map(|m| (y, m)))
.and_then(|(y, m)| i8::try_from(day).ok().map(|d| (y, m, d)))
.and_then(|(y, m, d)| NaiveDate::new(y, m, d).ok())
}
#[cfg(feature = "rkyv")]
pub use intern::{AsDecimal, AsInternedStr, AsNaiveDate};