add enum containing all successful route returns (#614)
* add enum containing all successful route returns This enum derives `Responder`, so it can be used as route result. We also implement `From`, so it can be converted * disable clippy warning about this enum There's no use trying to chase this warning. The next warning will be about `Redirect`, which itself is 360 byte, according to @fdb-hiroshima (thanks for the research!) So, if anything, we can try to get Rocket to work on that! * refactor routes/posts to only use one level of Result * admin settings error is not an ErrorPage, so dont use Result<> * refactor: use early return to remove indent of main logic This diff is absolutely atrocious. but the resulting readability is worth it * refactor routes/post for early returns & RespondOrRedirect * refactor routes/session for early returns & use RespondOrRedirect * refactor routes/user -- add another field to enum * refactor routes/blogs for early returns & RespondOrRedirect * refactor routes/blogs for early returns & RespondOrRedirect This is a final refactor of `pub fn update()` for readability. We're removing at least one indentation level.
This commit is contained in:
+37
-1
@@ -7,15 +7,51 @@ use rocket::{
|
||||
RawStr, Status,
|
||||
},
|
||||
request::{self, FromFormValue, FromRequest, Request},
|
||||
response::NamedFile,
|
||||
response::{Flash, NamedFile, Redirect},
|
||||
Outcome,
|
||||
};
|
||||
use std::path::{Path, PathBuf};
|
||||
use template_utils::Ructe;
|
||||
|
||||
use plume_models::{posts::Post, Connection};
|
||||
|
||||
const ITEMS_PER_PAGE: i32 = 12;
|
||||
|
||||
/// Special return type used for routes that "cannot fail", and instead
|
||||
/// `Redirect`, or `Flash<Redirect>`, when we cannot deliver a `Ructe` Response
|
||||
#[allow(clippy::large_enum_variant)]
|
||||
#[derive(Responder)]
|
||||
pub enum RespondOrRedirect {
|
||||
Response(Ructe),
|
||||
FlashResponse(Flash<Ructe>),
|
||||
Redirect(Redirect),
|
||||
FlashRedirect(Flash<Redirect>),
|
||||
}
|
||||
|
||||
impl From<Ructe> for RespondOrRedirect {
|
||||
fn from(response: Ructe) -> Self {
|
||||
RespondOrRedirect::Response(response)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Flash<Ructe>> for RespondOrRedirect {
|
||||
fn from(response: Flash<Ructe>) -> Self {
|
||||
RespondOrRedirect::FlashResponse(response)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Redirect> for RespondOrRedirect {
|
||||
fn from(redirect: Redirect) -> Self {
|
||||
RespondOrRedirect::Redirect(redirect)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Flash<Redirect>> for RespondOrRedirect {
|
||||
fn from(redirect: Flash<Redirect>) -> Self {
|
||||
RespondOrRedirect::FlashRedirect(redirect)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Shrinkwrap, Copy, Clone, UriDisplayQuery)]
|
||||
pub struct Page(i32);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user