use std::{io, path::PathBuf};
use anyhow::Context;
use shpool_protocol::{ConnectHeader, LogLevel, SetLogLevelReply, SetLogLevelRequest};
use crate::{protocol, protocol::ClientResult};
pub fn run(level: LogLevel, socket: PathBuf) -> anyhow::Result<()> {
let mut client = match protocol::Client::new(socket) {
Ok(ClientResult::JustClient(c)) => c,
Ok(ClientResult::VersionMismatch { warning, client }) => {
eprintln!("warning: {warning}, try restarting your daemon");
client
}
Err(err) => {
let io_err = err.downcast::<io::Error>()?;
if io_err.kind() == io::ErrorKind::NotFound {
eprintln!("could not connect to daemon");
}
return Err(io_err).context("connecting to daemon");
}
};
client
.write_connect_header(ConnectHeader::SetLogLevel(SetLogLevelRequest { level }))
.context("sending set-log-level header")?;
let _reply: SetLogLevelReply = client.read_reply().context("reading reply")?;
Ok(())
}