diff --git a/prover_rust/src/coordinator_client.rs b/prover_rust/src/coordinator_client.rs index 797cc5216..2f9fd953a 100644 --- a/prover_rust/src/coordinator_client.rs +++ b/prover_rust/src/coordinator_client.rs @@ -84,36 +84,48 @@ impl CoordinatorClient { Ok(()) } - pub fn get_task(&mut self, req: &GetTaskRequest) -> Result> { - let response = self - .rt - .block_on(self.api.get_task(req, self.token.as_ref().unwrap()))?; - + fn action_with_re_login(&mut self, req: &R, mut f: F) -> Result> + where F: FnMut(&mut Self, &R) -> Result> + { + let response = f(self, req)?; if response.errcode == ErrJWTTokenExpired { log::info!("JWT expired, attempting to re-login"); self.login().context("JWT expired, re-login failed")?; log::info!("re-login success"); + return f(self, req); } else if response.errcode != Success { bail!("get task failed: {}", response.errmsg) } Ok(response) } + fn do_get_task(&mut self, req: &GetTaskRequest) -> Result> { + self + .rt + .block_on(self.api.get_task(req, self.token.as_ref().unwrap())) + } + + pub fn get_task(&mut self, req: &GetTaskRequest) -> Result> { + self.action_with_re_login(req, |s, req| { + s.do_get_task(req) + }) + } + + fn do_submit_proof( + &mut self, + req: &SubmitProofRequest, + ) -> Result> { + self + .rt + .block_on(self.api.submit_proof(req, &self.token.as_ref().unwrap())) + } + pub fn submit_proof( &mut self, req: &SubmitProofRequest, ) -> Result> { - let response = self - .rt - .block_on(self.api.submit_proof(req, &self.token.as_ref().unwrap()))?; - - if response.errcode == ErrJWTTokenExpired { - log::info!("JWT expired, attempting to re-login"); - self.login().context("JWT expired, re-login failed")?; - log::info!("re-login success"); - } else if response.errcode != Success { - bail!("submit proof failed: {}", response.errmsg) - } - Ok(response) + self.action_with_re_login(req, |s, req| { + s.do_submit_proof(req) + }) } }