Crate warp

source ·
Expand description

warp

warp is a super-easy, composable, web server framework for warp speeds.

Thanks to its Filter system, warp provides these out of the box:

  • Path routing and parameter extraction
  • Header requirements and extraction
  • Query string deserialization
  • JSON and Form bodies
  • Multipart form data
  • Static Files and Directories
  • Websockets
  • Access logging
  • Etc

Since it builds on top of hyper, you automatically get:

  • HTTP/1
  • HTTP/2
  • Asynchronous
  • One of the fastest HTTP implementations
  • Tested and correct

Filters

The main concept in warp is the Filter, which allows composition to describe various endpoints in your web service. Besides this powerful trait, warp comes with several built in filters, which can be combined for your specific needs.

As a small example, consider an endpoint that has path and header requirements:

use warp::Filter;

let hi = warp::path("hello")
    .and(warp::path::param())
    .and(warp::header("user-agent"))
    .map(|param: String, agent: String| {
        format!("Hello {}, whose agent is {}", param, agent)
    });

This example composes several Filters together using and:

  • A path prefix of “hello”
  • A path parameter of a String
  • The user-agent header parsed as a String

These specific filters will reject requests that don’t match their requirements.

This ends up matching requests like:

GET /hello/sean HTTP/1.1
Host: hyper.rs
User-Agent: reqwest/v0.8.6

And it returns a response similar to this:

HTTP/1.1 200 OK
Content-Length: 41
Date: ...

Hello sean, whose agent is reqwest/v0.8.6

Take a look at the full list of filters to see what you can build.

Testing

Testing your web services easily is extremely important, and warp provides a test module to help send mocked requests through your service.

Modules

Macros

  • Convenient way to chain multiple path filters together.

Structs

  • Errors that can happen inside warp.
  • A Warp Server ready to filter requests.
  • A Warp Server ready to filter requests over TLS.

Traits

  • Composable request filters.

Functions

  • Create a Server with the provided Filter.
  • Convert a Filter into a Service.
  • Combines received filter with pre and after filters