diff --git a/src/main.rs b/src/main.rs index c7945eb..f79b7e4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ - // +// // When inserting a new Order into the royalties tree, we must make sure the existing // royalties don't get shared with that new node. To do this, we must "shave" down // the tree, pushing royalties from the root down to all nodes to the left of the @@ -829,6 +829,7 @@ enum Result { AddedTrader(usize,String), AddedAsset(usize,String), PlacedOrder(usize, Vec), + RetractedOrder(usize), FundsRemaining(FiNum), ExecutedBatch(Vec), Error(String), @@ -844,7 +845,7 @@ enum Command { Order { user_id: usize, sell_type: usize, sell_qty: FiNum, buy_type: usize, buy_qty: FiNum }, OrderBatch { user_id: usize, sell_type: usize, sell_qty: FiNum, buy_type: usize, buy_qty: FiNum }, ExecuteBatch { asset_type0: usize, strike0: FiNum, asset_type1: usize, strike1: FiNum }, - Retract { order_id: usize }, + RetractOrder { order_id: usize }, Error(String), NOP(String), None, @@ -869,7 +870,7 @@ impl Command { => format!("ORB {} {} {} {} {}",user_id,sell_type,sell_qty.serialize(),buy_type,buy_qty.serialize()), Self::ExecuteBatch { asset_type0, strike0, asset_type1, strike1 } => format!("EXE {} {} {} {}",asset_type0,strike0.serialize(),asset_type1,strike1.serialize()), - Self::Retract { order_id } => format!("RE {}",order_id), + Self::RetractOrder { order_id } => format!("RE {}",order_id), Self::Error(str) => format!("NOP Error: {}",str), Self::NOP(str) => format!("NOP {}",clean(str)), _ => format!("NOP (This should never happen)"), @@ -894,7 +895,7 @@ impl Command { Self::OrderBatch { user_id: user_id.parse::().unwrap(), sell_type: sell_type.parse::().unwrap(), sell_qty: FiNum::new_deserialize(sell_qty), buy_type: buy_type.parse::().unwrap(), buy_qty: FiNum::new_deserialize(buy_qty) }, ["RE",order_id] => - Self::Retract { order_id: order_id:parse::().unwrap() }, + Self::RetractOrder { order_id: order_id.parse::().unwrap() }, ["EXE",asset_type0,strike0,asset_type1,strike1] => Self::ExecuteBatch { asset_type0: asset_type0.parse::().unwrap(),strike0: FiNum::new_deserialize(strike0), asset_type1: asset_type1.parse::().unwrap(), strike1: FiNum::new_deserialize(strike1) }, ["NOP", many_things @ ..] => Self::NOP(clean(&line)), @@ -963,7 +964,7 @@ impl Market { self.make_order(*user_id,*sell_type,*buy_type,*sell_qty,*buy_qty,false) } Command::RetractOrder { order_id } => { - self.retract_order(*order_id) + Result::Error(format!("Retract Order {} not yet implemented.",order_id)) } Command::ExecuteBatch { asset_type0, strike0, asset_type1, strike1 } => { self.execute_batch(*asset_type0, *strike0, *asset_type1, *strike1) @@ -1031,11 +1032,13 @@ fn tokens_to_command(m: &Market, logged_in: usize, tokens: Vec<&str>,line: &str) Command::SubFunds { user_id: user, asset_id: cur, amt: qty } } } - ["retract", order_id ] => { - let order_id=order_id.parse(); - if m.order_finder.contains_key(order_id) { - {*} - Command::Retract { order_id: order_id } + ["retract", p_order_id ] => { + let order_id:usize=p_order_id.parse().unwrap(); + if !m.order_finder.contains_key(&order_id) { return Command::Error(format!("Order not found: {}",p_order_id)) } + let trader=&m.traders[logged_in]; + let order_type=trader.order_finder.get(&order_id); + let order_queue=m.orders.get(order_type.expect("Retrieving Order Queue")); + Command::RetractOrder { order_id: order_id } } ["order", qty0, cur0, qty1, cur1 ] => { let qty0=FiNum::new_str(qty0);