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 {
(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)* },
+ };
+ }
+}
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;
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::*;