diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-02-11 09:19:37 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-02-11 09:19:37 +0400 |
| commit | 0931447ec178ed503ff0a085896ec6908cf1292e (patch) | |
| tree | ee808edb795d5bd3fae621add8946a2e4786213d /src/ipc/client.rs | |
| parent | a388c257951107c6d45987bb390f312e5398da71 (diff) | |
| download | niri-0931447ec178ed503ff0a085896ec6908cf1292e.tar.gz niri-0931447ec178ed503ff0a085896ec6908cf1292e.tar.bz2 niri-0931447ec178ed503ff0a085896ec6908cf1292e.zip | |
Implement error reporting in IPC
Diffstat (limited to 'src/ipc/client.rs')
| -rw-r--r-- | src/ipc/client.rs | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/src/ipc/client.rs b/src/ipc/client.rs index b2004a7b..27e1eaa1 100644 --- a/src/ipc/client.rs +++ b/src/ipc/client.rs @@ -3,8 +3,8 @@ use std::io::{Read, Write}; use std::net::Shutdown; use std::os::unix::net::UnixStream; -use anyhow::{bail, Context}; -use niri_ipc::{Mode, Output, Request, Response}; +use anyhow::{anyhow, bail, Context}; +use niri_ipc::{Mode, Output, Reply, Request, Response}; use crate::cli::Msg; @@ -36,20 +36,15 @@ pub fn handle_msg(msg: Msg, json: bool) -> anyhow::Result<()> { .read_to_end(&mut buf) .context("error reading IPC response")?; - if matches!(msg, Msg::Action { .. }) { - if buf.is_empty() { - return Ok(()); - } else { - bail!("unexpected response: expected no response, got {buf:?}"); - } - } + let reply: Reply = serde_json::from_slice(&buf).context("error parsing IPC reply")?; + + let response = reply + .map_err(|msg| anyhow!(msg)) + .context("niri could not handle the request")?; - let response = serde_json::from_slice(&buf).context("error parsing IPC response")?; match msg { Msg::Outputs => { - #[allow(irrefutable_let_patterns)] - let Response::Outputs(outputs) = response - else { + let Response::Outputs(outputs) = response else { bail!("unexpected response: expected Outputs, got {response:?}"); }; @@ -109,7 +104,11 @@ pub fn handle_msg(msg: Msg, json: bool) -> anyhow::Result<()> { println!(); } } - Msg::Action { .. } => unreachable!(), + Msg::Action { .. } => { + let Response::Handled = response else { + bail!("unexpected response: expected Handled, got {response:?}"); + }; + } } Ok(()) |
