// Minimal embedding demo. Everything below is pure MoonBit: the same code
// compiles for native, wasm-gc and JavaScript hosts.
//
// moon run examples/library_demo
///|
fn demo_ledger() -> String {
"option \"title\" \"Library demo\"\n" +
"2024-01-01 open Assets:Cash USD\n" +
"2024-01-01 open Equity:Opening USD\n" +
"2024-01-01 open Expenses:Food USD\n" +
"2024-01-02 * \"Opening\"\n" +
" Assets:Cash 100.00 USD\n" +
" Equity:Opening -100.00 USD\n" +
"2024-01-03 * \"Cafe\" \"Coffee\"\n" +
" Assets:Cash -8.00 USD\n" +
" Expenses:Food 8.00 USD\n"
}
///|
fn main {
let source = demo_ledger()
let ledger = @moonbean.check_source("demo.beancount", source)
println("errors: " + ledger.error_count().to_string())
let realized = @moonbean.realize(ledger)
println("Assets:Cash inventory:")
for position in realized.inventory("Assets:Cash").positions {
println(" " + position.to_string())
}
let result = @moonbean.run_query(
ledger, "SELECT account, sum(units) FROM postings GROUP BY account ORDER BY account",
)
println(result.to_text())
println(@moonbean.format_source(source))
}