Add a type for Beancount open directives
Dependencies
- [2]
OAOH3QOZExtract metadata into separate crate - [3]
DYRM6NNXUpdate licensing information - [4]
72AIO2FZUpgrade dependencies - [5]
6A5YLGWVAdd an importer for the VR-Bank CSV format - [6]
PUJBHX7CAdd importer for ECUS transactions - [7]
XWHISGCPExtract Amount into separate crate - [8]
UZFKS57SAllow expense account overrides by content type for Apple Store transactions - [9]
XQHYMSDYAdd importer for Union Investment transactions - [10]
2JBFREZGenable additional warnings - [11]
362NCCMXAdd importer for Apple Store - [12]
YDK6X6PPadd a library of important types for beancount - [13]
PCHAKXNMAdd an importer for Fidor account statements - [*]
576M5IPAAdd type for raw price specs - [*]
NG5QXPZHExtract Account into separate crate - [*]
I2P2FTLEadd basic parser for german decimals - [*]
5S4MZHL5pretty print decimals using icu - [*]
QRIJE4AQadd a simple pretty printer for beancount directives
Change contents
- replacement in importers/vr-bank/src/lib.rs at line 51
#[builder(field(ty = "HashMap<String, Account>"))]#[builder(field(ty = "HashMap<String, Account>"))] - replacement in importers/uniondepot/src/lib.rs at line 49
#[builder(field(ty = "HashMap<String, Commodity>"), setter(into))]#[builder(field(ty = "HashMap<String, Commodity>"), setter(into))] - replacement in importers/uniondepot/src/lib.rs at line 62
#[builder(field(ty = "HashMap<String, Commodity>"), setter(into))]#[builder(field(ty = "HashMap<String, Commodity>"), setter(into))] - replacement in importers/fidor/src/lib.rs at line 70
#[builder(field(ty = "HashMap<String, Account>"))]#[builder(field(ty = "HashMap<String, Account>"))] - replacement in importers/ecus/src/lib.rs at line 33
#[builder(field(ty = "HashMap<String, LocationInformation>"))]#[builder(field(ty = "HashMap<String, LocationInformation>"))] - replacement in importers/ecus/src/lib.rs at line 36
#[builder(field(ty = "Option<String>"), setter(into, strip_option))]#[builder(field(ty = "Option<String>"), setter(into, strip_option))] - replacement in importers/apple/src/transaction_history.rs at line 45
#[builder(field(ty = "HashMap<String, Account>"))]#[builder(field(ty = "HashMap<String, Account>"))] - edit in common/beancount-types/src/lib.rs at line 20
pub use beancount_open::Open; - edit in common/beancount-types/Cargo.toml at line 31
beancount-open.path = "../../beancount/open" - file addition: open[16.1]
- file addition: src[0.553]
- file addition: lib.rs[0.570]
// SPDX-FileCopyrightText: 2024 Markus Haug (Korrat)//// SPDX-License-Identifier: EUPL-1.2extern crate alloc;use core::fmt::Display;use core::hash::Hash;use alloc::collections::BTreeSet;use beancount_account::Account;use beancount_commodity::Commodity;use beancount_metadata::MetadataKey;use beancount_metadata::MetadataMap;use beancount_metadata::MetadataValue;use time::Date;use time::OffsetDateTime;use time_tz::PrimitiveDateTimeExt;#[derive(Clone, Debug, Eq, Hash, PartialEq)]pub struct Open {pub date: Date,pub account: Account,pub commodities: BTreeSet<Commodity>,pub booking: Option<String>,pub meta: MetadataMap,}impl Open {pub fn new(date: Date, account: impl Into<Account>, commodities: BTreeSet<Commodity>) -> Self {let (account, booking, meta) = (account.into(), None, MetadataMap::default());Self {date,account,commodities,booking,meta,}}}impl Open {#[inline]pub fn add_commodity(&mut self, commodity: impl Into<Commodity>) -> &mut Self {self.commodities.insert(commodity.into());self}#[inline]pub fn add_meta(&mut self,key: impl Into<MetadataKey>,value: impl Into<MetadataValue>,) -> &mut Self {self.meta.insert(key.into(), value.into());self}#[inline]pub fn clear_commodities(&mut self) -> &mut Self {self.commodities.clear();self}#[inline]pub fn clear_booking(&mut self) -> &mut Self {self.booking = None;self}#[inline]pub fn clear_meta(&mut self) -> &mut Self {self.meta.clear();self}#[inline]pub fn set_account(&mut self, account: impl Into<Account>) -> &mut Self {self.account = account.into();self}#[inline]pub fn set_booking(&mut self, booking: String) -> &mut Self {self.booking = Some(booking);self}#[inline]pub fn set_date(&mut self, date: Date) -> &mut Self {self.date = date;self}#[inline]pub fn set_commodities(&mut self, commodities: impl Into<BTreeSet<Commodity>>) -> &mut Self {self.commodities = commodities.into();self}#[inline]pub fn set_meta(&mut self, meta: impl Into<MetadataMap>) -> &mut Self {self.meta = meta.into();self}}impl Open {#[inline]#[must_use]pub fn timestamp(&self) -> Option<OffsetDateTime> {// Balance statements occur first thing in the daylet local_timestamp = self.date.midnight();let timezone = time_tz::system::get_timezone().ok()?;local_timestamp.assume_timezone(timezone).take_first()}}impl Display for Open {fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {let Self {date,account,commodities,booking,meta,} = self;write!(f, "{date} open {account}")?;for commodity in commodities {write!(f, " {commodity}")?;}if let Some(booking) = booking {write!(f, " {booking:?}")?;}for (key, value) in meta {write!(f, "\n {key}: {value}")?;}Ok(())}} - file addition: Cargo.toml[0.553]
# SPDX-FileCopyrightText: 2024 Markus Haug (Korrat)## SPDX-License-Identifier: EUPL-1.2[package]name = "beancount-open"authors.workspace = trueedition.workspace = truepublish.workspace = truerust-version.workspace = trueversion.workspace = true[dependencies]# Inherited dependenciestime.workspace = truetime-tz.workspace = true# Workspace dependenciesbeancount-account.path = "../account"beancount-commodity.path = "../commodity"beancount-metadata.path = "../metadata"[lints]workspace = true - edit in beancount/amount/src/lib.rs at line 7
- edit in Cargo.lock at line 362[18.3914][19.5470]
name = "beancount-open"version = "0.0.0-dev.0"dependencies = ["beancount-account","beancount-commodity","beancount-metadata","time 0.3.34","time-tz",][[package]] - edit in Cargo.lock at line 431
"beancount-open",