rustiful 0.1.0

This crate is for creating a JSONAPI backend, backed by Iron.
extern crate iron;
extern crate bodyparser;
extern crate serde;
extern crate serde_json;

use self::iron::prelude::*;
use super::super::RequestResult;
use FromRequest;
use errors::FromRequestError;
use errors::QueryStringParseError;
use iron::id;
use request::FromGet;
use service::JsonGet;
use sort_order::SortOrder;
use status::Status;
use std::error::Error;
use std::str::FromStr;
use to_json::ToJson;
use try_from::TryFrom;
use try_from::TryInto;

autoimpl! {
    pub trait GetHandler<'a, T> where
        T: JsonGet + ToJson + FromGet<'a, T>,
        T::Error: 'static,
        <T::Context as FromRequest>::Error: 'static,
        Status: for<'b> From<&'b T::Error>,
        T::SortField: for<'b> TryFrom<(&'b str, SortOrder), Error = QueryStringParseError>,
        T::FilterField: for<'b> TryFrom<(&'b str, Vec<&'b str>), Error = QueryStringParseError>,
        <T::JsonApiIdType as FromStr>::Err: Error
    {
        fn get(req: &'a mut Request) -> IronResult<Response> {
            let query = req.url.query().unwrap_or("");
            match FromRequest::from_request(req) {
                Ok(res) => {
                    let result = T::get(id(req), query, res);
                    RequestResult(result, Status::Ok).try_into()
                },
                Err(e) => FromRequestError::<<T::Context as FromRequest>::Error>(e).into()
            }
        }
    }
}