diff --git a/src/main.rs b/src/main.rs
index 7dc105e..13dcd85 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -11,10 +11,57 @@ use termion::raw::IntoRawMode;
fn main() {
let response = phetch("phkt.io", 70, "/links");
+ let links = parse(&response);
+ println!("{:?}", links);
render(&response);
user_input();
}
+#[derive(Debug)]
+struct Link<'a> {
+ name: &'a str,
+ host: &'a str,
+ port: &'a str,
+ selector: &'a str,
+}
+
+fn parse<'a>(response: &'a str) -> Vec {
+ let mut links: Vec = Vec::new();
+ let mut start = true;
+ let mut is_link = false;
+ let mut link = (0, 0);
+ for (i, c) in response.chars().enumerate() {
+ if start {
+ match c {
+ '0' | '1' => {
+ is_link = true;
+ link.0 = i + 1;
+ }
+ '\n' => continue,
+ _ => is_link = false,
+ }
+ start = false;
+ } else if c == '\n' {
+ start = true;
+ if is_link && i > link.0 {
+ link.1 = i;
+ let mut line = Vec::new();
+ for s in response[link.0..link.1].split('\t') {
+ line.push(s);
+ }
+ links.push(Link {
+ name: line[0],
+ selector: line[1],
+ host: line[2],
+ port: line[3].trim_end_matches('\r'),
+ });
+ is_link = false;
+ }
+ }
+ }
+ links
+}
+
fn user_input() {
let stdin = stdin();
let mut stdout = stdout().into_raw_mode().unwrap();
@@ -79,7 +126,9 @@ fn phetch(host: &str, port: i8, selector: &str) -> String {
}
fn render(buf: &str) {
- print!("\x1B[2J\x1B[H{}", draw(buf));
+ let mut clear = "\x1B[2J\x1B[H";
+ clear = "";
+ print!("{}{}", clear, draw(buf));
}
fn draw(buf: &str) -> String {