From 9288717bed8eb383ed9347bc67a8b8b920defd07 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 1 Apr 2021 12:59:53 +0100 Subject: [PATCH] introduce if_let! Signed-off-by: Ian Jackson --- apitest/at-otter.rs | 2 +- base/misc.rs | 10 ++++++++++ base/prelude.rs | 2 ++ daemon/api.rs | 2 +- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/apitest/at-otter.rs b/apitest/at-otter.rs index 06c5ed7c..2a7ad118 100644 --- a/apitest/at-otter.rs +++ b/apitest/at-otter.rs @@ -371,7 +371,7 @@ pub fn update_update_pieces( let v = v.as_object().unwrap(); let piece = v["piece"].as_str().unwrap(); let p = pieces.iter_mut().find(|p| p.id == piece); - let p = if let Some(p) = p { p } else { return }; + if_let!{ Some(p) = p; else return } let (op, d) = v["op"].as_object().unwrap().iter().next().unwrap(); fn coord(j: &JsV) -> Pos { diff --git a/base/misc.rs b/base/misc.rs index 426c4ca9..b97369d9 100644 --- a/base/misc.rs +++ b/base/misc.rs @@ -64,3 +64,13 @@ pub fn space_rect_attrs(table_size: PosC) -> SvgAttrs { (Html::lit("height"), table_size.y().to_html() ), ] } + +#[macro_export] +macro_rules! if_let { + { $variant:ident($binding:pat) = $input:expr; else $($otherwise:tt)* } => { + let $binding = match $input { + $variant(y) => y, + _ => { $($otherwise)* }, + }; + } +} diff --git a/base/prelude.rs b/base/prelude.rs index 143677e2..092409b0 100644 --- a/base/prelude.rs +++ b/base/prelude.rs @@ -32,3 +32,5 @@ pub use crate::geometry::{CoordinateOverflow, PosC}; pub use crate::{hformat, hformat_as_display, hwrite}; pub use crate::misc::default; pub use crate::misc::display_as_debug; + +pub use crate::if_let; diff --git a/daemon/api.rs b/daemon/api.rs index 902b36f1..412919cb 100644 --- a/daemon/api.rs +++ b/daemon/api.rs @@ -121,7 +121,7 @@ fn api_piece_op(form: Json>) let _ = iplayers.byid(player)?; let gpl = gs.players.byid(player)?; let piece = vpiece_decode(gs, player, gpl, form.piece); - let piece = if let Some(piece) = piece { piece } else { return Ok(()) }; + if_let!{ Some(piece) = piece; else return Ok(()) } let was_held = gs.pieces.get(piece).as_ref().map(|gpc| gpc.held); use ApiPieceOpError::*; -- 2.30.2