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:
parent
6680887b84
commit
b9002bd70d
2 changed files with 34 additions and 20 deletions
|
@ -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)*
|
||||||
|
|
|
@ -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>>;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue