summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-09-16 20:48:43 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-09-17 21:28:52 +0800
commit368aee800658e9c1a9a30871c45fc6034cceda48 (patch)
tree546952a7fdc4ac86b6de9278267f41ecf4bdeb19 /src
parent73b908cb44cf52a768647c0f5cd450ab48cf831f (diff)
refactor: use std TryFrom instead of custom IntoTask
Diffstat (limited to 'src')
-rw-r--r--src/client/connector.rs8
-rw-r--r--src/client/executor.rs5
-rw-r--r--src/tasks.rs34
3 files changed, 11 insertions, 36 deletions
diff --git a/src/client/connector.rs b/src/client/connector.rs
index a595c8e..6c002c9 100644
--- a/src/client/connector.rs
+++ b/src/client/connector.rs
@@ -3,12 +3,12 @@ pub mod httpconnector;
use std::net::IpAddr;
use crate::{client::Client, executor::Executor};
-use remote_control_rs::tasks::{IntoTask, NETWORK_T};
+use remote_control_rs::tasks::NETWORK_T;
-pub type Result<T: std::fmt::Display + IntoTask, E: std::fmt::Debug> = std::result::Result<T, E>;
+pub type Result<T: std::fmt::Display, E: std::fmt::Debug> = std::result::Result<T, E>;
pub trait Connection {
- type Ok: std::fmt::Display + IntoTask + AsRef<str> = String;
+ type Ok: std::fmt::Display + AsRef<str> = String;
type Err: std::fmt::Debug;
// should use channel to notify update
@@ -62,7 +62,7 @@ pub trait Connection {
None => return,
};
// FIXME: handle the errors... peak prod code
- self.ntfy(Executor::new(task, it.map(str::to_string)).unwrap().run().unwrap().clone().unwrap()).unwrap();
+ self.ntfy(Executor::new(task.try_into().unwrap(), it.map(str::to_string)).unwrap().run().unwrap().clone().unwrap()).unwrap();
}
Result::Err(e) => {
#[cfg(debug_assertions)]
diff --git a/src/client/executor.rs b/src/client/executor.rs
index 32a0fdc..379c832 100644
--- a/src/client/executor.rs
+++ b/src/client/executor.rs
@@ -1,4 +1,4 @@
-use remote_control_rs::tasks::{IntoTask, IntoTaskErr, Task};
+use remote_control_rs::tasks::{IntoTaskErr, Task};
pub struct Executor {
task: &'static Task,
@@ -7,8 +7,7 @@ pub struct Executor {
}
impl Executor {
- pub fn new(task: impl IntoTask, args: impl IntoIterator<Item = String>) -> Result<Self, IntoTaskErr> {
- let task = task.into_task()?;
+ pub fn new(task: &'static Task, args: impl IntoIterator<Item = String>) -> Result<Self, IntoTaskErr> {
Ok(Self { task: task, args: args.into_iter().collect(), output: None })
}
diff --git a/src/tasks.rs b/src/tasks.rs
index bfa24e8..ad41a35 100644
--- a/src/tasks.rs
+++ b/src/tasks.rs
@@ -115,39 +115,15 @@ pub enum IntoTaskErr {
NotFound(String),
}
-pub trait IntoTask {
- fn into_task<'a>(self) -> Result<&'a Task, IntoTaskErr>;
-}
-
-impl IntoTask for String {
- fn into_task<'a>(self) -> Result<&'a Task, IntoTaskErr> {
- for task in TASKS {
- if task.name == self {
- return Ok(task);
- }
- }
- Err(IntoTaskErr::NotFound(self))
- }
-}
-
-impl IntoTask for &str {
- fn into_task<'a>(self) -> Result<&'a Task, IntoTaskErr> {
- for task in TASKS {
- if task.name == self {
- return Ok(task);
- }
- }
- Err(IntoTaskErr::NotFound(self.to_string()))
- }
-}
+impl TryFrom<&str> for &Task {
+ type Error = IntoTaskErr;
-impl IntoTask for &Task {
- fn into_task<'a>(self) -> Result<&'a Task, IntoTaskErr> {
+ fn try_from(value: &str) -> Result<Self, Self::Error> {
for task in TASKS {
- if task == self {
+ if task.name == value {
return Ok(task);
}
}
- Err(IntoTaskErr::NotFound(self.name.to_string()))
+ Err(IntoTaskErr::NotFound(value.to_string()))
}
}