mirror of
https://github.com/feschber/lan-mouse.git
synced 2026-03-07 11:59:59 +03:00
better error handling
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -2008,6 +2008,7 @@ dependencies = [
|
||||
"clap",
|
||||
"futures",
|
||||
"lan-mouse-ipc",
|
||||
"thiserror 2.0.0",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user