(project_path: &Path, event: DaemonHookEvent)
| 274 | |
| 275 | #[cfg(unix)] |
| 276 | async fn notify_hook_event_inner(project_path: &Path, event: DaemonHookEvent) { |
| 277 | let Ok(socket_path) = default_socket_path() else { |
| 278 | return; |
| 279 | }; |
| 280 | if !socket_path.exists() { |
| 281 | return; |
| 282 | } |
| 283 | let Ok(handshake) = |
| 284 | DaemonHandshake::for_current_client(Some(project_path.to_path_buf()), None, false, false) |
| 285 | else { |
| 286 | return; |
| 287 | }; |
| 288 | let Ok(params) = serde_json::to_value(event) else { |
| 289 | return; |
| 290 | }; |
| 291 | let request = JsonRpcRequest { |
| 292 | jsonrpc: "2.0".to_string(), |
| 293 | id: None, |
| 294 | method: HOOK_EVENT_METHOD.to_string(), |
| 295 | params: Some(params), |
| 296 | }; |
| 297 | let Ok(line) = serde_json::to_string(&request) else { |
| 298 | return; |
| 299 | }; |
| 300 | let Ok(stream) = UnixStream::connect(socket_path).await else { |
| 301 | return; |
| 302 | }; |
| 303 | let Ok(handshake_line) = handshake.to_line() else { |
| 304 | return; |
| 305 | }; |
| 306 | let (_reader, mut writer) = stream.into_split(); |
| 307 | if writer.write_all(handshake_line.as_bytes()).await.is_err() { |
| 308 | return; |
| 309 | } |
| 310 | if writer.write_all(b"\n").await.is_err() { |
| 311 | return; |
| 312 | } |
| 313 | if writer.write_all(line.as_bytes()).await.is_err() { |
| 314 | return; |
| 315 | } |
| 316 | if writer.write_all(b"\n").await.is_err() { |
| 317 | return; |
| 318 | } |
| 319 | let _ = writer.flush().await; |
| 320 | let _ = writer.shutdown().await; |
| 321 | } |
| 322 | |
| 323 | #[cfg(not(unix))] |
| 324 | pub async fn notify_hook_event(project_path: &Path, event: DaemonHookEvent) { |
no test coverage detected