# Deprecation Note This crate was originally meant to be a starting point for a more sophisticated REST(like) api project. But due to schedule changes this will no longer be realised. Through I have updated it to be compatible with a newer Iron version (0.4) further updates cant be expected. # REsource EndPoint (REEP) [deprecated] Provides a `ResourceEndpointBuilder` witch allows you to easily build RESTlike resource based endpoints. This implementation uses static constraints to assure that e.g. if a resource replacing handler is called the query options are parsed/valid, the resource id in the url is parsed/valid and the body is parsed/valid. All parsed elements (option(=queryparameter), id and body) will be put into the request extensions `typemap` using the statically provided types. Note that it is assured that the `BodyParser` creates a resource witch's id type is the same as that of the parsed id. ## State of the Project - basic functionality is working - documentation exists for all parts but could be improved (e.g. examples) - minimal http/options hander are generated if not provided - head request have to be handled manually (HttpHead ResourceMethod) - some default/generic option/id/body implementations exist in additional repos - no TravisCI integration yet - not published on crates.io yet - no tests yet expect a working example ## Utils / Preimplementated Parts There are some existing reusable implementations for some of the `reep::types`-Traits: - [generic BodyParser using json/rustc_serialize](https://github.com/naicode/reep-bodyparser-rustcdecodable) - [String Id with (optional) serialisation support](https://github.com/naicode/reep-id-string) - [optionParser using urlencoded query parsing](https://github.com/naicode/reep-optionparser-urlencoded) ## Example A full example, using `reep` as well as some `reep-*` utility crates, can be found in the [reep-example repo](https://github.com/naicode/reep-example). Additionally here is a schematic usage example: ```rustc let ep = ResourceEndpointBuilder::new(optionParser, bodyParser) .create(ironHandlerForCreating) .list(ironHandlerForListing) .delete(ironHanderForDeleting) .replace(ironHandlerForReplacing) .get(ironHanderForGeting) .finalize(); app.mount("/users", ep); ``` ## License Licensed under either of * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) at your option. ### Contribution Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.