mirror of
https://github.com/Zedfrigg/ironbar.git
synced 2025-08-19 07:41:04 +02:00
feat: logging support and proper error handling
This commit is contained in:
parent
917838c98c
commit
ab8f7ecfc8
28 changed files with 1056 additions and 388 deletions
|
@ -1,3 +1,5 @@
|
|||
use color_eyre::{Report, Result};
|
||||
use ksway::{Error, IpcCommand, IpcEvent};
|
||||
use serde::Deserialize;
|
||||
|
||||
pub mod node;
|
||||
|
@ -40,10 +42,68 @@ pub struct SwayNode {
|
|||
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct WindowProperties {
|
||||
pub class: String,
|
||||
pub class: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct SwayOutput {
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
pub struct SwayClient {
|
||||
client: ksway::Client,
|
||||
}
|
||||
|
||||
impl SwayClient {
|
||||
pub(crate) fn run(&mut self, cmd: String) -> Result<Vec<u8>> {
|
||||
match self.client.run(cmd) {
|
||||
Ok(res) => Ok(res),
|
||||
Err(err) => Err(get_client_error(err)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl SwayClient {
|
||||
pub fn connect() -> Result<Self> {
|
||||
let client = match ksway::Client::connect() {
|
||||
Ok(client) => Ok(client),
|
||||
Err(err) => Err(get_client_error(err)),
|
||||
}?;
|
||||
|
||||
Ok(Self { client })
|
||||
}
|
||||
|
||||
pub fn ipc(&mut self, command: IpcCommand) -> Result<Vec<u8>> {
|
||||
match self.client.ipc(command) {
|
||||
Ok(res) => Ok(res),
|
||||
Err(err) => Err(get_client_error(err)),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn subscribe(
|
||||
&mut self,
|
||||
event_types: Vec<IpcEvent>,
|
||||
) -> Result<crossbeam_channel::Receiver<(IpcEvent, Vec<u8>)>> {
|
||||
match self.client.subscribe(event_types) {
|
||||
Ok(res) => Ok(res),
|
||||
Err(err) => Err(get_client_error(err)),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn poll(&mut self) -> Result<()> {
|
||||
match self.client.poll() {
|
||||
Ok(()) => Ok(()),
|
||||
Err(err) => Err(get_client_error(err)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Gets an error report from a `ksway` error enum variant
|
||||
pub fn get_client_error(error: Error) -> Report {
|
||||
match error {
|
||||
Error::SockPathNotFound => Report::msg("Sway socket path not found"),
|
||||
Error::SubscriptionError => Report::msg("Sway IPC subscription error"),
|
||||
Error::AlreadySubscribed => Report::msg("Already subscribed to Sway IPC server"),
|
||||
Error::Io(err) => Report::new(err),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue