diff options
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 45 |
1 files changed, 45 insertions, 0 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(()) +} |