diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib.rs | 45 | ||||
| -rw-r--r-- | src/main.rs | 46 | 
2 files changed, 48 insertions, 43 deletions
| diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..19dcc97 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,45 @@ +extern crate url; + +use url::Url; + +use std::io::{self, Write}; +use std::io::prelude::*; +use std::net::TcpListener; +use std::process::Command; + +pub fn open_stream(browser: String, port: u16) -> io::Result<()> { +    let listener = TcpListener::bind( +        format!("127.0.0.1:{}", port) +    )?; + +    for stream in listener.incoming() { +        match stream { +            Ok(mut stream) => { +                let mut url = String::new(); +                match stream.read_to_string(&mut url) { +                    Ok(_) => {}, +                    Err(e) => writeln!(io::stderr(), "{}", e)?, +                }; + +                match Url::parse(url.as_str()) { +                    Ok(url) => { +                        match Command::new("open") +                            .arg("-a") +                            .arg(&browser) +                            .arg(&url.as_str()) +                            .spawn() { +                            Ok(_) => {}, +                            Err(e) => writeln!(io::stderr(), "{}", e)?, +                        }; +                    }, +                    Err(e) => writeln!(io::stderr(), "{}", e)?, +                }; +            } +            Err(e) => { +                writeln!(io::stderr(), "{}", e)?; +            } +        } +    } + +    Ok(()) +} diff --git a/src/main.rs b/src/main.rs index fcaca7a..937ec95 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,54 +1,14 @@  extern crate getopts; -extern crate url; + +extern crate hearurl;  use getopts::Options; -use url::Url;  use std::env;  use std::io::{self, Write}; -use std::io::prelude::*; -use std::net::TcpListener; -use std::process::Command;  const DEFAULT_PORT: u16 = 37705; -fn open_stream(browser: String, port: u16) -> io::Result<()> { -    let listener = TcpListener::bind( -        format!("127.0.0.1:{}", port) -    )?; - -    for stream in listener.incoming() { -        match stream { -            Ok(mut stream) => { -                let mut url = String::new(); -                match stream.read_to_string(&mut url) { -                    Ok(_) => {}, -                    Err(e) => writeln!(io::stderr(), "{}", e)?, -                }; - -                match Url::parse(url.as_str()) { -                    Ok(url) => { -                        match Command::new("open") -                            .arg("-a") -                            .arg(&browser) -                            .arg(&url.as_str()) -                            .spawn() { -                            Ok(_) => {}, -                            Err(e) => writeln!(io::stderr(), "{}", e)?, -                        }; -                    }, -                    Err(e) => writeln!(io::stderr(), "{}", e)?, -                }; -            } -            Err(e) => { -                writeln!(io::stderr(), "{}", e)?; -            } -        } -    } - -    Ok(()) -} -  fn print_usage(opts: Options) {      let brief = "Usage: hearurl -b BROWSER";      print!("{}", opts.usage(&brief)); @@ -85,7 +45,7 @@ fn main() {          None => DEFAULT_PORT,      }; -    open_stream(browser, port).unwrap_or_else(|e| { +    hearurl::open_stream(browser, port).unwrap_or_else(|e| {          writeln!(io::stderr(), "{}", e)              .expect("Failed printing to stderr");      }); | 
