hyprshell-core-lib 4.9.5

A modern GTK4-based window switcher and application launcher for Hyprland
Documentation
use crate::util::get_daemon_socket_path_buff;
use anyhow::Context;
use std::io::{BufRead, BufReader, Write};
use std::os::unix::net::UnixStream;
use tracing::{debug, trace};

pub fn send_raw_to_socket(data: &str) -> anyhow::Result<()> {
    let path = get_daemon_socket_path_buff();
    debug!("Sending data to socket: {data}");
    trace!("Socket path: {}", path.display());
    let mut stream = UnixStream::connect(&path)
        .with_context(|| format!("Can't connect to daemon socket {}", path.display()))?;
    trace!("Socket connected, sending data");
    stream
        .write_all(data.as_bytes())
        .and_then(|()| stream.write_all(b"\0"))
        .context("Can't send data to socket")?;
    trace!("Data sent");
    let mut reader = BufReader::new(stream);
    let mut buffer = vec![];
    reader
        .read_until(b'\0', &mut buffer)
        .context("Can't read data from socket")?;
    let ret = String::from_utf8(buffer).context("Failed to convert buffer")?;
    debug!("Received data from socket: {ret}");
    Ok(())
}