Enable access to timestamps for directives

korrat
Dec 17, 2022, 10:16 AM
SMBQYFPGAKUWTAAJDS4VW3YI4OC3XPXIXJYJ5MBEGNH7FKGIVYJAC

Dependencies

  • [2] 4UOASAH3 Make Acc and AccountTemplate zero-copy deserializable
  • [3] SEEWF7KX Implement metadata on transactions
  • [4] W3MWSSJ7 Add a templating engine for accounts
  • [*] YDK6X6PP add a library of important types for beancount
  • [*] T2S6UAVJ Include builder methods on beancount-types
  • [*] 2JBFREZG enable additional warnings
  • [*] R7S2CWF7 Add type for account segments
  • [*] UESS5YZE migrate dependencies into workspace manifest

Change contents

  • edit in common/beancount-types/src/transaction.rs at line 8
    [7.19]
    [8.3480]
    use time::format_description::well_known::Rfc3339;
  • edit in common/beancount-types/src/transaction.rs at line 10
    [8.3496]
    [8.3496]
    use time::OffsetDateTime;
  • edit in common/beancount-types/src/transaction.rs at line 293
    [3.2434]
    [6.1347]
    impl Transaction {
    #[inline]
    pub fn timestamp(&self) -> Option<OffsetDateTime> {
    self.metadata
    .key_value
    .get("timestamp")
    .and_then(MetadataValue::as_str)
    .and_then(|timestamp| OffsetDateTime::parse(timestamp, &Rfc3339).ok())
    }
    }
  • edit in common/beancount-types/src/metadata.rs at line 17
    [3.2982]
    [3.2982]
    }
    impl Key {
    pub const unsafe fn from_unchecked(name: String) -> Self {
    Self { name }
    }
    }
    impl Borrow<str> for Key {
    fn borrow(&self) -> &str {
    &self.name
    }
  • replacement in common/beancount-types/src/metadata.rs at line 200
    [3.6532][3.6532:6557]()
    link.fmt(f)?
    [3.6532]
    [3.6557]
    write!(f, "\n {link}")?;
    }
    for (key, value) in &self.key_value {
    write!(f, "\n {key}: {value}")?;
  • edit in common/beancount-types/src/metadata.rs at line 214
    [3.6691]
    [3.6691]
    }
    impl Value {
    pub fn as_str(&self) -> Option<&str> {
    let Self::String(inner) = self;
    Some(inner)
    }
  • edit in common/beancount-types/src/lib.rs at line 1
    [6.5874]
    [9.0]
    #![warn(clippy::all, clippy::pedantic)]
  • edit in common/beancount-types/src/lib.rs at line 27
    [6.5914]
    [6.5914]
    use time::OffsetDateTime;
  • edit in common/beancount-types/src/lib.rs at line 58
    [6.6949]
    [6.6949]
    }
    }
    pub fn timestamp(&self) -> Option<OffsetDateTime> {
    match self {
    Directive::Balance(balance) => balance.timestamp(),
    Directive::Transaction(transaction) => transaction.timestamp(),
  • edit in common/beancount-types/src/balance.rs at line 5
    [8.6264]
    [8.6264]
    use time::OffsetDateTime;
    use time_tz::PrimitiveDateTimeExt;
  • edit in common/beancount-types/src/balance.rs at line 20
    [6.9539]
    [6.9539]
    impl Balance {
    #[inline]
    pub fn timestamp(&self) -> Option<OffsetDateTime> {
    // Balance statements occur first thing in the day
    let local_timestamp = self.date.midnight();
    let timezone = time_tz::system::get_timezone().ok()?;
    local_timestamp.assume_timezone(timezone).take_first()
    }
    }
  • edit in common/beancount-types/src/account/template.rs at line 7
    [2.348][2.348:373]()
    use serde::Deserializer;
  • replacement in common/beancount-types/src/account/template.rs at line 123
    [4.12675][4.12675:12710]()
    account.join(&segment)
    [4.12675]
    [4.12710]
    account.join(segment)
  • edit in common/beancount-types/Cargo.toml at line 23
    [10.456]
    [6.26127]
    time-tz.workspace = true