Commit graph

10 commits

Author SHA1 Message Date
Bruno BELANYI 6df9c9d7a9 ledger: process deposits and withdrawals 2022-08-23 15:35:53 +02:00
Bruno BELANYI a00567cadc ledger: introduce 'Ledger' type
Unfortunately, rust-csv does not support serializing maps [1], so
instead of trying to write a `Deserialize` impl, the `dump_csv` method
takes care of formatting the output as expected.

[1]: https://github.com/BurntSushi/rust-csv/issues/98
2022-08-23 14:05:57 +02:00
Bruno BELANYI ab8ecf8121 transaction: use proper 'ParseError' type 2022-08-23 14:05:03 +02:00
Bruno BELANYI 19b5f3390d core: add arithmetic operators for 'TxAmount' 2022-08-23 14:05:03 +02:00
Bruno BELANYI 963748e1d9 core: define 'TxAmount::ZERO' 2022-08-23 14:05:03 +02:00
Bruno BELANYI ffd6a20a30 transaction: add CSV deserialization
It is unfortunate that both [1] and [2] conspire to make this code way
worse than it could otherwise be with a saner (de)serialization format.

We both need to introduce `TransactionRecord` due to tagged enums not
being powerful enough in CSV, and make its `amount` field optional to
deal with the varying number of fields for each kind of transaction.

[1]: https://github.com/BurntSushi/rust-csv/issues/211
[2]: https://github.com/BurntSushi/rust-csv/issues/172
2022-08-23 14:05:03 +02:00
Bruno BELANYI c7e64692e6 lib: add 'Transaction' variants
Represent each enum variant with its own type to allow stronger typing
when processing only a singular type of transactions.
2022-08-23 14:05:03 +02:00
Bruno BELANYI eae54b8ce0 lib: add core type definitions 2022-08-23 14:05:03 +02:00
Bruno BELANYI 1ea0505098 cargo: move 'processor' to 'bin' directory
I like to keep executables in their own folders, and the as much of the
business logic in a library at the root.
2022-08-22 17:49:06 +02:00
Bruno BELANYI 7797f40d2e cargo: init build system 2022-08-22 17:11:53 +02:00