1
0
Fork 0
mirror of https://gitlab.com/msrd0/gotham-restful.git synced 2025-02-23 04:52:28 +00:00

remove Resource::name() method and update resource documentation

This commit is contained in:
Dominic 2020-05-09 18:01:47 +02:00
parent 6680887b84
commit b9002bd70d
Signed by: msrd0
GPG key ID: DCC8C247452E98F9
2 changed files with 34 additions and 20 deletions

View file

@ -48,11 +48,6 @@ pub fn expand_resource(input : DeriveInput) -> Result<TokenStream>
Ok(quote! { Ok(quote! {
impl #krate::Resource for #ident impl #krate::Resource for #ident
{ {
fn name() -> String
{
stringify!(#ident).to_string()
}
fn setup<D : #krate::DrawResourceRoutes>(mut route : D) fn setup<D : #krate::DrawResourceRoutes>(mut route : D)
{ {
#(#methods)* #(#methods)*

View file

@ -9,18 +9,22 @@ use std::{
pin::Pin pin::Pin
}; };
/// This trait must be implemented by every RESTful Resource. It will /// This trait must be implemented for every resource. It allows you to register the different
/// allow you to register the different methods for this Resource. /// methods that can be handled by this resource to be registered with the underlying router.
///
/// It is not recommended to implement this yourself, rather just use `#[derive(Resource)]`.
pub trait Resource pub trait Resource
{ {
/// The name of this resource. Must be unique. /// Register all methods handled by this resource with the underlying router.
fn name() -> String;
/// Setup all routes of this resource. Take a look at the rest_resource!
/// macro if you don't feel like caring yourself.
fn setup<D : DrawResourceRoutes>(route : D); fn setup<D : DrawResourceRoutes>(route : D);
} }
/// A common trait for every resource method. It defines the return type as well as some general
/// information about a resource method.
///
/// It is not recommended to implement this yourself. Rather, just write your handler method and
/// annotate it with `#[<method>(YourResource)]`, where `<method>` is one of the supported
/// resource methods.
pub trait ResourceMethod pub trait ResourceMethod
{ {
type Res : ResourceResult + Send + 'static; type Res : ResourceResult + Send + 'static;
@ -37,63 +41,78 @@ pub trait ResourceMethod
} }
} }
/// Handle a GET request on the Resource root. /// The read_all [`ResourceMethod`](trait.ResourceMethod.html).
pub trait ResourceReadAll : ResourceMethod pub trait ResourceReadAll : ResourceMethod
{ {
/// Handle a GET request on the Resource root.
fn read_all(state : State) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>; fn read_all(state : State) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>;
} }
/// Handle a GET request on the Resource with an id. /// The read [`ResourceMethod`](trait.ResourceMethod.html).
pub trait ResourceRead : ResourceMethod pub trait ResourceRead : ResourceMethod
{ {
/// The ID type to be parsed from the request path.
type ID : ResourceID + 'static; type ID : ResourceID + 'static;
/// Handle a GET request on the Resource with an id.
fn read(state : State, id : Self::ID) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>; fn read(state : State, id : Self::ID) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>;
} }
/// Handle a GET request on the Resource with additional search parameters. /// The search [`ResourceMethod`](trait.ResourceMethod.html).
pub trait ResourceSearch : ResourceMethod pub trait ResourceSearch : ResourceMethod
{ {
/// The Query type to be parsed from the request parameters.
type Query : ResourceType + QueryStringExtractor<Body> + Sync; type Query : ResourceType + QueryStringExtractor<Body> + Sync;
/// Handle a GET request on the Resource with additional search parameters.
fn search(state : State, query : Self::Query) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>; fn search(state : State, query : Self::Query) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>;
} }
/// Handle a POST request on the Resource root. /// The create [`ResourceMethod`](trait.ResourceMethod.html).
pub trait ResourceCreate : ResourceMethod pub trait ResourceCreate : ResourceMethod
{ {
/// The Body type to be parsed from the request body.
type Body : RequestBody; type Body : RequestBody;
/// Handle a POST request on the Resource root.
fn create(state : State, body : Self::Body) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>; fn create(state : State, body : Self::Body) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>;
} }
/// Handle a PUT request on the Resource root. /// The change_all [`ResourceMethod`](trait.ResourceMethod.html).
pub trait ResourceChangeAll : ResourceMethod pub trait ResourceChangeAll : ResourceMethod
{ {
/// The Body type to be parsed from the request body.
type Body : RequestBody; type Body : RequestBody;
/// Handle a PUT request on the Resource root.
fn change_all(state : State, body : Self::Body) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>; fn change_all(state : State, body : Self::Body) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>;
} }
/// Handle a PUT request on the Resource with an id. /// The change [`ResourceMethod`](trait.ResourceMethod.html).
pub trait ResourceChange : ResourceMethod pub trait ResourceChange : ResourceMethod
{ {
/// The Body type to be parsed from the request body.
type Body : RequestBody; type Body : RequestBody;
/// The ID type to be parsed from the request path.
type ID : ResourceID + 'static; type ID : ResourceID + 'static;
/// Handle a PUT request on the Resource with an id.
fn change(state : State, id : Self::ID, body : Self::Body) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>; fn change(state : State, id : Self::ID, body : Self::Body) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>;
} }
/// Handle a DELETE request on the Resource root. /// The remove_all [`ResourceMethod`](trait.ResourceMethod.html).
pub trait ResourceRemoveAll : ResourceMethod pub trait ResourceRemoveAll : ResourceMethod
{ {
/// Handle a DELETE request on the Resource root.
fn remove_all(state : State) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>; fn remove_all(state : State) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>;
} }
/// Handle a DELETE request on the Resource with an id. /// The remove [`ResourceMethod`](trait.ResourceMethod.html).
pub trait ResourceRemove : ResourceMethod pub trait ResourceRemove : ResourceMethod
{ {
/// The ID type to be parsed from the request path.
type ID : ResourceID + 'static; type ID : ResourceID + 'static;
/// Handle a DELETE request on the Resource with an id.
fn remove(state : State, id : Self::ID) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>; fn remove(state : State, id : Self::ID) -> Pin<Box<dyn Future<Output = (State, Self::Res)> + Send>>;
} }