use crate::{DrawResourceRoutes, ResourceResult, ResourceType}; use gotham::state::State; use serde::de::DeserializeOwned; use std::panic::RefUnwindSafe; /// This trait must be implemented by every RESTful Resource. It will /// allow you to register the different methods for this Resource. pub trait Resource { /// The name of this resource. Must be unique. 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(route : D); } /// Handle a GET request on the Resource root. pub trait ResourceReadAll { fn read_all(state : &mut State) -> R; } /// Handle a GET request on the Resource with an id. pub trait ResourceRead where ID : DeserializeOwned + Clone + RefUnwindSafe + Send + Sync + 'static { fn read(state : &mut State, id : ID) -> R; } /// Handle a POST request on the Resource root. pub trait ResourceCreate { fn create(state : &mut State, body : Body) -> R; } /// Handle a PUT request on the Resource root. pub trait ResourceUpdateAll { fn update_all(state : &mut State, body : Body) -> R; } /// Handle a PUT request on the Resource with an id. pub trait ResourceUpdate where ID : DeserializeOwned + Clone + RefUnwindSafe + Send + Sync + 'static { fn update(state : &mut State, id : ID, body : Body) -> R; } /// Handle a DELETE request on the Resource root. pub trait ResourceDeleteAll { fn delete_all(state : &mut State) -> R; } /// Handle a DELETE request on the Resource with an id. pub trait ResourceDelete where ID : DeserializeOwned + Clone + RefUnwindSafe + Send + Sync + 'static { fn delete(state : &mut State, id : ID) -> R; }