Use destructuring for arg splitting in engine ui
This make the arg handling code less awkward.
This commit is contained in:
58
rs/src/ui.rs
58
rs/src/ui.rs
@@ -97,42 +97,48 @@ impl Ui {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn get_state(&self, args: &[&str]) -> Result<String, String> {
|
fn get_state(&self, args: &[&str]) -> Result<String, String> {
|
||||||
if !args.is_empty() {
|
if let [] = args {
|
||||||
Err("get_state takes no args".to_owned())
|
|
||||||
} else {
|
|
||||||
let result = format!("{}", self.board);
|
let result = format!("{}", self.board);
|
||||||
Ok(result)
|
Ok(result)
|
||||||
|
} else {
|
||||||
|
Err("get_state takes no args".to_owned())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn get_moves(&self, args: &[&str]) -> Result<String, String> {
|
fn get_moves(&self, args: &[&str]) -> Result<String, String> {
|
||||||
if args.len() != 1 {
|
if let [position_str] = args {
|
||||||
return Err("get_moves takes 1 arg".to_owned());
|
let position =
|
||||||
};
|
board::Position::parse(position_str).map_err(|_| {
|
||||||
let position = board::Position::parse(args[0])
|
format!("Error parsing position {}", position_str)
|
||||||
.map_err(|_| format!("Error parsing position {}", args[0]))?;
|
})?;
|
||||||
match self.board.get_legal_moves(&position) {
|
match self.board.get_legal_moves(&position) {
|
||||||
None => {
|
None => {
|
||||||
let error = format!("No moves possible from {}", position);
|
let error = format!("No moves possible from {}", position);
|
||||||
Err(error)
|
Err(error)
|
||||||
}
|
}
|
||||||
Some(positions) => {
|
Some(positions) => Ok(positions
|
||||||
Ok(positions.iter().map(|pos| format!("{}", pos)).collect())
|
.iter()
|
||||||
|
.map(|pos| format!("{}", pos))
|
||||||
|
.collect()),
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Err("get_moves takes 1 arg".to_owned())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn make_move(&mut self, args: &[&str]) -> Result<String, String> {
|
fn make_move(&mut self, args: &[&str]) -> Result<String, String> {
|
||||||
if args.len() != 2 {
|
if let [source_str, target_str] = args {
|
||||||
return Err("make_move takes 2 args".to_owned());
|
let source = board::Position::parse(source_str)
|
||||||
};
|
.map_err(|_| format!("Error parsing source {}", source_str))?;
|
||||||
let source = board::Position::parse(args[0])
|
let target = board::Position::parse(target_str)
|
||||||
.map_err(|_| format!("Error parsing source {}", args[0]))?;
|
.map_err(|_| format!("Error parsing target {}", target_str))?;
|
||||||
let target = board::Position::parse(args[1])
|
match self.board.make_move(&source, target) {
|
||||||
.map_err(|_| format!("Error parsing target {}", args[1]))?;
|
Err(()) => Err(format!(
|
||||||
match self.board.make_move(&source, target) {
|
"Move not possible {}-{}",
|
||||||
Err(()) => {
|
source_str, target_str
|
||||||
Err(format!("Move not possible {}-{}", args[0], args[1]))
|
)),
|
||||||
|
Ok(()) => Ok(self.board.to_string()),
|
||||||
}
|
}
|
||||||
Ok(()) => Ok(self.board.to_string()),
|
} else {
|
||||||
|
Err("make_move takes 2 args".to_owned())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn handle_command(&mut self, s: &str) -> Result<String, String> {
|
fn handle_command(&mut self, s: &str) -> Result<String, String> {
|
||||||
|
|||||||
Reference in New Issue
Block a user