# bean-rs Basic [beancount](https://github.com/beancount/beancount) clone (one day...) in Rust! Still very very alpha and doesn't do most things that are necessary to be at all useful. Python bindings are a WIP using [PyO3](https://pyo3.rs); The libraries: - Rust: [crates/bean-rs](https://crates.io/crates/bean-rs) - Python: [pypi/bean-rs](https://pypi.org/project/bean-rs/) Planned features: - [x] Parse beancount files using [pest](https://pest.rs/) - [x] Stricter transaction keywords - [x] Propagate line numbers for debugging - [x] Calculate account balances - [x] Use proper Decimal handling - [x] Validate transactions against `open`/`close` directives - [x] Validate `balance` directives - [x] Pad statements - [x] Open/close with multiple currencies - [x] Add Python bindings - [ ] Support `includes` - [ ] Come up with a more punny name - [ ] Currency conversions - [ ] Price/cost and FIFO ## (Deliberate) differences from beancount - Postings can't omit the currency ## Use from Rust ### Install ```bash cargo install bean-rs ``` ### Run ```bash $ bean-rs Usage: bean-rs Commands: balance Display account balances check Check for errors and quit help Print this message or the help of the given subcommand(s) Options: -h, --help Print help -V, --version Print version ``` #### Calculate balances ```bash bean-rs balance example.bean ``` ## Use from Python More to come... ```python import bean_rs ledger = bean_rs.py_load("example.bean") print(ledger.opts) ``` ## Development ### Build ```bash make build ``` ### Test ```bash make test ```