From 60dd1f72dc598b7ce276b623de28abdc157b7229 Mon Sep 17 00:00:00 2001 From: "Dustin C. Hatch" Date: Sat, 29 Sep 2018 11:42:34 -0500 Subject: [PATCH] main: Accept addresses as command-line arguments Now that the `MacAddress` struct can handle parsing arbitrary input without panicking, the main entry point can accept values from the user in the form of command-line arguments. Users can pass one or more addresses as positional arguments to the `wakeonlan` program, and a magic packet will be sent to each one in series. --- src/main.rs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 350d1a9..20f64d1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,22 @@ +use std::env; + mod mac; mod magic; fn main() { - let mac = mac::MacAddress::from_string("0c:9d:92:0e:3a:41").unwrap(); - let packet = magic::MagicPacket::new(&mac); - packet.send().unwrap(); + let mut args = env::args(); + args.next(); + for arg in args { + let mac = match mac::MacAddress::from_string(&arg) { + Ok(m) => m, + Err(e) => { + eprintln!("Invalid address: {} ({})", &arg, e); + continue; + }, + }; + let packet = magic::MagicPacket::new(&mac); + println!("Sending magic packet to {}", mac); + packet.send().unwrap(); + } }