ukhasnet-parser 0.4.0

A parser for the UKHASnet protocol
Documentation
extern crate ukhasnet_parser;
extern crate rustc_serialize;

use std::str;
use std::io::prelude::*;
use std::io::BufReader;
use std::net::TcpStream;

use rustc_serialize::json;
use ukhasnet_parser::{parse};

#[derive(Debug,RustcDecodable)]
struct SocketMessage {
    i: u32,
    ni: u32,
    nn: String,
    p: String,
    r: i32,
    s: String,
    t: String
}

fn main() {
    let stream = TcpStream::connect("ukhas.net:3010").unwrap();
    let mut bufstream = BufReader::new(stream);
    loop {
        let mut data = Vec::new();
        match bufstream.read_until(b'}', &mut data) {
            Ok(_) => (),
            Err(e) => {
                println!("Error reading from socket: {}", e);
                break
            }
        }

        let jsonstr = match str::from_utf8(&data) {
            Ok(s) => s,
            Err(e) => {
                println!("Error converting data to string: {}", e);
                continue;
            }
        };

        let message = match json::decode::<SocketMessage>(&jsonstr) {
            Ok(m) => m,
            Err(e) => {
                println!("Error parsing message JSON: {}", e);
                continue;
            }
        };

        print!("[{}] ({}) {}: ", message.t, message.r, message.nn);
        println!("{}", message.p);

        match parse(&message.p) {
            Ok(p) => println!("{:?}", p),
            Err(e) => { println!("Error parsing packet: {}", e); continue; },
        }

        println!("");

    }
}