mirror of
https://github.com/feschber/lan-mouse.git
synced 2026-04-18 11:31:29 +03:00
better error handling
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -2008,6 +2008,7 @@ dependencies = [
|
|||||||
"clap",
|
"clap",
|
||||||
"futures",
|
"futures",
|
||||||
"lan-mouse-ipc",
|
"lan-mouse-ipc",
|
||||||
|
"thiserror 2.0.0",
|
||||||
"tokio",
|
"tokio",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ repository = "https://github.com/feschber/lan-mouse"
|
|||||||
futures = "0.3.30"
|
futures = "0.3.30"
|
||||||
lan-mouse-ipc = { path = "../lan-mouse-ipc", version = "0.2.0" }
|
lan-mouse-ipc = { path = "../lan-mouse-ipc", version = "0.2.0" }
|
||||||
clap = { version = "4.4.11", features = ["derive"] }
|
clap = { version = "4.4.11", features = ["derive"] }
|
||||||
|
thiserror = "2.0.0"
|
||||||
tokio = { version = "1.32.0", features = [
|
tokio = { version = "1.32.0", features = [
|
||||||
"io-util",
|
"io-util",
|
||||||
"io-std",
|
"io-std",
|
||||||
|
|||||||
@@ -2,17 +2,23 @@ use clap::{Args, Parser, Subcommand};
|
|||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
|
|
||||||
use std::{net::IpAddr, time::Duration};
|
use std::{net::IpAddr, time::Duration};
|
||||||
|
use thiserror::Error;
|
||||||
|
|
||||||
use lan_mouse_ipc::{
|
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)]
|
#[derive(Parser, Debug, PartialEq, Eq)]
|
||||||
#[command(
|
#[command(name = "lan-mouse-cli", about = "LanMouse CLI interface")]
|
||||||
name = "lan-mouse-cli",
|
|
||||||
about = "LanMouse CLI interface",
|
|
||||||
flatten_help = true
|
|
||||||
)]
|
|
||||||
pub struct CliArgs {
|
pub struct CliArgs {
|
||||||
#[command(subcommand)]
|
#[command(subcommand)]
|
||||||
command: CliSubcommand,
|
command: CliSubcommand,
|
||||||
@@ -66,12 +72,12 @@ enum CliSubcommand {
|
|||||||
RemoveAuthorizedKey { sha256_fingerprint: String },
|
RemoveAuthorizedKey { sha256_fingerprint: String },
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn run(args: CliArgs) -> Result<(), IpcError> {
|
pub async fn run(args: CliArgs) -> Result<(), CliError> {
|
||||||
execute(args.command).await?;
|
execute(args.command).await?;
|
||||||
Ok(())
|
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?;
|
let (mut rx, mut tx) = connect_async(Some(Duration::from_millis(500))).await?;
|
||||||
match cmd {
|
match cmd {
|
||||||
CliSubcommand::AddClient(Client {
|
CliSubcommand::AddClient(Client {
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
use crate::{ConnectionError, FrontendEvent, FrontendRequest, IpcError};
|
use crate::{ConnectionError, FrontendEvent, FrontendRequest, IpcError};
|
||||||
use std::{
|
use std::{
|
||||||
cmp::min,
|
cmp::min,
|
||||||
io,
|
|
||||||
task::{ready, Poll},
|
task::{ready, Poll},
|
||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
@@ -47,7 +46,7 @@ impl Stream for AsyncFrontendEventReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl AsyncFrontendRequestWriter {
|
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();
|
let mut json = serde_json::to_string(&request).unwrap();
|
||||||
log::debug!("requesting: {json}");
|
log::debug!("requesting: {json}");
|
||||||
json.push('\n');
|
json.push('\n');
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use lan_mouse::{
|
|||||||
service::{Service, ServiceError},
|
service::{Service, ServiceError},
|
||||||
};
|
};
|
||||||
use lan_mouse_ipc::{IpcError, IpcListenerCreationError};
|
use lan_mouse_ipc::{IpcError, IpcListenerCreationError};
|
||||||
|
use lan_mouse_cli::CliError;
|
||||||
use std::{
|
use std::{
|
||||||
future::Future,
|
future::Future,
|
||||||
io,
|
io,
|
||||||
@@ -31,6 +32,8 @@ enum LanMouseError {
|
|||||||
Capture(#[from] InputCaptureError),
|
Capture(#[from] InputCaptureError),
|
||||||
#[error(transparent)]
|
#[error(transparent)]
|
||||||
Emulation(#[from] InputEmulationError),
|
Emulation(#[from] InputEmulationError),
|
||||||
|
#[error(transparent)]
|
||||||
|
Cli(#[from] CliError),
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|||||||
Reference in New Issue
Block a user