From ac00337a4463f3cbef963916c4e794ddddac421a Mon Sep 17 00:00:00 2001 From: Dan Schafer Date: Thu, 17 Jul 2025 10:25:16 -0700 Subject: [PATCH 1/2] Use bail! and ensure! helpers --- src/board.rs | 6 +++--- src/file.rs | 21 ++++++++++----------- src/solvestate.rs | 4 ++-- src/squarecolor.rs | 4 ++-- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/board.rs b/src/board.rs index 95b918e..8c697f3 100644 --- a/src/board.rs +++ b/src/board.rs @@ -3,7 +3,7 @@ use std::{ str::FromStr, }; -use anyhow::{Result, anyhow}; +use anyhow::{Result, bail}; use itertools::{Itertools, Position, iproduct}; use crate::{ @@ -352,9 +352,9 @@ impl FromStr for Board { if line.len() != size { let row_num = line_num + 1; let row_len = line.len(); - return Err(anyhow!( + bail!( "Invalid board: row {row_num} has {row_len} entries but the board is {size} rows long." - )); + ); } } let colors = lines diff --git a/src/file.rs b/src/file.rs index 5dcf5f2..cd44daa 100644 --- a/src/file.rs +++ b/src/file.rs @@ -1,6 +1,6 @@ use std::{fmt::Display, str::FromStr}; -use anyhow::{Context, Result, anyhow}; +use anyhow::{Context, Result, bail, ensure}; use image::ImageReader; use crate::{ @@ -60,9 +60,9 @@ impl FromStr for InputSquares { if line.len() != size { let row_num = line_num + 1; let row_len = line.len(); - return Err(anyhow!( + bail!( "Invalid solve state squares: row {row_num} has {row_len} entries but the board is {size} rows long." - )); + ); } } let solve_state_squares = lines @@ -115,16 +115,15 @@ impl FromStr for QueensFile { fn from_str(s: &str) -> Result { let lines = s.trim().lines().collect::>(); let lines_len = lines.len(); - if lines_len == 0 { - return Err(anyhow!("Invalid solve state: no lines found.")); - } + ensure!(lines_len != 0, "Invalid solve state: no lines found."); + let size = lines[0].len(); let is_squares_formatted = lines_len == (1 + size * 2) && lines[size].is_empty(); - if lines_len != size && !is_squares_formatted { - return Err(anyhow!( - "Invalid solve state: {lines_len} lines for size {size}." - )); - } + ensure!( + lines_len == size || is_squares_formatted, + "Invalid solve state: {lines_len} lines for size {size}." + ); + let board = Board::from_str(&lines[0..size].join("\n"))?; let squares = if is_squares_formatted { Some(InputSquares::from_str( diff --git a/src/solvestate.rs b/src/solvestate.rs index 4c024e3..21785aa 100644 --- a/src/solvestate.rs +++ b/src/solvestate.rs @@ -1,6 +1,6 @@ use std::fmt::{Display, Formatter, Write}; -use anyhow::{Result, anyhow}; +use anyhow::{Result, bail}; use clap::ValueEnum; use itertools::{Itertools, Position}; use log::trace; @@ -55,7 +55,7 @@ impl SquareVal { ' ' => Ok(None), '.' => Ok(None), '_' => Ok(None), - _ => Err(anyhow!("Blank")), + _ => bail!("Blank"), } } } diff --git a/src/squarecolor.rs b/src/squarecolor.rs index f2d5cad..d5b256d 100644 --- a/src/squarecolor.rs +++ b/src/squarecolor.rs @@ -1,6 +1,6 @@ use std::fmt::{Display, Formatter}; -use anyhow::{Result, anyhow}; +use anyhow::{Result, bail}; use owo_colors::AnsiColors; #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] @@ -94,7 +94,7 @@ impl TryFrom for SquareColor { 'M' => Ok(SquareColor::BrightMagenta), 'C' => Ok(SquareColor::BrightCyan), 'W' => Ok(SquareColor::BrightWhite), - _ => Err(anyhow!("Unknown color char: {}", value)), + _ => bail!("Unknown color char: {}", value), } } } From 237267f8c1104c4ccf95acb27192e5dd9ad0a5c1 Mon Sep 17 00:00:00 2001 From: Dan Schafer Date: Thu, 17 Jul 2025 10:38:49 -0700 Subject: [PATCH 2/2] Use ensure!() for one more guard --- src/board.rs | 15 +++++++-------- src/file.rs | 15 +++++++-------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/board.rs b/src/board.rs index 8c697f3..e498e76 100644 --- a/src/board.rs +++ b/src/board.rs @@ -3,7 +3,7 @@ use std::{ str::FromStr, }; -use anyhow::{Result, bail}; +use anyhow::{Result, ensure}; use itertools::{Itertools, Position, iproduct}; use crate::{ @@ -349,13 +349,12 @@ impl FromStr for Board { let lines = s.trim().lines().collect::>(); let size = lines.len(); for (line_num, &line) in lines.iter().enumerate() { - if line.len() != size { - let row_num = line_num + 1; - let row_len = line.len(); - bail!( - "Invalid board: row {row_num} has {row_len} entries but the board is {size} rows long." - ); - } + ensure!( + line.len() == size, + "Invalid board: row {row_num} has {row_len} entries but the board is {size} rows long.", + row_num = line_num + 1, + row_len = line.len() + ); } let colors = lines .into_iter() diff --git a/src/file.rs b/src/file.rs index cd44daa..ba78873 100644 --- a/src/file.rs +++ b/src/file.rs @@ -1,6 +1,6 @@ use std::{fmt::Display, str::FromStr}; -use anyhow::{Context, Result, bail, ensure}; +use anyhow::{Context, Result, ensure}; use image::ImageReader; use crate::{ @@ -57,13 +57,12 @@ impl FromStr for InputSquares { let lines = s.trim().lines().collect::>(); let size = lines.len(); for (line_num, &line) in lines.iter().enumerate() { - if line.len() != size { - let row_num = line_num + 1; - let row_len = line.len(); - bail!( - "Invalid solve state squares: row {row_num} has {row_len} entries but the board is {size} rows long." - ); - } + ensure!( + line.len() == size, + "Invalid solve state squares: row {row_num} has {row_len} entries but the board is {size} rows long.", + row_num = line_num + 1, + row_len = line.len() + ); } let solve_state_squares = lines .into_iter()