xml-rpc 0.1.0

Pure Rust implementation of XML-RPC
Documentation
extern crate xml_rpc;

use std::net::{IpAddr, SocketAddr};
use std::time::Duration;
use xml_rpc::{call, Server};

fn main() {
    std::thread::spawn(|| {
        let mut server = Server::new();
        server.register_simple("foo", |()| {
            println!("foo start");
            std::thread::sleep(Duration::from_secs(5));
            println!("foo end");
            Ok(())
        });
        server.register_simple("bar", |()| {
            println!("bar start");
            std::thread::sleep(Duration::from_secs(5));
            println!("bar end");
            Ok(())
        });
        let bound_server = server
            .bind(&SocketAddr::new(
                IpAddr::V4("127.0.0.1".parse().unwrap()),
                5000,
            ))
            .unwrap();
        println!("Starting server!");
        bound_server.run();
    });

    std::thread::sleep(Duration::from_secs(1));

    let t1 = std::thread::spawn(|| {
        call::<_, _, ()>(&"http://127.0.0.1:5000".parse().unwrap(), "foo", ())
            .unwrap()
            .unwrap();
    });

    let t2 = std::thread::spawn(|| {
        call::<_, _, ()>(&"http://127.0.0.1:5000".parse().unwrap(), "bar", ())
            .unwrap()
            .unwrap();
    });

    let t3 = std::thread::spawn(|| {
        call::<_, _, ()>(&"http://127.0.0.1:5000".parse().unwrap(), "foo", ())
            .unwrap()
            .unwrap();
    });

    let t4 = std::thread::spawn(|| {
        call::<_, _, ()>(&"http://127.0.0.1:5000".parse().unwrap(), "bar", ())
            .unwrap()
            .unwrap();
    });

    t1.join().unwrap();
    t2.join().unwrap();
    t3.join().unwrap();
    t4.join().unwrap();
}