diff --git a/crates/proc_macro_api/src/process.rs b/crates/proc_macro_api/src/process.rs index 907cb3db718..b66613c38dc 100644 --- a/crates/proc_macro_api/src/process.rs +++ b/crates/proc_macro_api/src/process.rs @@ -19,7 +19,7 @@ use crate::{ #[derive(Debug, Default)] pub(crate) struct ProcMacroProcessSrv { - inner: Option<Weak<Sender<Task>>>, + inner: Weak<Sender<Task>>, } #[derive(Debug)] @@ -42,7 +42,7 @@ impl ProcMacroProcessSrv { }); let task_tx = Arc::new(task_tx); - let srv = ProcMacroProcessSrv { inner: Some(Arc::downgrade(&task_tx)) }; + let srv = ProcMacroProcessSrv { inner: Arc::downgrade(&task_tx) }; let thread = ProcMacroProcessThread { handle, sender: task_tx }; Ok((thread, srv)) @@ -79,13 +79,8 @@ impl ProcMacroProcessSrv { where R: TryFrom<Response, Error = &'static str>, { - let sender = match &self.inner { - None => return Err(tt::ExpansionError::Unknown("No sender is found.".to_string())), - Some(it) => it, - }; - let (result_tx, result_rx) = bounded(0); - let sender = match sender.upgrade() { + let sender = match self.inner.upgrade() { None => { return Err(tt::ExpansionError::Unknown("Proc macro process is closed.".into())) } @@ -109,14 +104,9 @@ impl ProcMacroProcessSrv { } fn client_loop(task_rx: Receiver<Task>, mut process: Process) { - let (mut stdin, mut stdout) = match process.stdio() { - None => return, - Some(it) => it, - }; - - for task in task_rx { - let Task { req, result_tx } = task; + let (mut stdin, mut stdout) = process.stdio().expect("couldn't access child stdio"); + for Task { req, result_tx } in task_rx { match send_request(&mut stdin, &mut stdout, req) { Ok(res) => result_tx.send(res).unwrap(), Err(_err) => {