summaryrefslogtreecommitdiff
path: root/src/tasks/client.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tasks/client.rs')
-rw-r--r--src/tasks/client.rs138
1 files changed, 98 insertions, 40 deletions
diff --git a/src/tasks/client.rs b/src/tasks/client.rs
index 6561efd..baadfec 100644
--- a/src/tasks/client.rs
+++ b/src/tasks/client.rs
@@ -15,12 +15,35 @@ pub enum Name {
impl Display for Name {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
- write!(f, "{:?}", self)
+ write!(
+ f,
+ "{:?}",
+ self
+ )
}
}
-pub const TASKS: &[Task] = &[Task(BaseTask { name: Name::Nop, exec: no_op }), Task(BaseTask { name: Name::Exec, exec: exec }), NETWORK_T];
-pub const NETWORK_T: Task = Task(BaseTask { name: Name::Network, exec: network });
+pub const TASKS: &[Task] = &[
+ Task(
+ BaseTask {
+ name: Name::Nop,
+ exec: no_op,
+ },
+ ),
+ Task(
+ BaseTask {
+ name: Name::Exec,
+ exec: exec,
+ },
+ ),
+ NETWORK_T,
+];
+pub const NETWORK_T: Task = Task(
+ BaseTask {
+ name: Name::Network,
+ exec: network,
+ },
+);
fn no_op(_: &[&str], _: &()) -> Result<String, String> {
Ok("".to_string())
@@ -30,9 +53,14 @@ fn exec(cmds: &[&str], _: &()) -> Result<String, String> {
use std::process::Command;
// TODO: fmt and add exit code, and add support for both stdout and stderr, and
// support for no output
- match Command::new(cmds[0]).args(&cmds[1..]).output() {
+ match Command::new(cmds[0])
+ .args(&cmds[1..])
+ .output()
+ {
Ok(o) => {
- if o.status.success() {
+ if o.status
+ .success()
+ {
Ok(String::from_utf8_lossy(&o.stdout).to_string())
} else {
Err(String::from_utf8_lossy(&o.stderr).to_string())
@@ -44,7 +72,9 @@ fn exec(cmds: &[&str], _: &()) -> Result<String, String> {
fn network(switch: &[&str], _: &()) -> Result<String, String> {
use std::process::{Command, Stdio};
- let switch: bool = switch[0].parse::<bool>().map_err(|e| e.to_string())?;
+ let switch: bool = switch[0]
+ .parse::<bool>()
+ .map_err(|e| e.to_string())?;
// TODO: windows and linux
@@ -52,52 +82,70 @@ fn network(switch: &[&str], _: &()) -> Result<String, String> {
#[cfg(target_os = "macos")]
{
use std::io::Read;
- match Command::new("networksetup").arg("-listallhardwareports").stdout(Stdio::piped()).spawn() {
+ match Command::new("networksetup")
+ .arg("-listallhardwareports")
+ .stdout(Stdio::piped())
+ .spawn()
+ {
Ok(devs) => {
match Command::new("awk")
.arg(r#"/Wi-Fi|AirPort/{getline; print $2}"#)
- .stdin(Stdio::from(match devs.stdout {
- Some(s) => s,
- None => match devs.stderr {
- Some(mut e) => {
- let mut reason = String::new();
- if let Err(e) = e.read_to_string(&mut reason) {
- return Err(format!("networksetup failed to list hardware: {e}"));
- }
- return Err(format!("networksetup failed to list hardware: {reason}"));
- }
- None => Err("networksetup failed to list hardware".to_string())?,
- },
- }))
+ .stdin(
+ Stdio::from(
+ match devs.stdout {
+ Some(s) => s,
+ None => match devs.stderr {
+ Some(mut e) => {
+ let mut reason = String::new();
+ if let Err(e) = e.read_to_string(&mut reason) {
+ return Err(format!("networksetup failed to list hardware: {e}"));
+ }
+ return Err(format!("networksetup failed to list hardware: {reason}"));
+ }
+ None => Err("networksetup failed to list hardware".to_string())?,
+ },
+ },
+ ),
+ )
.stdout(Stdio::piped())
.spawn()
{
Ok(dev) => match Command::new("networksetup")
.arg("-setairportpower")
- .arg(match dev.stdout {
- Some(mut o) => {
- let mut output = String::new();
- if let Err(e) = o.read_to_string(&mut output) {
- return Err(format!("awk failed to get device from networksetup list hardware: {e}"));
- };
- output
- }
- None => match dev.stderr {
- Some(mut e) => {
- let mut reason = String::new();
- if let Err(e) = e.read_to_string(&mut reason) {
+ .arg(
+ match dev.stdout {
+ Some(mut o) => {
+ let mut output = String::new();
+ if let Err(e) = o.read_to_string(&mut output) {
return Err(format!("awk failed to get device from networksetup list hardware: {e}"));
- }
- return Err(format!("awk failed to get device from networksetup list hardware: {reason}"));
+ };
+ output
}
- None => Err("awk failed to get device from networksetup list hardware".to_string())?,
+ None => match dev.stderr {
+ Some(mut e) => {
+ let mut reason = String::new();
+ if let Err(e) = e.read_to_string(&mut reason) {
+ return Err(format!("awk failed to get device from networksetup list hardware: {e}"));
+ }
+ return Err(format!("awk failed to get device from networksetup list hardware: {reason}"));
+ }
+ None => Err("awk failed to get device from networksetup list hardware".to_string())?,
+ },
+ },
+ )
+ .arg(
+ if switch {
+ "on"
+ } else {
+ "off"
},
- })
- .arg(if switch { "on" } else { "off" })
+ )
.output()
{
Ok(o) => {
- if o.status.success() {
+ if o.status
+ .success()
+ {
Ok(String::from_utf8_lossy(&o.stdout).to_string())
} else {
Err(String::from_utf8_lossy(&o.stderr).to_string())
@@ -121,7 +169,12 @@ impl TryFrom<&str> for &'static Task {
fn try_from(value: &str) -> Result<Self, Self::Error> {
for task in TASKS {
- if task.0.name.to_string() == value {
+ if task
+ .0
+ .name
+ .to_string()
+ == value
+ {
return Ok(task);
}
}
@@ -135,7 +188,12 @@ impl TryFrom<&str> for Task {
fn try_from(value: &str) -> Result<Self, Self::Error> {
for task in TASKS {
- if task.0.name.to_string() == value {
+ if task
+ .0
+ .name
+ .to_string()
+ == value
+ {
return Ok(*task);
}
}