A Rust crate to manage twitch-style bets (aka Parimutuel betting)
```rust use bets::{Bets, BetError, Amount};
fn betdemo() -> Result<(), BetError> { let bets = Bets::new("bets.db")?; // Create 3 accounts on server 1 with 100 starting coins bets.createaccount("server 1", "Alice", 100)?; bets.createaccount("server 1", "Bob", 100)?; bets.createaccount("server 1", "Charlie", 100)?; // Create a bet with 2 outcomes let betid = bets.create( "server 1", "Who will win the Rocket League 1v1 ?", vec!["Alice", "Bob"], )?; // Alice bets on herself (option with id 0) with 10 coins bets.bet("server 1", "Alice", betid, 0, 10)?; // Bob bets on himself (option with id 1) with 40 coins bets.bet("server 1", "Bob", betid, 1, 40)?; // Charlie bets on Alice with half of his coins (50) bets.bet("server 1", "Charlie", betid, 0, Amount::FRACTION(0.5))?; // asserts that the money is gone from their accounts asserteq!(bets.balance("server 1", "Alice")?, 90); asserteq!(bets.balance("server 1", "Bob")?, 60); asserteq!(bets.balance("server 1", "Charlie")?, 50); // lock the bet bets.lockbet(betid)?; // ... // Rocket league 1v1 occurs // ... // Alice ended up winning ! we resolve the bet with option of id 0 bets.closebet(betid, 0)?; // The winning side gets 10 + 40 + 50 = 100 coins // split proportionally among the betters asserteq!(bets.balance("server 1", "Alice"), 116); asserteq!(bets.balance("server 1", "Charlie"), 184); asserteq!(bets.balance("server 1", "Bob")?, 60); Ok(()); }
fn main() { if let Err(why) = bet_demo() { println!("{:?}", why); } } ```