1#![forbid(unsafe_code)]
42#![warn(missing_docs)]
43
44pub mod amount;
45pub mod cost;
46pub mod directive;
47pub mod display_context;
48pub mod extract;
49pub mod format;
50pub mod identifiers;
51pub mod implicit_prices;
52pub mod intern;
53pub mod inventory;
54pub mod meta_json;
55pub mod position;
56pub mod shift_spans_impls;
57pub mod span;
58pub mod synthetic;
59pub mod visit;
60
61#[cfg(kani)]
63mod kani_proofs;
64
65pub use amount::{Amount, AmountParseError, AmountParseErrorReason, IncompleteAmount};
66pub use cost::{BookedCost, BookedCostInvariantError, Cost, CostNumber, CostSpec};
67pub use directive::{
68 Balance, Close, Commodity, Custom, Directive, DirectivePriority, Document, Event, MetaValue,
69 Metadata, Note, Open, Pad, Posting, Price, PriceAnnotation, PriceKind, Query, Transaction,
70 booking_sort_key, parse_precision_meta, sort_directives,
71};
72pub use display_context::{DEFAULT_CURRENCY, DisplayContext, Precision};
73pub use extract::{
74 DEFAULT_CURRENCIES, extract_accounts, extract_accounts_iter, extract_currencies,
75 extract_currencies_iter, extract_links, extract_links_iter, extract_payees,
76 extract_payees_iter, extract_tags, extract_tags_iter,
77};
78pub use format::{
79 Alignment, FormatConfig, FormatLine, format_directive_lines, format_directives,
80 format_posting_line, posting_format_line, render_lines, resolve_alignment,
81};
82pub use identifiers::{
83 ACCOUNT_TYPES, Account, Currency, Link, Tag, account_type, is_subaccount_or_equal,
84};
85pub use implicit_prices::extract_per_unit_price;
86pub use intern::{InternedStr, StringInterner};
87pub use inventory::{
88 AccountedBookingError, BookingError, BookingMethod, BookingResult, Inventory, ReductionScope,
89 sum_account_and_subaccounts,
90};
91pub use meta_json::{json_to_meta_value, meta_value_to_json, meta_value_type_tag};
92pub use position::Position;
93pub use span::{SYNTHESIZED_FILE_ID, ShiftSpans, Span, Spanned};
94pub use visit::{visit_accounts, visit_currencies};
95
96pub type NaiveDate = jiff::civil::Date;
99pub use rust_decimal::Decimal;
100
101#[must_use]
106pub fn naive_date(year: i32, month: u32, day: u32) -> Option<NaiveDate> {
107 let y = i16::try_from(year).ok()?;
108 let m = i8::try_from(month).ok()?;
109 let d = i8::try_from(day).ok()?;
110 NaiveDate::new(y, m, d).ok()
111}
112
113#[cfg(feature = "rkyv")]
115pub use intern::{AsDecimal, AsInternedStr, AsNaiveDate};