Skip to main content

ErrorPage

Struct ErrorPage 

Source
#[non_exhaustive]
pub struct ErrorPage<'a> { pub status: u16, pub title: &'a str, pub message: &'a str, pub reference: &'a str, pub base: &'a str, }
Expand description

What an error page shows: the status, its generic title and message, and the request’s reference. Never the code or the cause.

base is the site’s base path ("" at the root, /blog for a site installed in a folder), so the page’s links and stylesheets point inside the site: url builds them as Context::url does for pages.

use web_net::{App, ErrorPage, Output, Render, RenderError, TemplateId, View, get};

/// No templates; its own error pages.
struct Plain;
impl Render for Plain {
    type View<'a> = dyn View + 'a;
    fn template(&self, _: &str) -> Option<TemplateId> { None }
    fn render(&self, _: TemplateId, _: &dyn View, _: &mut Output<'_>) -> Result<(), RenderError> { Ok(()) }
    fn error_page(&self, page: &ErrorPage<'_>, out: &mut Output<'_>) -> Result<bool, RenderError> {
        out.write_str(&format!("{} {}", page.status, page.title))?;
        Ok(true)
    }
}

let app = App::builder().render(Plain).route(get("/", |cx| cx.text(200, "home"))).build()?;
let r = serve_net::testing::respond(&app, b"GET /missing HTTP/1.1\r\nHost: localhost\r\n\r\n");
assert_eq!((r.status, r.text()), (404, "404 Not Found"));

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§status: u16

The status (404).

§title: &'a str

Its generic title (Not Found).

§message: &'a str

Its generic message.

§reference: &'a str

The request’s reference, as the visitor quotes it.

§base: &'a str

The site’s base path: "" at the root, /blog in a folder; never a trailing slash.

Implementations§

Source§

impl<'a> ErrorPage<'a>

Source

pub const fn new( status: u16, title: &'a str, message: &'a str, reference: &'a str, ) -> Self

An error page’s facts at the site’s root, for an engine’s own tests (web-net makes the real ones).

let p = web_net::ErrorPage::new(404, "Not Found", "The page was not found.", "1a-2");
assert_eq!((p.status, p.reference, p.base), (404, "1a-2", ""));
Source

pub const fn with_base(self, base: &'a str) -> Self

The same page for a site installed under base (/blog).

let p = web_net::ErrorPage::new(404, "Not Found", "-", "r").with_base("/blog");
assert_eq!(p.url("/static/site.css").unwrap(), "/blog/static/site.css");
Source

pub fn url(&self, path: &str) -> Result<String, RenderError>

A site path as a URL path, the base path in front: what the page’s links and stylesheets use, so they work for a site in a folder.

let root = web_net::ErrorPage::new(500, "Server Error", "-", "r");
assert_eq!(root.url("/")?, "/");
let blog = root.with_base("/blog");
assert_eq!(blog.url("/static/site.css")?, "/blog/static/site.css");
assert!(blog.url("//elsewhere.example").is_err());
§Errors

RenderError url.not_local when path is not a path of the site (as for Context::url).

Trait Implementations§

Source§

impl<'a> Clone for ErrorPage<'a>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Copy for ErrorPage<'a>

Source§

impl<'a> Debug for ErrorPage<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a> Eq for ErrorPage<'a>

Source§

impl<'a> PartialEq for ErrorPage<'a>

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl<'a> StructuralPartialEq for ErrorPage<'a>

Auto Trait Implementations§

§

impl<'a> Forget for ErrorPage<'a>

§

impl<'a> Freeze for ErrorPage<'a>

§

impl<'a> Move for ErrorPage<'a>

§

impl<'a> RefUnwindSafe for ErrorPage<'a>

§

impl<'a> Send for ErrorPage<'a>

§

impl<'a> Sync for ErrorPage<'a>

§

impl<'a> Unpin for ErrorPage<'a>

§

impl<'a> UnsafeUnpin for ErrorPage<'a>

§

impl<'a> UnwindSafe for ErrorPage<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.