Update Rust crate rocket to 0.5.0 - autoclosed
This MR contains the following updates:
Package | Type | Update | Change |
---|---|---|---|
rocket (source) | dependencies | patch |
0.5.0-rc.3 -> 0.5.0
|
Release Notes
SergioBenitez/Rocket (rocket)
v0.5.0
Major Features and Improvements
This release introduces the following major features and improvements:
- Support for compilation on Rust's stable release channel.
- A rewritten, fully asynchronous core with support for [
async
/await
][async/await]. - WebSocket support via [
rocket_ws
][rocket_ws]. - Feature-complete forms support including multipart, collections, ad-hoc validation, and context.
- Sentinels: automatic verification of application state at start-up to prevent runtime errors.
- Graceful shutdown with configurable signaling, grace periods, notification, and shutdown fairings.
- An entirely new, flexible and robust configuration system based on Figment.
- Typed asynchronous streams and Server-Sent Events with generator syntax.
- Asynchronous database pooling support via [
rocket_db_pools
][rocket_db_pools]. - Support for mutual TLS and client [
Certificate
][Certificate]s. - Automatic support for HTTP/2 including
h2
ALPN. - Graduation of
json
,msgpack
, anduuid
rocket_contrib
features into core. - An automatically enabled [
Shield
][Shield]: security and privacy headers for all responses. - Type-system enforced incoming data limits to mitigate memory-based DoS attacks.
- Compile-time URI literals via a fully revamped [
uri!
][uri!] macro. - Request connection upgrade APIs with support for raw I/O with the client.
- Full support for UTF-8 characters in routes and catchers.
- Precise detection of missing managed state, databases, and templating with sentinels.
- Typed build phases with strict application-level guarantees.
- Ignorable segments: wildcard route matching with no typing restrictions.
- First-class [support for
serde
][support for serde] for built-in guards and types. - New application launch attributes:
#[launch]
and#[rocket::main]
. -
Default catchers via
#[catch(default)]
, which handle any status code. - Catcher scoping to narrow the scope of a catcher to a URI prefix.
- Built-in libraries and support for asynchronous testing.
- A [
TempFile
][TempFile] data and form guard for automatic uploading to a temporary file. - A [
Capped<T>
][Capped] data and form guard which enables detecting truncation due to data limits. - Support for dynamic and static prefixing and suffixing of route URIs in [
uri!
][uri!]. - Support for custom config profiles and automatic typed config extraction.
- Rewritten, zero-copy, RFC compliant URI parsers with support for URI-[
Reference
][Reference]s. - Multi-segment parameters (
<param..>
) which match zero segments. - A [
local_cache!
][local_cache!] macro for request-local storage of non-uniquely typed values. - A [
CookieJar
][CookieJar] without "one-at-a-time" limitations. - Singleton fairings with replacement and guaranteed uniqueness.
-
Data limit declaration in SI units: "2 MiB",
2.mebibytes()
. - Optimistic responding even when data is left unread or limits are exceeded.
- Fully decoded borrowed strings as dynamic parameters, form and data guards.
- Borrowed byte slices as data and form guards.
- Fail-fast behavior for misconfigured secrets, file serving paths.
- Support for generics and custom generic bounds in
#[derive(Responder)]
. - Default ranking colors, which prevent more routing collisions automatically.
- Improved error logging with suggestions when common errors are detected.
- Completely rewritten examples including a new real-time [
chat
][chat] application.
Support for Rust Stable
As a result of support for Rust stable (Rust 2021 Edition and beyond),
#![feature(..)]
crate attributes are no longer required to use Rocket. The
complete canonical example with a single hello
route becomes:
#[macro_use] extern crate rocket;
#[get("/<name>/<age>")]
fn hello(name: &str, age: u8) -> String {
format!("Hello, {} year old named {}!", age, name)
}
#[launch]
fn rocket() -> _ {
rocket::build().mount("/hello", routes![hello])
}
See a diff
of the changes from v0.4.
- #![feature(proc_macro_hygiene, decl_macro)]
-
#[macro_use] extern crate rocket;
#[get("/<name>/<age>")]
- fn hello(name: String, age: u8) -> String {
+ fn hello(name: &str, age: u8) -> String {
format!("Hello, {} year old named {}!", age, name)
}
- fn main() {
- rocket::ignite().mount("/hello", routes![hello]).launch();
- }
+ #[launch]
+ fn rocket() -> _ {
+ rocket::build().mount("/hello", routes![hello])
+ }
Breaking Changes
This release includes many breaking changes. For a walkthrough guide on handling these changes, see the v0.4 to v0.5 migration guide. The most significant changes are listed below.
Silent Changes
These changes are invisible to the compiler and will not yield errors or warnings at compile-time. We strongly advise all application authors to review this list carefully.
- Blocking I/O (long running compute, synchronous
sleep()
,Mutex
,RwLock
, etc.) may prevent the server from making progress and should be avoided, replaced with anasync
variant, or performed in a worker thread. This is a consequence of Rust's cooperativeasync
multitasking. For details, see the new multitasking section of the guide. -
ROCKET_ENV
is nowROCKET_PROFILE
. A warning is emitted a launch time if the former is set. - The default profile for debug builds is now
debug
, notdev
. - The default profile for release builds is now
release
, notprod
. -
ROCKET_LOG
is nowROCKET_LOG_LEVEL
. A warning is emitted a launch time if the former is set. -
ROCKET_ADDRESS
accepts only IP addresses, no longer resolves hostnames likelocalhost
. -
ROCKET_CLI_COLORS
accepts booleanstrue
,false
in place of strings"on"
,"off"
. - It is a launch-time error if
secrets
is enabled in non-debug
profiles without a configuredsecret_key
. - A misconfigured
template_dir
is reported as an error at launch time. - [
FileServer::new()
][FileServer::new()] fails immediately if the provided directory does not exist. - Catcher collisions result in a launch failure as opposed to a warning.
- Default ranks now range from
-12
to-1
. There is no breaking change if only code generated routes are used. Manually configured routes with negative ranks may collide or be considered in a different order than before. - The order of execution of path and query guards relative to each other is now unspecified.
- URIs beginning with
:
are properly recognized as invalid and rejected. - URI normalization now normalizes the query part as well.
- The
Segments
iterator now returns percent-decoded&str
s. - Forms are now parsed leniently by the [
Form
guard][Form guard]. Use [Strict
][Strict] for the previous behavior. - The
Option<T>
form guard defaults toNone
instead of the default value forT
. - When data limits are exceeded, a
413 Payload Too Large
status is returned to the client. - The default catcher now returns JSON when the client indicates preference via the
Accept
header. - Empty boolean form values parse as
true
: the query string?f
is the same as?f=true
. - [
Created<R>
][Created] does not automatically send anETag
header ifR: Hash
. Use [Created::tagged_body
][Created::tagged_body] instead. -
FileServer
now forwards when a file is not found instead of failing with404 Not Found
. - [
Shield
][Shield] is enabled by default. You may need to disable or change policies if your application depends on typically insecure browser features or if you wish to opt-in to different policies than the defaults. - [
CookieJar
][CookieJar]get()
s do not return cookies added during request handling. See [CookieJar
#pending][CookieJar#pending]. -
Hash
impl
s forMediaType
andContentType
no longer consider media type parameters. - When requested, the
FromForm
implementations ofVec
andMap
s are now properly lenient. - To agree with browsers, the
[
and]
characters are now accepted in URI paths. - The
[
and]
characters are no longer encoded by [uri!
][uri!]. - The
Secure
cookie flag is set by default for all cookies when serving over TLS. - Removal cookies have
SameSite
set toLax
by default. - [
MediaType::JavaScript
][MediaType::JavaScript] is nowtext/javascript
.
Contrib Graduation
The rocket_contrib
crate is deprecated and the functionality moved to other rocket
crates. The
contrib deprecation upgrade guide provides a walkthrough on migrating. The relevant changes are:
- Several features previously in
rocket_contrib
were merged intorocket
itself:-
json
,msgpack
, anduuid
are now [features ofrocket
][features of rocket]. - Moved
rocket_contrib::json
to [rocket::serde::json
][rocket::serde::json]. - Moved
rocket_contrib::msgpack
to [rocket::serde::msgpack
][rocket::serde::msgpack]. - Moved
rocket_contrib::uuid
to [rocket::serde::uuid
][rocket::serde::uuid]. - Moved
rocket_contrib::helmet
to [rocket::shield
][rocket::shield]. [Shield
][Shield] is enabled by default. - Moved
rocket_contrib::serve
to [rocket::fs
][rocket::fs],StaticFiles
to [rocket::fs::FileServer
][rocket::fs::FileServer]. - Removed the now unnecessary
Uuid
andJsonValue
wrapper types. - Removed headers in
Shield
that are no longer respected by browsers.
-
- The remaining features from
rocket_contrib
are now provided by separate crates:- Replaced
rocket_contrib::templates
with [rocket_dyn_templates
][rocket_dyn_templates]. - Replaced
rocket_contrib::databases
with [rocket_sync_db_pools
][rocket_sync_db_pools] and [rocket_db_pools
][rocket_db_pools]. - These crates are versioned and released independently of
rocket
. -
rocket_contrib::databases::DbError
is nowrocket_sync_db_pools::Error
. - Removed
redis
,mongodb
, andmysql
integrations which have upstreamasync
drivers. - The
#[database]
attribute generates an [async run()
][async run()] method instead ofDeref
implementations.
- Replaced
General
The following breaking changes apply broadly and are likely to cause compile-time errors.
- [
Rocket
][Rocket] is now generic over a phase marker:- APIs operate on
Rocket<Build>
,Rocket<Ignite>
,Rocket<Orbit>
, orRocket<P: Phase>
as needed. - The phase marker statically enforces state transitions in
Build
,Ignite
,Orbit
order. -
rocket::ignite()
is now [rocket::build()
][rocket::build()] and returns aRocket<Build>
. - [
Rocket::ignite()
][Rocket::ignite()] transitions to theIgnite
phase. This is run automatically on launch as needed. - Ignition finalizes configuration, runs
ignite
fairings, and verifies sentinels. - [
Rocket::launch()
][Rocket::launch()] transitions into theOrbit
phase and starts the server. - Methods like [
Request::rocket()
][Request::rocket()] that refer to a live Rocket instance return an&Rocket<Orbit>
.
- APIs operate on
-
Fairings have been reorganized and restructured for
async
:- Replaced
attach
fairings withignite
fairings. Unlikeattach
fairings, which ran immediately at the time of attachment,ignite
fairings are run when transitioning into theIgnite
phase. - Replaced
launch
fairings withliftoff
fairings.liftoff
fairings are always run, even in local clients, after the server begins listening and the concrete port is known.
- Replaced
- Introduced a new configuration system based on Figment:
- The concept of "environments" is replaced with "profiles".
-
ROCKET_ENV
is superseded byROCKET_PROFILE
. -
ROCKET_LOG
is superseded byROCKET_LOG_LEVEL
. - Profile names can now be arbitrarily chosen. The
dev
,stage
, andprod
profiles carry no special meaning. - The
debug
andrelease
profiles are the default profiles for the debug and release compilation profiles. - A new specially recognized
default
profile specifies defaults for all profiles. - The
global
profile has highest precedence, followed by the selected profile, followed bydefault
. - Added support for limits specified in SI units: "1 MiB".
- Renamed
LoggingLevel
to [LogLevel
][LogLevel]. - Inlined error variants into the [
Error
][Error] structure. - Changed the type of
workers
tousize
fromu16
. - Changed accepted values for
keep_alive
: it is disabled with0
, notfalse
oroff
. - Disabled the
secrets
feature (for private cookies) by default. - Removed APIs related to "extras". Typed values can be extracted from the configured
Figment
. - Removed
ConfigBuilder
: all fields of [Config
][Config] are public with constructors for each field type.
- Many functions, traits, and trait bounds have been modified for
async
:- [
FromRequest
][FromRequest], [Fairing
][Fairing], [catcher::Handler
][catcher::Handler], [route::Handler
][route::Handler], and [FromData
][FromData] use#[async_trait]
. - [
NamedFile::open
][NamedFile::open] is now anasync
function. - Added [
Request::local_cache_async()
][Request::local_cache_async()] for use in async request guards. - Unsized
Response
bodies must be [AsyncRead
][AsyncRead] instead ofRead
. - Automatically sized
Response
bodies must be [AsyncSeek
][AsyncSeek] instead ofSeek
. - The
local
module is split into two: [rocket::local::asynchronous
][rocket::local::asynchronous] and [rocket::local::blocking
][rocket::local::blocking].
- [
- Functionality and features requiring Rust nightly were removed:
- Removed the
Try
implementation on [Outcome
][Outcome] which allowed using?
withOutcome
s. The recommended replacement is the [rocket::outcome::try_outcome!
][rocket::outcome::try_outcome!] macro or the various combinator functions onOutcome
. - [
Result<T, E>
implementsResponder
][Result<T, E> implements Responder] only when bothT
andE
implementResponder
. The new [Debug
][Debug] wrapping responder replacesResult<T: Responder, E: Debug>
. - APIs which used the
!
type to now use [std::convert::Infallible
][std::convert::Infallible].
- Removed the
- [
IntoOutcome
][IntoOutcome] was overhauled to supplant methods now removed inOutcome
.-
IntoOutcome::into_outcome()
is nowor_error()
. -
IntoOutcome
is implemented for allOutcome
type aliases. -
Outcome::forward()
requires specifying a status code. -
Outcome::from()
andOutcome::from_or_forward()
were removed.
-
- [
Rocket::register()
][Rocket::register()] now takes a base path to scope catchers under as its first argument. -
ErrorKind::Collision
has been renamed to [ErrorKind::Collisions
][ErrorKind::Collisions]. - TLS config values are only available when the
tls
feature is enabled. - [
MediaType::with_params()
][MediaType::with_params()] and [ContentType::with_params()
][ContentType::with_params()] are now builder methods. - Content-Type [
content
][content] responder type names are now prefixed withRaw
. - The
content::Plain
responder is now calledcontent::RawText
. - The
content::Custom<T>
responder was removed in favor of [(ContentType, T)
][(ContentType, T)]. - Removed
CookieJar::get_private_pending()
in favor of [CookieJar::get_pending()
][CookieJar::get_pending()]. - The [
local_cache!
][local_cache!] macro accepts fewer types. Use [local_cache_once!
][local_cache_once!] as appropriate. - [
Rocket::launch()
][Rocket::launch()] allowsRocket
recovery by returning the instance after shutdown. -
ErrorKind::Runtime
was removed; [ErrorKind::Shutdown
][ErrorKind::Shutdown] was added. -
Outcome::Failure
was renamed to [Outcome::Error
][Outcome::Error].
Routing and URIs
- In
#[route(GET, path = "...")]
,path
is nowuri
:#[route(GET, uri = "...")]
. - Multi-segment paths (
/<p..>
) now match zero or more segments. - Codegen improvements preclude identically named routes and modules in the same namespace.
- A route URI like (
/<a>/<p..>
) now collides with (/<a>
), requires arank
to resolve. - All catcher related types and traits moved to [
rocket::catcher
][rocket::catcher]. - All route related types and traits moved to [
rocket::route
][rocket::route]. - URI formatting types and traits moved to [
rocket::http::uri::fmt
][rocket::http::uri::fmt]. -
T
no longer converts toOption<T>
orResult<T, _>
for [uri!
][uri!] query parameters. - For optional query parameters, [
uri!
][uri!] requires using a wrapped value or_
. -
&RawStr
no longer implementsFromParam
: use&str
instead. - Percent-decoding is performed before calling
FromParam
implementations. -
RawStr::url_decode()
andRawStr::url_decode_lossy()
allocate as necessary, returnCow
. -
RawStr::from_str()
was replaced withRawStr::new()
. -
Origin::segments()
was replaced withOrigin.path().segments()
. -
Origin::path()
andOrigin::query()
return&RawStr
instead of&str
. - The type of
Route::name
is nowOption<Cow<'static, str>>
. -
Route::set_uri
was replaced with [Route::map_base()
][Route::map_base()]. - The
Route::uri
field is now of type [RouteUri
][RouteUri]. -
Route::base
was removed in favor ofRoute.uri().base()
. - [Route
Forward
outcomes][Route Forward outcomes] are now associated with aStatus
. - The status codes used when built-in guards forward were changed:
- Route parameter
FromParam
errors now forward as 422. - Query parameter errors now forward as 422.
- Incorrect form content-type errors forwards as 413.
-
&Host
,&Accept
,&ContentType
,IpAddr
, andSocketAddr
all forward with a 500.
- Route parameter
Data and Forms
-
Data
now has a lifetime generic:Data<'r>
. - [
Data::open()
][Data::open()] indelibly requires a data limit. - Removed
FromDataSimple
. Use [FromData
][FromData] and [local_cache!
][local_cache!] or [local_cache_once!
][local_cache_once!]. - All [
DataStream
][DataStream] APIs require limits and return [Capped<T>
][Capped] types. - Form types and traits were moved from
rocket::request
to [rocket::form
][rocket::form]. - Removed
FromQuery
. Dynamic query parameters (#[get("/?<param>")]
) use [FromForm
][FromForm] instead. - Replaced
FromFormValue
with [FromFormField
][FromFormField]. AllT: FromFormField
implementFromForm
. - Form field values are percent-decoded before calling [
FromFormField
][FromFormField] implementations. - Renamed the
#[form(field = ...)]
attribute to#[field(name = ...)]
. -
Custom form errors must now specify an associated
Status
.
Request Guards
- Renamed
Cookies
to [CookieJar
][CookieJar]. Its methods take&self
. - Renamed
Flash.name
toFlash.kind
,Flash.msg
toFlash.message
. - Replaced
Request::get_param()
withRequest::param()
. - Replaced
Request::get_segments()
toRequest::segments()
. - Replaced
Request::get_query_value()
withRequest::query_value()
. - Replaced
Segments::into_path_buf()
withSegments::to_path_buf()
. - Replaced
Segments
andQuerySegments
with [Segments<Path>
andSegments<Query>
][Segments and Segments]. - [
Flash
][Flash] constructors now takeInto<String>
instead ofAsRef<str>
. - The
State<'_, T>
request guard is now&State<T>
. - Removed a lifetime from [
FromRequest
][FromRequest]:FromRequest<'r>
. - Removed a lifetime from [
FlashMessage
][FlashMessage]:FlashMessage<'_>
. - Removed all
State
reexports except [rocket::State
][rocket::State].
Responders
- Moved
NamedFile
torocket::fs::NamedFile
- Replaced
Content
withcontent::Custom
. -
Response::body
andResponse::body_mut
are now infallible methods. - Renamed
ResponseBuilder
toBuilder
. - Removed direct
Response
body reading methods. Use methods onr.body_mut()
instead. - Removed inaccurate "chunked body" types and variants.
- Removed
Responder
impl
forResponse
. Prefer custom responders with#[derive(Responder)]
. - Removed the unused reason phrase from
Status
. - The types of responders in [
response::status
][response::status] were unified to all be of the formStatus<R>(R)
.
General Improvements
In addition to new features and changes, Rocket saw the following improvements:
General
- Added support for raw identifiers in the
FromForm
derive,#[route]
macros, anduri!
. - Added support for uncased derived form fields:
#[field(name = uncased(...))]
. - Added support for default form field values:
#[field(default = expr())]
. - Added support for multiple
#[field]
attributes on struct fields. - Added support for base16-encoded (a.k.a. hex-encoded) secret keys.
- Added [
Config::ident
][Config::ident] for configuring or removing the globalServer
header. - Added [
Rocket::figment()
][Rocket::figment()] and [Rocket::catchers()
][Rocket::catchers()]. - Added [
LocalRequest::json()
][LocalRequest::json()] and [LocalResponse::json()
][LocalResponse::json()]. - Added [
LocalRequest::msgpack()
][LocalRequest::msgpack()] and [LocalResponse::msgpack()
][LocalResponse::msgpack()]. - Added support for
use m::route; routes![route]
instead of needingroutes![m::route]
. - Added support for hierarchical data limits: a limit of
a/b/c
falls back toa/b
thena
. - Added [
LocalRequest::inner_mut()
][LocalRequest::inner_mut()].LocalRequest
implementsDerefMut
toRequest
. - Added support for ECDSA and EdDSA TLS keys.
- Added associated constants in
Config
for all config parameter names. - Added
ErrorKind::Config
to represent errors in configuration at runtime. - Added
rocket::fairing::Result
type alias, returned byFairing::on_ignite()
. - All guard failures are logged at runtime.
-
Rocket::mount()
now accepts a base value of any type that implementsTryInto<Origin<'_>>
. - The default error catcher's HTML has been compacted.
- The default error catcher returns JSON if requested by the client.
- Panics in routes or catchers are caught and forwarded to
500
error catcher. - A detailed warning is emitted if a route or catcher panics.
- Emoji characters are no longer output on Windows.
- Fixed [
Error
][Error] to not panic if a panic is already in progress. - Introduced [
Reference
][Reference] and [Asterisk
][Asterisk] URI types. - Added support to [
UriDisplayQuery
][UriDisplayQuery] for C-like enums. - The [
UriDisplayQuery
][UriDisplayQuery] derive now recognizes the#[field]
attribute for field renaming. -
Client
method builders acceptTryInto<Origin>
allowing auri!()
to be used directly. - [
Rocket
][Rocket] is now#[must_use]
. - Support for HTTP/2 can be disabled by disabling the default
http2
crate feature. - Added [
rocket::execute()
][rocket::execute()] for executing Rocket'slaunch()
future. - Added the [
context!
][context!] macro to [rocket_dyn_templates
][rocket_dyn_templates] for ad-hoc template contexts. - The
time
crate is re-exported from the crate root. - The
FromForm
,Responder
, andUriDisplay
derives now fully support generics. - Added helper functions to
serde
submodules. - The [
Shield
][Shield] HSTS preload header now includesincludeSubdomains
. - Logging ignores
write!
errors ifstdout
disappears, preventing panics. - Added [
Client::terminate()
][Client::terminate()] to run graceful shutdown in testing. - Shutdown now terminates the
async
runtime, never the process. - Added a [
local_cache_once!
][local_cache_once!] macro for request-local storage. - Final launch messages are now always logged, irrespective of profile.
- Only functions that return
Rocket<Build>
are now#[must_use]
, not allRocket<P>
. - Fixed mismatched form field names in errors under certain conditions in [
FromForm
][FromForm] derive. - The [
FromForm
][FromForm] derive now collects all errors that occur. - Data pools are now gracefully shutdown in [
rocket_sync_db_pools
][rocket_sync_db_pools]. - Added [
Metadata::render()
][Metadata::render()] in [rocket_dyn_templates
][rocket_dyn_templates] for direct template rendering. - Rocket salvages more information from malformed requests for error catchers.
- The
cookie
secure
feature is now properly conditionally enabled. - Data before encapsulation boundaries in TLS keys is allowed and ignored.
- Support for TLS keys in SEC1 format was added.
- Rocket now warns when a known secret key is configured.
- A panic that could occur on shutdown in
rocket_sync_db_pools
was fixed. - Added a [
max_blocking
][max_blocking] configuration parameter to control number of blocking threads. - Added an [
ip_header
][ip_header] "real IP" header configuration parameter. - A [
pool()
][pool()] method is emitted by [rocket_sync_db_pools
][rocket_sync_db_pools] for code-generated pools. - Data guards are now eligible sentinels.
- Raw binary form field data can be retrieved using the
&[u8]
form guard. - Added [
TempFile::open()
][TempFile::open()] to streamTempFile
data. - mTLS certificates can be set on local requests with [
LocalRequest::identity()
][LocalRequest::identity()]. - Added [
Error::pretty_print()
][Error::pretty_print()] for pretty-printing errors like Rocket. - Warnings are logged when data limits are reached.
- A warning is emitted when
String
is used as a route parameter. - Configuration provenance information is logged under the
debug
log level. - Logging of
Outcome
s now includes the relevant status code. -
Span::mixed_site()
is used in codegen to reduce errantclippy
warnings.
HTTP
- Added support for HTTP/2, enabled by default via the
http2
crate feature. - Added a
const
constructor forMediaType
. - Introduced [
RawStrBuf
][RawStrBuf], an ownedRawStr
. - Added many new "pattern" methods to [
RawStr
][RawStr]. - Added [
RawStr::percent_encode()
][RawStr::percent_encode()] and [RawStr::strip()
][RawStr::strip()]. - Added support for unencoded query characters in URIs that are frequently sent by browsers.
- Introduced [
Host
][Host] and [&Host
][&Host] request guards. - Added [
RawStr::percent_encode_bytes()
][RawStr::percent_encode_bytes()]. -
NODELAY
is now enabled on all connections by default. - The TLS implementation handles handshakes off the main task, improving DoS resistance.
Known Media Types
- Added AVIF:
image/avif
. - Added
EventStream
:text/event-stream
. - Added
Markdown
:text/markdown
. - Added
MP3
:audio/mpeg
. - Added
CBZ
:application/vnd.comicbook+zip
, extension.cbz
. - Added
CBR
:application/vnd.comicbook-rar
, extension.cbr
. - Added
RAR
:application/vnd.rar
, extension.rar
. - Added
EPUB
:application/epub+zip
, extension.epub
. - Added
OPF
:application/oebps-package+xml
, extension.opf
. - Added
XHTML
:application/xhtml+xml
, extension.xhtml
. - Added
Text
as an alias for thePlain
media type. - Added
Bytes
as an alias for theBinary
media type. - Added
.mjs
as known JavaScript extension. - Added '.exe', '.iso', '.dmg' as known extensions.
Request
- Added support for all UTF-8 characters in route paths.
- Added support for percent-encoded
:
in socket or IP address values in [FromFormValue
]. - Added [
Request::rocket()
][Request::rocket()] to access the activeRocket
instance. -
Request::uri()
now returns an&Origin<'r>
instead of&Origin<'_>
. -
Request::accept()
,Request::content_type()
reflect changes toAccept
,Content-Type
. -
Json<T>
,MsgPack<T>
acceptT: Deserialize
, not onlyT: DeserializeOwned
. - Diesel SQLite connections in
rocket_sync_db_pools
use better defaults. - The default number of workers for synchronous database pools is now
workers * 4
. - Added [
Request::host()
][Request::host()] to retrieve the client-requested host.
Response
- Added [
Template::try_custom()
][Template::try_custom()] for fallible template engine customization. - Manually registered templates can now be rendered with
Template::render()
. - Added support for the
X-DNS-Prefetch-Control
header toShield
. - Added support for manually-set
expires
values for private cookies. - Added support for type generics and custom generic bounds to
#[derive(Responder)]
. - The
Server
header is only set if one isn't already set. - Accurate
Content-Length
headers are sent even for partially readBody
s. - [
Redirect
][Redirect] now accepts aTryFrom<Reference>
, allowing fragment parts.
Trait Implementations
- Implemented
Clone
forState
. - Implemented
Copy
andClone
forfairing::Info
. - Implemented
Debug
forRocket
andClient
. - Implemented
Default
forStatus
(returnsStatus::Ok
). - Implemented
PartialEq
,Eq
,Hash
,PartialOrd
, andOrd
forStatus
. - Implemented
Eq
,Hash
, andPartialEq<&str>
forOrigin
. - Implemented
PartialEq<Cow<'_, RawStr>>>
forRawStr
. - Implemented
std::error::Error
forError
. - Implemented
Deref
andDerefMut
forLocalRequest
(toRequest
). - Implemented
DerefMut
forForm
,LenientForm
. - Implemented
From<T>
forJson<T>
,MsgPack<T>
. - Implemented
TryFrom<String>
andTryFrom<&str>
forOrigin
. - Implemented
TryFrom<Uri>
for each of the specific URI variants. - Implemented
FromRequest
for&Config
. - Implemented
FromRequest
forIpAddr
. - Implemented
FromParam
forPathBuf
- Implemented
FromParam
,FromData
, andFromForm
for&str
. - Implemented
FromForm
forJson<T>
,MsgPack<T>
. - Implemented
FromFormField
forCow
andCapped<Cow>>
- Implemented
Responder
fortokio::fs::File
. - Implemented
Responder
for(ContentType, R) where R: Responder
. - Implemented
Responder
for(Status, R) where R: Responder
which overridesR
's status. - Implemented
Responder
forstd::io::Error
(behaves asDebug<std::io::Error>
). - Implemented
Responder
forEither<T, E>
, equivalently toResult<T, E>
. - Implemented
Serialize
forFlash
. - Implemented
Serialize
,Deserialize
,UriDisplay
andFromUriParam
foruuid::Uuid
- Implemented
Serialize
,Deserialize
forRawStr
. - Implemented
Serialize
,Deserialize
for all URI types. - Implemented
Responder
forArc<T>
,Box<T>
whereT: Responder
. - Implemented
Serialize
andDeserialize
for [Method
][Method]. - Implemented
Eq
for [MediaType
][MediaType] and [ContentType
][ContentType]. - Implemented
Responder
forBox<T: Responder + Sized>
. - Implemented
FromForm
forArc<T>
. - Implemented
Fairing
forArc<dyn Fairing>
. - Implemented
Serialize
andDeserialize
forStatus
.
Dependency Changes
-
serde
was introduced (1.0
). -
futures
was introduced (0.3
). -
binascii
was introduced (0.1
). -
ref-cast
was introduced (1.0
). -
atomic
was introduced (0.5
). -
parking_lot
was introduced (0.11
). -
ubtye
was introduced (0.10
). -
figment
was introduced (0.10
). -
rand
was introduced (0.8
). -
either
was introduced (1.0
). -
pin-project-lite
was introduced (0.2
). -
indexmap
was introduced (2.0
). -
tempfile
was introduced (3.0
). -
async-trait
was introduced (0.1
). -
async-stream
was introduced (0.3
). -
multer
was introduced (2.0
). -
tokio
was introduced (1.6.1
). -
tokio-util
was introduced (0.6
). -
tokio-stream
was introduced (0.1.6
). -
bytes
was introduced (1.0
). -
normpath
was introduced (1
). -
state
was updated to0.6
. -
rmp-serde
was updated to0.15
. -
uuid
was updated to0.8
. -
tera
was updated to1.10
. -
postgres
was updated to0.19
. -
rusqlite
was updated to0.25
. -
r2d2_sqlite
was updated to0.18
. -
time
was updated to0.3
. -
handlebars
was updated to4.0
. -
memcache
was updated to0.16
. -
rustls
was updated to0.21
. -
tokio-rustls
was updated to0.24
. -
syn
was updated to2
. -
diesel
was updated to2.0
. -
sqlx
was updated to0.7
. -
notify
was updated to6
. -
criterion
was updated to0.4
. -
cookie
was updated to0.18
. -
yansi
was updated to1.0
. -
atty
was removed.
Infrastructure
The following changes were made to the project's infrastructure:
- Rocket now uses the 2021 edition of Rust.
- Added a v0.4 to v0.5 migration guide and FAQ to Rocket's website.
- Added visible
use
statements to examples in the guide. - Split examples into a separate workspace for easier testing.
- Updated documentation for all changes.
- Fixed many typos, errors, and broken links throughout documentation and examples.
- Improved the general robustness of macros, and the quality and frequency of error messages.
- Benchmarks now use
criterion
and datasets extracted from real-world projects. - Fixed the SPDX license expressions in
Cargo.toml
files. - Added support to
test.sh
for a+
flag (e.g.+stable
) to pass tocargo
. - Added support to
test.sh
for extra flags to be passed on tocargo
. - UI tests are now allowed to fail by the CI to avoid false negatives.
- The GitHub CI workflow was updated to use maintained actions.
- The CI now frees disk space before proceeding to avoid out-of-disk errors.
- All workspaces now use
resolver = 2
.
v0.5.0-rc.4
: Rocket v0.5.0-rc.4
See the CHANGELOG, news article, migration guide, and FAQ for more information.
Configuration
-
If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot.