use json; use serde_json; use std::io::prelude::*; use std::fs::File; use std::path::PathBuf; use actions::*; use knowledge::*; const STATE_FILE: &'static str = "state.json"; const COMMAND_FILE: &'static str = "command.txt"; const PLACE_FILE: &'static str = "place.txt"; const KNOWLEDGE_FILE: &'static str = "knowledge-state.json"; pub fn read_file(working_dir: &PathBuf) -> Result { let state_path = working_dir.join(STATE_FILE); let mut file = File::open(state_path.as_path()).map_err(|e| e.to_string())?; let mut content = String::new(); file.read_to_string(&mut content).map_err(|e| e.to_string())?; json::parse(content.as_ref()).map_err(|e| e.to_string()) } pub fn write_action(working_dir: &PathBuf, is_place_phase: bool, action: Action) -> Result<(), String> { let filename = if is_place_phase { PLACE_FILE } else { COMMAND_FILE }; let full_filename = working_dir.join(filename); let mut file = File::create(full_filename.as_path()).map_err(|e| e.to_string())?; write!(file, "{}", action).map_err(|e| e.to_string())?; println!("Making move: {}", action); Ok(()) } pub fn read_knowledge() -> Result { let mut file = File::open(KNOWLEDGE_FILE).map_err(|e| e.to_string())?; let mut content = String::new(); file.read_to_string(&mut content).map_err(|e| e.to_string())?; serde_json::from_str(content.as_ref()).map_err(|e| e.to_string()) } pub fn write_knowledge(knowledge: &Knowledge) -> Result<(), String> { let json = serde_json::to_string(knowledge).map_err(|e| e.to_string())?; let mut file = File::create(KNOWLEDGE_FILE).map_err(|e| e.to_string())?; write!(file, "{}", json).map_err(|e| e.to_string())?; Ok(()) }