Files
ingey/move-money-dynamic/src/lib.rs
2026-04-02 20:57:41 +10:30

48 lines
1.6 KiB
Rust

use crate::bindings::{CsvReaders, CsvWriter, Guest, ReadMap};
use crate::move_money::move_money;
#[allow(warnings)]
mod bindings;
pub mod move_money;
struct Component;
impl Guest for Component {
fn evaluate(properties: ReadMap, readers: CsvReaders, writer: CsvWriter) -> () {
let accounts_reader = readers.read_into_string("Account");
let cost_centres_reader = readers.read_into_string("CostCentre");
let lines = readers.read_into_string("Line");
let rules = readers.read_into_string("Rule");
let use_numeric_accounts = properties
.get("use_numeric_accounts")
.map(|param| param == "true")
.unwrap_or(false);
let flush_pass = properties
.get("flush_pass")
.map(|param| param == "true")
.unwrap_or(false);
let mut output_writer = csv::Writer::from_writer(vec![]);
let result = move_money(
&mut csv::Reader::from_reader(rules.as_bytes()),
&mut csv::Reader::from_reader(lines.as_bytes()),
&mut csv::Reader::from_reader(accounts_reader.as_bytes()),
&mut csv::Reader::from_reader(cost_centres_reader.as_bytes()),
&mut output_writer,
use_numeric_accounts,
flush_pass,
);
match result {
Ok(_) => {
let inner = output_writer.into_inner().unwrap();
let wrapped = String::from_utf8(inner).unwrap();
writer.write_string(wrapped.as_str());
}
Err(e) => {}
}
}
}
bindings::export!(Component with_types_in bindings);