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/server.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/server.rs')
| -rw-r--r-- | src/ipc/server.rs | 24 |
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) } |
