aboutsummaryrefslogtreecommitdiff
path: root/src/ipc/server.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-02-11 09:19:37 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-02-11 09:19:37 +0400
commit0931447ec178ed503ff0a085896ec6908cf1292e (patch)
treeee808edb795d5bd3fae621add8946a2e4786213d /src/ipc/server.rs
parenta388c257951107c6d45987bb390f312e5398da71 (diff)
downloadniri-0931447ec178ed503ff0a085896ec6908cf1292e.tar.gz
niri-0931447ec178ed503ff0a085896ec6908cf1292e.tar.bz2
niri-0931447ec178ed503ff0a085896ec6908cf1292e.zip
Implement error reporting in IPC
Diffstat (limited to 'src/ipc/server.rs')
-rw-r--r--src/ipc/server.rs24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/ipc/server.rs b/src/ipc/server.rs
index bedfe48f..a1f3905b 100644
--- a/src/ipc/server.rs
+++ b/src/ipc/server.rs
@@ -110,7 +110,19 @@ async fn handle_client(ctx: ClientCtx, stream: Async<'_, UnixStream>) -> anyhow:
.await
.context("error reading request")?;
- let request: Request = serde_json::from_str(&buf).context("error parsing request")?;
+ let reply = process(&ctx, &buf).map_err(|err| {
+ warn!("error processing IPC request: {err:?}");
+ err.to_string()
+ });
+
+ let buf = serde_json::to_vec(&reply).context("error formatting reply")?;
+ write.write_all(&buf).await.context("error writing reply")?;
+
+ Ok(())
+}
+
+fn process(ctx: &ClientCtx, buf: &str) -> anyhow::Result<Response> {
+ let request: Request = serde_json::from_str(buf).context("error parsing request")?;
let response = match request {
Request::Outputs => {
@@ -122,15 +134,9 @@ async fn handle_client(ctx: ClientCtx, stream: Async<'_, UnixStream>) -> anyhow:
ctx.event_loop.insert_idle(move |state| {
state.do_action(action);
});
- return Ok(());
+ Response::Handled
}
};
- let buf = serde_json::to_vec(&response).context("error formatting response")?;
- write
- .write_all(&buf)
- .await
- .context("error writing response")?;
-
- Ok(())
+ Ok(response)
}