From e845d996d9d7f68a6a840c44745a466439270089 Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 30 Sep 2019 19:19:06 +0200 Subject: [PATCH] start adding helper macros --- examples/users.rs | 31 ++++++++++++++----------------- src/helper.rs | 31 +++++++++++++++++++++++++++++++ src/lib.rs | 2 ++ src/resource.rs | 2 ++ 4 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 src/helper.rs diff --git a/examples/users.rs b/examples/users.rs index 1cfe938..f21d90b 100644 --- a/examples/users.rs +++ b/examples/users.rs @@ -1,5 +1,4 @@ #[macro_use] extern crate log; -#[macro_use] extern crate serde; use fake::{faker::internet::en::Username, Fake}; use gotham::{ @@ -16,13 +15,11 @@ use log4rs::{ encode::pattern::PatternEncoder }; -struct Users; +rest_resource!{Users} -#[derive(Deserialize, Serialize)] -struct User -{ +rest_struct!{User { username : String -} +}} impl ResourceReadAll>> for Users { @@ -90,17 +87,17 @@ impl ResourceDelete> for Users } } -impl Resource for Users -{ - fn setup(mut route : D) - { - route.read_all::(); - route.read::(); - route.create::(); - route.update_all::(); - route.update::(); - } -} +// impl Resource for Users +// { +// fn setup(mut route : D) +// { +// route.read_all::(); +// route.read::(); +// route.create::(); +// route.update_all::(); +// route.update::(); +// } +// } const ADDR : &str = "127.0.0.1:18080"; diff --git a/src/helper.rs b/src/helper.rs new file mode 100644 index 0000000..7b7996b --- /dev/null +++ b/src/helper.rs @@ -0,0 +1,31 @@ + +#[macro_export] +macro_rules! rest_struct { + ($struct_name:ident { $($field_id:ident : $field_ty:ty),* }) => { + #[derive(serde::Deserialize, serde::Serialize)] + struct $struct_name + { + $($field_id : $field_ty),* + } + } +} + +#[macro_export] +macro_rules! rest_resource { + ($res_name:ident) => { + struct $res_name; + + impl ::gotham_restful::Resource for $res_name + { + fn name() -> String + { + stringify!($res_name).to_string() + } + + fn setup(mut route : D) + { + unimplemented!(); + } + } + } +} diff --git a/src/lib.rs b/src/lib.rs index 7a3cfba..c008135 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,6 +3,8 @@ pub use hyper::StatusCode; +pub mod helper; + mod resource; pub use resource::{ Resource, diff --git a/src/resource.rs b/src/resource.rs index 5bc603b..f8e183c 100644 --- a/src/resource.rs +++ b/src/resource.rs @@ -7,6 +7,8 @@ use std::panic::RefUnwindSafe; /// allow you to register the different methods for this Resource. pub trait Resource { + fn name() -> String; + fn setup(route : D); }