Trait front_line::FromRoute

source ·
pub trait FromRoute<'de>: Sized {
    // Required method
    fn parse_path_variable(slice: &'de str) -> Option<Self>;
}
Expand description

A trait to enable zero-copy parsing from route paths.

This trait is designed as an alternative to FromStr to support both zero-copy and copy parsing. It’s especially useful for HTTP route parsing where parts of the route can be efficiently parsed without the need to allocate memory for every segment of the route. This can lead to performance benefits, especially in web applications where route parsing happens frequently.

Implement this trait for types that need to be parsed from route paths.

Examples

// Suppose you have a route segment "/user/42"
// and you want to directly parse "42" into a UserId type.

use front_line_router::FromRoute;

struct UserId(u32);

impl<'de> FromRoute<'de> for UserId {
    fn parse_path_variable(slice: &'de str) -> Option<Self> {
        slice.parse().map(UserId).ok()
    }
}

Zero-copy example:

// For cases where the exact slice from the route path can be directly used,
// the `FromRoute` trait allows efficient zero-copy parsing.

use front_line_router::FromRoute;

struct UserName<'a>(&'a str);

impl<'de> FromRoute<'de> for UserName<'de> {
    fn parse_path_variable(slice: &'de str) -> Option<Self> {
        if slice.is_empty() {
            None
        } else {
            Some(UserName(slice))
        }
    }
}

// Given a route segment "/user/alice", "alice" can be parsed directly as UserName
// without creating a new String.

Required Methods§

source

fn parse_path_variable(slice: &'de str) -> Option<Self>

Parses a value from a route segment.

Arguments
  • slice - A segment of a route, typically a part between slashes in a URL.
Returns

Returns Some(T) if the segment can be successfully parsed into type T. Otherwise, returns None.

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl<'de> FromRoute<'de> for &'de str

source§

fn parse_path_variable(slice: &'de str) -> Option<&'de str>

source§

impl<'de> FromRoute<'de> for &'de [u8]

source§

fn parse_path_variable(slice: &'de str) -> Option<&'de [u8]>

source§

impl<'de> FromRoute<'de> for bool

source§

impl<'de> FromRoute<'de> for f32

source§

impl<'de> FromRoute<'de> for f64

source§

impl<'de> FromRoute<'de> for i8

source§

impl<'de> FromRoute<'de> for i16

source§

impl<'de> FromRoute<'de> for i32

source§

impl<'de> FromRoute<'de> for i64

source§

impl<'de> FromRoute<'de> for i128

source§

impl<'de> FromRoute<'de> for isize

source§

impl<'de> FromRoute<'de> for u8

source§

impl<'de> FromRoute<'de> for u16

source§

impl<'de> FromRoute<'de> for u32

source§

impl<'de> FromRoute<'de> for u64

source§

impl<'de> FromRoute<'de> for u128

source§

impl<'de> FromRoute<'de> for usize

source§

impl<'de> FromRoute<'de> for String

Implementors§