better error handling

This commit is contained in:
Ferdinand Schober
2025-03-15 14:09:51 +01:00
parent 83c3319a26
commit 58383646f8
5 changed files with 20 additions and 10 deletions

1
Cargo.lock generated
View File

@@ -2008,6 +2008,7 @@ dependencies = [
"clap",
"futures",
"lan-mouse-ipc",
"thiserror 2.0.0",
"tokio",
]

View File

@@ -10,6 +10,7 @@ repository = "https://github.com/feschber/lan-mouse"
futures = "0.3.30"
lan-mouse-ipc = { path = "../lan-mouse-ipc", version = "0.2.0" }
clap = { version = "4.4.11", features = ["derive"] }
thiserror = "2.0.0"
tokio = { version = "1.32.0", features = [
"io-util",
"io-std",

View File

@@ -2,17 +2,23 @@ use clap::{Args, Parser, Subcommand};
use futures::StreamExt;
use std::{net::IpAddr, time::Duration};
use thiserror::Error;
use lan_mouse_ipc::{
connect_async, ClientHandle, FrontendEvent, FrontendRequest, IpcError, Position,
connect_async, ClientHandle, FrontendEvent, FrontendRequest, ConnectionError, IpcError, Position,
};
#[derive(Debug, Error)]
pub enum CliError {
/// is the service running?
#[error("could not connect: `{0}` - is the service running?")]
ServiceNotRunning(#[from] ConnectionError),
#[error("error communicating with service: {0}")]
Ipc(#[from] IpcError),
}
#[derive(Parser, Debug, PartialEq, Eq)]
#[command(
name = "lan-mouse-cli",
about = "LanMouse CLI interface",
flatten_help = true
)]
#[command(name = "lan-mouse-cli", about = "LanMouse CLI interface")]
pub struct CliArgs {
#[command(subcommand)]
command: CliSubcommand,
@@ -66,12 +72,12 @@ enum CliSubcommand {
RemoveAuthorizedKey { sha256_fingerprint: String },
}
pub async fn run(args: CliArgs) -> Result<(), IpcError> {
pub async fn run(args: CliArgs) -> Result<(), CliError> {
execute(args.command).await?;
Ok(())
}
async fn execute(cmd: CliSubcommand) -> Result<(), IpcError> {
async fn execute(cmd: CliSubcommand) -> Result<(), CliError> {
let (mut rx, mut tx) = connect_async(Some(Duration::from_millis(500))).await?;
match cmd {
CliSubcommand::AddClient(Client {

View File

@@ -1,7 +1,6 @@
use crate::{ConnectionError, FrontendEvent, FrontendRequest, IpcError};
use std::{
cmp::min,
io,
task::{ready, Poll},
time::Duration,
};
@@ -47,7 +46,7 @@ impl Stream for AsyncFrontendEventReader {
}
impl AsyncFrontendRequestWriter {
pub async fn request(&mut self, request: FrontendRequest) -> Result<(), io::Error> {
pub async fn request(&mut self, request: FrontendRequest) -> Result<(), IpcError> {
let mut json = serde_json::to_string(&request).unwrap();
log::debug!("requesting: {json}");
json.push('\n');

View File

@@ -9,6 +9,7 @@ use lan_mouse::{
service::{Service, ServiceError},
};
use lan_mouse_ipc::{IpcError, IpcListenerCreationError};
use lan_mouse_cli::CliError;
use std::{
future::Future,
io,
@@ -31,6 +32,8 @@ enum LanMouseError {
Capture(#[from] InputCaptureError),
#[error(transparent)]
Emulation(#[from] InputEmulationError),
#[error(transparent)]
Cli(#[from] CliError),
}
fn main() {