Remove neglected and obscure 'Error' type.

This commit is contained in:
Sergio Benitez 2018-09-16 03:07:50 -07:00
parent 351757c6ee
commit 46afabdfea
10 changed files with 43 additions and 54 deletions

View File

@ -227,7 +227,8 @@ impl Handler for StaticFiles {
// Otherwise, we're handling segments. Get the segments as a `PathBuf`, // Otherwise, we're handling segments. Get the segments as a `PathBuf`,
// only allowing dotfiles if the user allowed it. // only allowing dotfiles if the user allowed it.
let allow_dotfiles = self.options.contains(Options::DotFiles); let allow_dotfiles = self.options.contains(Options::DotFiles);
let path = req.get_segments::<Segments>(0).ok() let path = req.get_segments::<Segments>(0)
.and_then(|res| res.ok())
.and_then(|segments| segments.into_path_buf(allow_dotfiles).ok()) .and_then(|segments| segments.into_path_buf(allow_dotfiles).ok())
.map(|path| self.root.join(path)) .map(|path| self.root.join(path))
.into_outcome(Status::NotFound)?; .into_outcome(Status::NotFound)?;

View File

@ -83,7 +83,6 @@ pub fn _catch(args: TokenStream, input: TokenStream) -> Result<TokenStream> {
#user_catcher_fn #user_catcher_fn
#vis fn #generated_fn_name<'_b>( #vis fn #generated_fn_name<'_b>(
_: ::rocket::Error,
__req: &'_b ::rocket::Request __req: &'_b ::rocket::Request
) -> ::rocket::response::Result<'_b> { ) -> ::rocket::response::Result<'_b> {
let response = #catcher_response; let response = #catcher_response;

View File

@ -1,7 +1,6 @@
use response; use response;
use handler::ErrorHandler; use handler::ErrorHandler;
use codegen::StaticCatchInfo; use codegen::StaticCatchInfo;
use error::Error;
use request::Request; use request::Request;
use std::fmt; use std::fmt;
@ -76,17 +75,17 @@ impl Catcher {
/// ///
/// ```rust /// ```rust
/// # #![allow(unused_variables)] /// # #![allow(unused_variables)]
/// use rocket::{Catcher, Request, Error}; /// use rocket::{Catcher, Request};
/// use rocket::response::{Result, Responder}; /// use rocket::response::{Result, Responder};
/// use rocket::response::status::Custom; /// use rocket::response::status::Custom;
/// use rocket::http::Status; /// use rocket::http::Status;
/// ///
/// fn handle_404<'r>(_: Error, req: &'r Request) -> Result<'r> { /// fn handle_404<'r>(req: &'r Request) -> Result<'r> {
/// let res = Custom(Status::NotFound, format!("404: {}", req.uri())); /// let res = Custom(Status::NotFound, format!("404: {}", req.uri()));
/// res.respond_to(req) /// res.respond_to(req)
/// } /// }
/// ///
/// fn handle_500<'r>(_: Error, req: &'r Request) -> Result<'r> { /// fn handle_500<'r>(req: &'r Request) -> Result<'r> {
/// "Whoops, we messed up!".respond_to(req) /// "Whoops, we messed up!".respond_to(req)
/// } /// }
/// ///
@ -99,8 +98,8 @@ impl Catcher {
} }
#[inline(always)] #[inline(always)]
crate fn handle<'r>(&self, e: Error, r: &'r Request) -> response::Result<'r> { crate fn handle<'r>(&self, req: &'r Request) -> response::Result<'r> {
(self.handler)(e, r) (self.handler)(req)
} }
#[inline(always)] #[inline(always)]
@ -150,7 +149,7 @@ macro_rules! default_catchers {
let mut map = HashMap::new(); let mut map = HashMap::new();
$( $(
fn $fn_name<'r>(_: Error, req: &'r Request) -> response::Result<'r> { fn $fn_name<'r>(req: &'r Request) -> response::Result<'r> {
status::Custom(Status::from_code($code).unwrap(), status::Custom(Status::from_code($code).unwrap(),
content::Html(error_page_template!($code, $name, $description)) content::Html(error_page_template!($code, $name, $description))
).respond_to(req) ).respond_to(req)
@ -171,7 +170,6 @@ pub mod defaults {
use request::Request; use request::Request;
use response::{self, content, status, Responder}; use response::{self, content, status, Responder};
use http::Status; use http::Status;
use error::Error;
pub fn get() -> HashMap<u16, Catcher> { pub fn get() -> HashMap<u16, Catcher> {
default_catchers! { default_catchers! {

View File

@ -8,21 +8,6 @@ use yansi::Paint;
use http::hyper; use http::hyper;
use router::Route; use router::Route;
/// [unstable] Error type for Rocket. Likely to change.
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
pub enum Error {
/// The request method was bad.
BadMethod,
/// The value could not be parsed.
BadParse,
/// There was no such route.
NoRoute, // TODO: Add a chain of routes attempted.
/// The error was internal.
Internal,
/// The requested key/index does not exist.
NoKey,
}
/// The kind of launch error that occurred. /// The kind of launch error that occurred.
/// ///
/// In almost every instance, a launch error occurs because of an I/O error; /// In almost every instance, a launch error occurs because of an I/O error;

View File

@ -3,7 +3,6 @@
use data::Data; use data::Data;
use request::Request; use request::Request;
use response::{self, Response, Responder}; use response::{self, Response, Responder};
use error::Error;
use http::Status; use http::Status;
use outcome; use outcome;
@ -180,7 +179,7 @@ impl<F: Clone + Sync + Send + 'static> Handler for F
} }
/// The type of an error handler. /// The type of an error handler.
pub type ErrorHandler = for<'r> fn(Error, &'r Request) -> response::Result<'r>; pub type ErrorHandler = for<'r> fn(&'r Request) -> response::Result<'r>;
impl<'r> Outcome<'r> { impl<'r> Outcome<'r> {
/// Return the `Outcome` of response to `req` from `responder`. /// Return the `Outcome` of response to `req` from `responder`.

View File

@ -150,7 +150,6 @@ mod ext;
#[doc(inline)] pub use outcome::Outcome; #[doc(inline)] pub use outcome::Outcome;
#[doc(inline)] pub use data::Data; #[doc(inline)] pub use data::Data;
#[doc(inline)] pub use config::Config; #[doc(inline)] pub use config::Config;
#[doc(inline)] pub use error::Error;
pub use router::Route; pub use router::Route;
pub use request::{Request, State}; pub use request::{Request, State};
pub use catcher::Catcher; pub use catcher::Catcher;

View File

@ -13,7 +13,6 @@ use rocket::Rocket;
use router::Route; use router::Route;
use config::{Config, Limits}; use config::{Config, Limits};
use http::uri::{Origin, Segments}; use http::uri::{Origin, Segments};
use error::Error;
use http::{Method, Header, HeaderMap, Cookies, CookieJar}; use http::{Method, Header, HeaderMap, Cookies, CookieJar};
use http::{RawStr, ContentType, Accept, MediaType}; use http::{RawStr, ContentType, Accept, MediaType};
use http::hyper; use http::hyper;
@ -554,9 +553,9 @@ impl<'r> Request<'r> {
} }
/// Retrieves and parses into `T` the 0-indexed `n`th dynamic parameter from /// Retrieves and parses into `T` the 0-indexed `n`th dynamic parameter from
/// the request. Returns `Error::NoKey` if `n` is greater than the number of /// the request. Returns `None` if `n` is greater than the number of params.
/// params. Returns `Error::BadParse` if the parameter type `T` can't be /// Returns `Some(Err(T::Error))` if the parameter type `T` failed to be
/// parsed from the parameter. /// parsed from the `n`th dynamic parameter.
/// ///
/// This method exists only to be used by manual routing. To retrieve /// This method exists only to be used by manual routing. To retrieve
/// parameters from a request, use Rocket's code generation facilities. /// parameters from a request, use Rocket's code generation facilities.
@ -572,12 +571,17 @@ impl<'r> Request<'r> {
/// ///
/// # #[allow(dead_code)] /// # #[allow(dead_code)]
/// fn name<'a>(req: &'a Request, _: Data) -> Outcome<'a> { /// fn name<'a>(req: &'a Request, _: Data) -> Outcome<'a> {
/// Outcome::from(req, req.get_param::<String>(0).unwrap_or("unnamed".into())) /// let string = req.get_param::<String>(0)
/// .and_then(|res| res.ok())
/// .unwrap_or_else(|| "unnamed".into());
///
/// Outcome::from(req, string)
/// } /// }
/// ``` /// ```
pub fn get_param<'a, T: FromParam<'a>>(&'a self, n: usize) -> Result<T, Error> { pub fn get_param<'a, T>(&'a self, n: usize) -> Option<Result<T, T::Error>>
let param = self.get_param_str(n).ok_or(Error::NoKey)?; where T: FromParam<'a>
T::from_param(param).map_err(|_| Error::BadParse) {
Some(T::from_param(self.get_param_str(n)?))
} }
/// Get the `n`th path parameter as a string, if it exists. This is used by /// Get the `n`th path parameter as a string, if it exists. This is used by
@ -610,8 +614,8 @@ impl<'r> Request<'r> {
/// ///
/// # Error /// # Error
/// ///
/// If there are less than `n` segments, returns an `Err` of `NoKey`. If /// If there are less than `n` segments, returns `None`. If parsing the
/// parsing the segments failed, returns an `Err` of `BadParse`. /// segments failed, returns `Some(Err(T:Error))`.
/// ///
/// # Example /// # Example
/// ///
@ -619,10 +623,10 @@ impl<'r> Request<'r> {
/// path for this request is `"/hello/<name>/i/<segs..>"`, then /// path for this request is `"/hello/<name>/i/<segs..>"`, then
/// `request.get_segments::<T>(1)` will attempt to parse the segments /// `request.get_segments::<T>(1)` will attempt to parse the segments
/// `"am/here"` as type `T`. /// `"am/here"` as type `T`.
pub fn get_segments<'a, T: FromSegments<'a>>(&'a self, n: usize) pub fn get_segments<'a, T>(&'a self, n: usize) -> Option<Result<T, T::Error>>
-> Result<T, Error> { where T: FromSegments<'a>
let segments = self.get_raw_segments(n).ok_or(Error::NoKey)?; {
T::from_segments(segments).map_err(|_| Error::BadParse) Some(T::from_segments(self.get_raw_segments(n)?))
} }
/// Get the segments beginning at the `n`th dynamic parameter, if they /// Get the segments beginning at the `n`th dynamic parameter, if they

View File

@ -19,7 +19,7 @@ use response::{Body, Response};
use router::{Router, Route}; use router::{Router, Route};
use catcher::{self, Catcher}; use catcher::{self, Catcher};
use outcome::Outcome; use outcome::Outcome;
use error::{Error, LaunchError, LaunchErrorKind}; use error::{LaunchError, LaunchErrorKind};
use fairing::{Fairing, Fairings}; use fairing::{Fairing, Fairings};
use http::{Method, Status, Header}; use http::{Method, Status, Header};
@ -320,12 +320,11 @@ impl Rocket {
}); });
// Dispatch to the user's catcher. If it fails, use the default 500. // Dispatch to the user's catcher. If it fails, use the default 500.
let error = Error::NoRoute; catcher.handle(req).unwrap_or_else(|err_status| {
catcher.handle(error, req).unwrap_or_else(|err_status| {
error_!("Catcher failed with status: {}!", err_status); error_!("Catcher failed with status: {}!", err_status);
warn_!("Using default 500 error catcher."); warn_!("Using default 500 error catcher.");
let default = self.default_catchers.get(&500).expect("Default 500"); let default = self.default_catchers.get(&500).expect("Default 500");
default.handle(error, req).expect("Default 500 response.") default.handle(req).expect("Default 500 response.")
}) })
} }

View File

@ -7,7 +7,7 @@ extern crate rocket;
#[cfg(test)] mod tests; #[cfg(test)] mod tests;
use rocket::{catch, Request, State}; use rocket::{catch, State};
use rocket_contrib::{Json, JsonValue}; use rocket_contrib::{Json, JsonValue};
use std::collections::HashMap; use std::collections::HashMap;
use std::sync::Mutex; use std::sync::Mutex;

View File

@ -6,10 +6,9 @@ mod tests;
use std::io; use std::io;
use std::fs::File; use std::fs::File;
use rocket::{Request, Handler, Route, Data, Catcher, Error}; use rocket::{Request, Handler, Route, Data, Catcher};
use rocket::http::{Status, RawStr}; use rocket::http::{Status, RawStr};
use rocket::response::{self, Responder}; use rocket::response::{self, Responder, status::Custom};
use rocket::response::status::Custom;
use rocket::handler::Outcome; use rocket::handler::Outcome;
use rocket::outcome::IntoOutcome; use rocket::outcome::IntoOutcome;
use rocket::http::Method::*; use rocket::http::Method::*;
@ -23,8 +22,11 @@ fn hi<'r>(req: &'r Request, _: Data) -> Outcome<'r> {
} }
fn name<'a>(req: &'a Request, _: Data) -> Outcome<'a> { fn name<'a>(req: &'a Request, _: Data) -> Outcome<'a> {
let param = req.get_param::<&'a RawStr>(0); let param = req.get_param::<&'a RawStr>(0)
Outcome::from(req, param.map(|r| r.as_str()).unwrap_or("unnamed")) .and_then(|res| res.ok())
.unwrap_or("unnamed".into());
Outcome::from(req, param.as_str())
} }
fn echo_url<'r>(req: &'r Request, _: Data) -> Outcome<'r> { fn echo_url<'r>(req: &'r Request, _: Data) -> Outcome<'r> {
@ -60,7 +62,7 @@ fn get_upload<'r>(req: &'r Request, _: Data) -> Outcome<'r> {
Outcome::from(req, File::open("/tmp/upload.txt").ok()) Outcome::from(req, File::open("/tmp/upload.txt").ok())
} }
fn not_found_handler<'r>(_: Error, req: &'r Request) -> response::Result<'r> { fn not_found_handler<'r>(req: &'r Request) -> response::Result<'r> {
let res = Custom(Status::NotFound, format!("Couldn't find: {}", req.uri())); let res = Custom(Status::NotFound, format!("Couldn't find: {}", req.uri()));
res.respond_to(req) res.respond_to(req)
} }
@ -78,7 +80,10 @@ impl CustomHandler {
impl Handler for CustomHandler { impl Handler for CustomHandler {
fn handle<'r>(&self, req: &'r Request, data: Data) -> Outcome<'r> { fn handle<'r>(&self, req: &'r Request, data: Data) -> Outcome<'r> {
let id = req.get_param::<&RawStr>(0).ok().or_forward(data)?; let id = req.get_param::<&RawStr>(0)
.and_then(|res| res.ok())
.or_forward(data)?;
Outcome::from(req, format!("{} - {}", self.data, id)) Outcome::from(req, format!("{} - {}", self.data, id))
} }
} }