summaryrefslogtreecommitdiff
path: root/src/tasks/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tasks/server.rs')
-rw-r--r--src/tasks/server.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/tasks/server.rs b/src/tasks/server.rs
index e69de29..0896dca 100644
--- a/src/tasks/server.rs
+++ b/src/tasks/server.rs
@@ -0,0 +1,46 @@
+use std::fmt::Display;
+
+use crate::tasks::{IntoTaskErr, Task as BaseTask, TaskOutput};
+use serde::Deserialize;
+
+pub struct Task<T = ()>(pub BaseTask<Name, T>);
+
+#[derive(Debug, Deserialize, Clone, Copy)]
+pub enum Name {
+ GetIp,
+}
+
+impl Display for Name {
+ fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
+ write!(f, "{:?}", self)
+ }
+}
+
+pub const TASKS: &[Task] = &[Task::<i32>(BaseTask { name: Name::GetIp, exec: get_ip })];
+
+fn get_ip(cmds: &[&str], _: i32) -> TaskOutput {}
+
+impl TryFrom<&str> for &'static Task {
+ type Error = IntoTaskErr;
+
+ fn try_from(value: &str) -> Result<Self, Self::Error> {
+ for task in TASKS {
+ if task.0.name.to_string() == value {
+ return Ok(task);
+ }
+ }
+ Err(IntoTaskErr::NotFound(value.to_string()))
+ }
+}
+
+impl From<Task> for BaseTask<Name> {
+ fn from(value: Task) -> Self {
+ value.0
+ }
+}
+
+impl AsRef<BaseTask<Name>> for Task {
+ fn as_ref(&self) -> &BaseTask<Name> {
+ &self.0
+ }
+}