diff --git a/server/src/vbox.rs b/server/src/vbox.rs index 0317d6bd..ad54fd7c 100644 --- a/server/src/vbox.rs +++ b/server/src/vbox.rs @@ -75,6 +75,8 @@ impl Vbox { return Err(err_msg("too many vars bound")); } + println!("{:?}", self.free); + self.free.get(i).ok_or(format_err!("no var at index {:?}", i))?; self.bound.push(self.free.remove(i)); @@ -83,7 +85,7 @@ impl Vbox { } } -pub fn vbox_write(vbox: Vbox, tx: &mut Transaction, account: &Account) -> Result { +pub fn vbox_create(vbox: Vbox, tx: &mut Transaction, account: &Account) -> Result { let vbox_bytes = to_vec(&vbox)?; let query = " @@ -102,6 +104,27 @@ pub fn vbox_write(vbox: Vbox, tx: &mut Transaction, account: &Account) -> Result return Ok(vbox); } +pub fn vbox_write(vbox: Vbox, tx: &mut Transaction) -> Result { + let vbox_bytes = to_vec(&vbox)?; + + let query = " + UPDATE vbox + SET data = $1 + WHERE id = $2 + RETURNING id, account, data; + "; + + let result = tx + .query(query, &[&vbox_bytes, &vbox.id])?; + + let _returned = result.iter().next().expect("no row returned"); + + // println!("{:?} wrote vbox", vbox.id); + + return Ok(vbox); +} + + pub fn vbox_get(tx: &mut Transaction, game_id: Uuid, account: &Account) -> Result { let query = " SELECT * @@ -127,17 +150,17 @@ pub fn vbox_get(tx: &mut Transaction, game_id: Uuid, account: &Account) -> Resul pub fn vbox_state(params: VboxStateParams, tx: &mut Transaction, account: &Account) -> Result { match vbox_get(tx, params.game_id, account) { - Ok(v) => Ok(v.fill()), + Ok(v) => Ok(v), Err(e) => { println!("{:?}", e); - vbox_write(Vbox::new(account.id, params.game_id).fill(), tx, account) + vbox_create(Vbox::new(account.id, params.game_id).fill(), tx, account) } } } pub fn vbox_discard(params: VboxDiscardParams, tx: &mut Transaction, account: &Account) -> Result { let vbox = vbox_get(tx, params.game_id, account)?; - return vbox_write(vbox.fill(), tx, account); + return vbox_write(vbox.fill(), tx); } pub fn vbox_accept(params: VboxAcceptParams, tx: &mut Transaction, account: &Account) -> Result { @@ -145,7 +168,7 @@ pub fn vbox_accept(params: VboxAcceptParams, tx: &mut Transaction, account: &Acc vbox.accept(params.index)?; - return vbox_write(vbox, tx, account); + return vbox_write(vbox, tx); } pub fn vbox_combine(params: VboxCombineParams, tx: &mut Transaction, account: &Account) -> Result {