diff --git a/src/main.rs b/src/main.rs index 7f4c9cc..1c299bf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -37,6 +37,7 @@ #![allow(unsafe_code)] #![allow(unused_variables)] #![allow(dead_code)] + use std::fs::File; use std::fs::OpenOptions; use std::path::Path; @@ -756,6 +757,77 @@ impl Market { } } +fn process_file(fname: &str) { + println!("Processing file: {}",fname) + } + + +fn interactive(m: &mut Market) { + println!("Trading interactively in Tuesday Markets (demo)"); + let stdin = io::stdin(); + let mut trader:usize=0; + for line in stdin.lock().lines() { + match line { + Ok(input) => { + let tokens: Vec<&str> = input.split_whitespace().collect(); + match tokens.as_slice() { + ["dump"] => m.dump(), + ["login", username] => + if let Some(t)=m.trader_name2num.get_mut(*username) { trader=*t; println!("Logged in as {}",m.traders[trader].name) } else { println!("Trader {} not found.",username) }, + ["whoami" ] => { println!("Logged in as {}, id {}",m.traders[trader].name,trader ); } + ["addtrader", username] => { let id=m.register_trader(username); println!("Added user {} as id {}",username,id); }, + ["balances"] => { + println!("Balances for trader {}",m.traders[trader].name); + for (key,value) in &m.traders[trader].balances { println!(" {} {}",m.number_to_name(*key),value); } + } + ["addasset", assetname] => { + if let Some(cur)=m.register_asset(assetname) { println!("Added asset {} ",m.number_to_name(cur)) } + else { println!("Asset {} already exists.",assetname) } + } + ["addfunds", username, qty0, cur0 ] => { + let id=m.trader_name2num.get(*username); + let qty=FiNum::new_str(qty0); + let cur=m.name_to_number(cur0); + if id.is_none() { println!("Could not find trader {}",username); } + else if qty.is_zero() { println!("Could not parse quantity {}",qty0) } + else if cur.is_none() { println!("Could not find asset {}",cur0) } + else { + let id=*id.unwrap(); + let cur=*cur.unwrap(); + m.add_trader_balance(id,cur,qty); + println!("Added {} {} to {}",qty,m.number_to_asset(cur).name,m.traders[id].name) + } + } + ["order", qty0, cur0, qty1, cur1 ] => { + let qty0=FiNum::new_str(qty0); + let cur0=m.name_to_number(cur0); + let qty1=FiNum::new_str(qty1); + let cur1=m.name_to_number(cur1); + if !qty0.is_zero() && cur0.is_some() && !qty1.is_zero() && cur1.is_some() { + m.make_order(trader,*cur0.unwrap(),*cur1.unwrap(),qty0,qty1); + } + } + ["quit"] => { + break; + } + _ => println!("Invalid command. Please try again."), + } + } + Err(error) => println!("Error reading input: {}", error), + } + } +} + +fn erase(filename: &str) { + // Stub function for erasing a file + println!("Erasing file: {}", filename); +} + +fn copy(source: &str, destination: &str) { + // Stub function for copying a file + println!("Copying file from {} to {}", source, destination); +} + fn tokens_to_command(m: &Market, logged_in: usize, tokens: Vec<&str>) -> Command { let cmd:Command=match &tokens[..] {