diff --git a/src/macros/src/lib.rs b/src/macros/src/lib.rs index 0bfe807..d4c6675 100644 --- a/src/macros/src/lib.rs +++ b/src/macros/src/lib.rs @@ -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()); + } +} diff --git a/src/macros/src/main.rs b/src/macros/src/main.rs deleted file mode 100644 index b6dac09..0000000 --- a/src/macros/src/main.rs +++ /dev/null @@ -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())); -}