Эх сурвалжийг харах

Enforce a more specific transaction ordering.

Kestrel 2 долоо хоног өмнө
parent
commit
7f0cd56d7e

+ 8 - 1
src/data.rs

@@ -129,6 +129,13 @@ impl Transaction {
     }
 }
 
+fn transaction_order(tx1: &TransactionRef, tx2: &TransactionRef) -> std::cmp::Ordering {
+    match tx1.borrow().datestamp.cmp(&tx2.borrow().datestamp) {
+        std::cmp::Ordering::Equal => tx1.borrow().id().cmp(&tx2.borrow().id()),
+        cmp => cmp
+    }
+}
+
 #[derive(Clone)]
 pub struct TransactionRef(std::rc::Rc<std::cell::RefCell<Transaction>>);
 
@@ -365,7 +372,7 @@ impl Hoard {
 
         self.account_ledger_data
             .values_mut()
-            .for_each(|v| v.sort_by_key(|t| t.borrow().datestamp));
+            .for_each(|v| v.sort_by(transaction_order));
     }
 
     pub fn all_raw_ledger_data(&self) -> &[RawLedgerEntry] {

+ 1 - 1
src/data/format.rs

@@ -104,7 +104,7 @@ pub fn format_ledger<'l>(
         let mut outfile = fsdata.try_write(filename)?;
 
         for (_span, mut les) in entries {
-            les.sort_by_key(|le| le.as_transaction().map(|tx| tx.datestamp));
+            les.sort_by_key(|le| le.as_transaction().map(|tx| (tx.datestamp, tx.id())));
             for le in les {
                 match le {
                     RawLedgerEntry::Transaction(tx) => {

+ 0 - 2
src/data/parse.rs

@@ -1,5 +1,3 @@
-use std::collections::BTreeMap;
-
 use chumsky::{prelude::*, text::inline_whitespace};
 
 use crate::prelude::*;