mirror of
https://github.com/OMGeeky/tarpc.git
synced 2026-02-23 15:49:54 +01:00
Merge
This commit is contained in:
@@ -3,7 +3,7 @@ extern crate rustc_serialize;
|
||||
extern crate byteorder;
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! rpc {
|
||||
macro_rules! rpc_service {
|
||||
($server:ident: $( $fn_name:ident( $( $arg:ident : $in_:ty ),* ) -> $out:ty;)* ) => {
|
||||
mod $server {
|
||||
use rustc_serialize::json;
|
||||
@@ -91,3 +91,46 @@ macro_rules! rpc {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use std::net::{TcpListener, TcpStream};
|
||||
use std::thread;
|
||||
use self::my_server::*;
|
||||
|
||||
rpc_service!(my_server:
|
||||
hello(foo: super::Foo) -> super::Foo;
|
||||
add(x: i32, y: i32) -> i32;
|
||||
);
|
||||
|
||||
#[derive(PartialEq, Debug, RustcEncodable, RustcDecodable)]
|
||||
pub struct Foo {
|
||||
message: String
|
||||
}
|
||||
|
||||
impl Service for () {
|
||||
fn hello(&self, s: Foo) -> Foo {
|
||||
Foo{message: format!("Hello, {}", &s.message)}
|
||||
}
|
||||
|
||||
fn add(&self, x: i32, y: i32) -> i32 {
|
||||
x + y
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn simple_test() {
|
||||
println!("Starting");
|
||||
let listener = TcpListener::bind("127.0.0.1:9000").unwrap();
|
||||
thread::spawn(|| {
|
||||
let server = Server::new(());
|
||||
println!("Server running");
|
||||
server.serve(listener);
|
||||
});
|
||||
let mut client = Client(TcpStream::connect("127.0.0.1:9000").unwrap());
|
||||
assert_eq!(3, client.add(1, 2).unwrap());
|
||||
let foo = Foo{message: "Adam".into()};
|
||||
let want = Foo{message: format!("Hello, {}", &foo.message)};
|
||||
assert_eq!(want, client.hello(Foo{message: "Adam".into()}).unwrap());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
#[macro_use]
|
||||
extern crate macros;
|
||||
extern crate rustc_serialize;
|
||||
extern crate byteorder;
|
||||
|
||||
use std::net::{TcpListener, TcpStream};
|
||||
|
||||
rpc!(my_server:
|
||||
add(x: i32, y: i32) -> i32;
|
||||
hello(s: String) -> String;
|
||||
);
|
||||
|
||||
use my_server::*;
|
||||
|
||||
impl Service for () {
|
||||
fn hello(&self, s: String) -> String {
|
||||
format!("Hello, {}", s)
|
||||
}
|
||||
|
||||
fn add(&self, x: i32, y: i32) -> i32 {
|
||||
x + y
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
println!("Starting");
|
||||
let listener = TcpListener::bind("127.0.0.1:9000").unwrap();
|
||||
std::thread::spawn(|| {
|
||||
let server = Server::new(());
|
||||
println!("Server running");
|
||||
server.serve(listener);
|
||||
});
|
||||
let mut client = Client(TcpStream::connect("127.0.0.1:9000").unwrap());
|
||||
println!("Client running");
|
||||
println!("add(1, 2) => {}", client.add(1, 2).unwrap());
|
||||
println!("hello(\"adam\") => {:?}", client.hello("Adam".into()));
|
||||
}
|
||||
Reference in New Issue
Block a user