chiark / gitweb /
horrible lineless error!
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 27 Jun 2020 18:06:56 +0000 (19:06 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 27 Jun 2020 18:06:56 +0000 (19:06 +0100)
src/bin/server.rs

index 463dbad7247dbb16a00fec4759fe63bf6b209000..cc18233b2eda324ae4248e0742763ecfd9e47310 100644 (file)
@@ -111,6 +111,13 @@ fn session(form : Json<SessionForm>) -> Result<Template,RE> {
   Ok(Template::render("test",&c))
 }
 
+#[derive(Error,Debug)]
+#[error("operation error {:?}",self)]
+enum OpError {
+  PieceGone,
+  PieceHeld,
+}
+
 #[derive(Debug,Serialize,Deserialize)]
 struct ApiGrab {
   t : String,
@@ -119,7 +126,17 @@ struct ApiGrab {
 #[post("/_/api/grab", format="json", data="<form>")]
 #[throws(RE)]
 fn api_grab(form : Json<ApiGrab>) -> impl response::Responder<'static> {
-  eprintln!("API {:?}", &form);
+  let iad = lookup_token(&form.t).ok_or_else(||anyhow!("unknown token"))?;
+  let g = iad.i.lock().map_err(|e| anyhow!("lock poison {:?}",&e))?;
+  let r : Result<(),OpError> = {
+    let p = g.gs.pieces.get_mut(form.p)/*.ok_or(OpError::PieceGone)?*/;
+/*
+    if p.held != None { Err(OpError::PieceHeld)? };
+    p.held = Some(iad.user);
+*/
+    Ok(())
+  };
+  eprintln!("API {:?} => {:?}", &form, &r);
   ""
 }