multipart 0.1.0

An extension to the Hyper HTTP library that provides support for POST multipart/form-data requests on for both client and server.
#![feature(unboxed_closures, if_let, slicing_syntax)]
#![allow(dead_code)]

extern crate hyper;
extern crate multipart;

use self::hyper::server::{Listening, Server, Request, Response};
use self::hyper::client::Request as ClientReq;
use self::hyper::{status, Url};

use self::multipart::server::Multipart;

use self::multipart::client::Multipart as ClientMulti;

use std::io::net::ip::Ipv4Addr;

use std::rand::random;

fn ok_serv(req: Request, mut res: Response) { 
    let mut multipart = Multipart::from_request(req).ok().expect("Could not create multipart!");

    multipart.foreach_entry(|&: _, _| ());
    
    *res.status_mut() = status::Ok;

    res.start().unwrap().end().unwrap();
}

thread_local!(static PORT: u16 = random())

fn server() -> Listening {
    let server = PORT.with(|port| Server::http(Ipv4Addr(127, 0, 0, 1), *port));
    server.listen(ok_serv).unwrap()
}

#[test]
fn client_api_test() {
    let mut server = server();

    let address = PORT.with(|port| format!("http://localhost:{}/", port)); 

    let request = ClientReq::post(Url::parse(&*address).unwrap()).unwrap();

    let mut multipart = ClientMulti::new();

    multipart.add_text("hello", "world");
    multipart.add_text("goodnight", "sun");
    multipart.sized = true;

    multipart.send(request).unwrap();
    
    server.close().unwrap();
}