New version: 0.4.0.

This commit is contained in:
Sergio Benitez 2018-12-06 09:19:11 -08:00
parent 7fb6ba9be5
commit a4dcb0cf4c
20 changed files with 114 additions and 167 deletions

View File

@ -1,84 +1,4 @@
# Version 0.4.0-rc.2 (Nov 30, 2018)
## New Features
This release includes the following new features:
* Introduced the [`SpaceHelmet`] security and privacy headers fairing.
* Private cookies are gated behind a `private-cookies` feature.
* Applications can launch without a working directory.
* `Option` and `Result` types can be used in `uri!` expressions.
* Added [`State::from()`] for constructing `State` values.
[`SpaceHelmet`]: https://api.rocket.rs/v0.4/rocket_contrib/helmet/index.html
[`State::from()`]: https://api.rocket.rs/v0.4/rocket/struct.State.html#method.from
## Breaking Changes
This release includes several breaking changes. These changes are listed below
along with a short note about how to handle the breaking change in existing
applications when applicable.
* **Minimum required nightly is `2018-11-23`.**
Update to `nightly-2018-11-23` or later before updating to `rc.2`.
* **[`UriDisplay`] is parameterized by a [`UriPart`].**
When implementing `UriDisplay`, decide whether the value is to be displayed
in the path part, query part, or both of a URI. Implement `UriDisplay<Path>`
and/or `UriDisplay<Query>` appropriately.
* **[`UriDisplay`] derive was removed in favor of [`UriDisplayQuery`] and
[`UriDisplayPath`].**
To mimic the previous behavior, derive `UriDisplayQuery`.
* **[`Config::root()`] returns an `Option<&Path>` instead of an `&Path`.**
For the previous behavior, use `config.root().unwrap()`.
* **[`Config`] constructors return a `Config` instead of a `Result<Config>`.**
* **`ConfigError::BadCWD`, `Config.config_path` were removed.**
[`UriDisplay`]: https://api.rocket.rs/v0.4/rocket/http/uri/trait.UriDisplay.html
[`UriPart`]: https://api.rocket.rs/v0.4/rocket/http/uri/trait.UriPart.html
[`UriDisplayPath`]: https://api.rocket.rs/v0.4/rocket_codegen/derive.UriDisplayPath.html
[`UriDisplayQuery`]: https://api.rocket.rs/v0.4/rocket_codegen/derive.UriDisplayQuery.html
[`Config`]: https://api.rocket.rs/v0.4/rocket/struct.Config.html
[`Config::root()`]: https://api.rocket.rs/v0.4/rocket/struct.Config.html#method.root
## Fixes
Several issues in the first release candidate were addressed in this release:
* Characters in URIs are properly percent-encoded ([#808]).
* Generated variables are properly spanned and prefixed ([#817], [#839]).
* [`Client`] regained `Sync` ([#814]).
[#808]: https://github.com/SergioBenitez/Rocket/issues/808
[#817]: https://github.com/SergioBenitez/Rocket/issues/817
[#839]: https://github.com/SergioBenitez/Rocket/issues/839
[#814]: https://github.com/SergioBenitez/Rocket/issues/814
## General Improvements
In addition to new features, Rocket saw the following improvements:
* Console coloring uses default terminal colors instead of white.
* Console coloring is consistent across all messages.
* `i128` and `u128` now implement [`FromParam`], [`FromFormValue`].
* [`Form`] and [`LenientForm`] can be publicly constructed.
* Added ZIP (`application/zip`) as a known media type.
* The `base64` dependency was updated to `0.10`.
* Private, hidden `http` types are no longer visible in the rustdocs.
[`FromParam`]: https://api.rocket.rs/v0.4/rocket/request/trait.FromParam.html
[`FromFormValue`]: https://api.rocket.rs/v0.4/rocket/request/trait.FromFormValue.html
[`Data`]: https://api.rocket.rs/v0.4/rocket/struct.Data.html
# Version 0.4.0-rc.1 (Oct 31, 2018)
# Version 0.4.0 (Dec 06, 2018)
## New Features
@ -92,6 +12,8 @@ This release includes the following new features:
* Introduced custom stateful handlers via [`Handler`].
* Introduced [transforming] data guards via [`FromData::transform()`].
* Introduced revamped [query string handling].
* Introduced the [`SpaceHelmet`] security and privacy headers fairing.
* Private cookies are gated behind a `private-cookies` default feature.
* Added [derive for `FromFormValue`].
* Added [derive for `Responder`].
* Added [`Template::custom()`] for customizing templating engines including
@ -116,7 +38,11 @@ This release includes the following new features:
* [Default rankings] range from -6 to -1, differentiating on static query
strings.
* Added [`Request::get_query_value()`] for retrieving a query value by key.
* Applications can launch without a working directory.
* Added [`State::from()`] for constructing `State` values.
[`SpaceHelmet`]: https://api.rocket.rs/v0.4/rocket_contrib/helmet/index.html
[`State::from()`]: https://api.rocket.rs/v0.4/rocket/struct.State.html#method.from
[Typed URIs]: https://rocket.rs/v0.4/guide/responses/#typed-uris
[ORM agnostic database support]: https://rocket.rs/v0.4/guide/state/#databases
[`Template::custom()`]: https://api.rocket.rs/v0.4/rocket_contrib/templates/struct.Template.html#method.custom
@ -180,19 +106,69 @@ This release includes many breaking changes. These changes are listed below
along with a short note about how to handle the breaking change in existing
applications when applicable.
* **[`LaunchErrorKind::Collision`] contains a vector of the colliding routes.**
* **Route and catcher attributes respect function privacy.**
Destruct using `LaunchErrorKind::Collision(..)` to ignore the vector.
To mount a route or register a catcher outside of the module it is declared,
ensure that the handler function is marked `pub` or `crate`.
* **Query handling syntax has been completely revamped.**
A query parameter of `<param>` is now `<param..>`. Consider whether your
application benefits from the revamped [query string handling].
* **The `#[error]` attribute and `errors!` macro were removed.**
Use `#[catch]` and `catchers!` instead.
* **`Rocket::catch()` was renamed to [`Rocket::register()`].**
Change calls of the form `.catch(errors![..])` to
`.register(catchers![..])`.
* **The `#[catch]` attribute only accepts functions with 0 or 1 argument.**
Ensure the argument to the catcher, if any, is of type `&Request`.
* **[`json!`] returns a [`JsonValue`], no longer needs wrapping.**
Change instances of `Json(json!(..))` to `json!` and change the
corresponding type to `JsonValue`.
* **All environments default to port 8000.**
Manually configure a port of `80` for the `stage` and `production`
environments for the previous behavior.
* **Release builds default to the production environment.**
Manually set the environment to `debug` with `ROCKET_ENV=debug` for the
previous behavior.
* **[`Form`] and [`LenientForm`] lost a lifetime parameter, `get()` method.**
Change a type of `Form<'a, T<'a>>` to `Form<T>` or `Form<T<'a>>`. `Form<T>`
and `LenientForm<T>` now implement `Deref<Target = T>`, allowing for calls
to `.get()` to be removed.
* **[`ring`] was updated to 0.13.**
Ensure all transitive dependencies to `ring` refer to version `0.13`.
* **`Uri` was largely replaced by [`Origin`].**
In general, replace the type `Uri` with `Origin`. The `base` and `uri`
fields of [`Route`] are now of type [`Origin`]. The `&Uri` guard is now
`&Origin`. [`Request::uri()`] now returns an [`Origin`].
* **All items in [`rocket_contrib`] are namespaced behind modules.**
* `Json` is now `json::Json`
* `MsgPack` is now `msgpack::MsgPack`
* `MsgPackError` is now `msgpack::Error`
* `Template` is now `templates::Template`
* `UUID` is now `uuid::Uuid`
* `Value` is replaced by `json::JsonValue`
* **TLS certificates require the `subjectAltName` extension.**
Ensure that your TLS certificates contain the `subjectAltName` extension
@ -215,16 +191,6 @@ applications when applicable.
Use [`Request::real_ip()`] or [`Request::client_ip()`] to retrieve the IP
address from the "X-Real-IP" header if it is present.
* **Release builds default to the production environment.**
Manually set the environment to `debug` with `ROCKET_ENV=debug` for the
previous behavior.
* **All environments default to port 8000.**
Manually configure a port of `80` for the `stage` and `production`
environments for the previous behavior.
* **[`Bind`] variant was added to [`LaunchErrorKind`].**
Ensure matches on `LaunchErrorKind` include or ignore the `Bind` variant.
@ -238,29 +204,10 @@ applications when applicable.
Use `Uuid` instead of `UUID`.
* **The `#[error]` attribute and `errors!` macro were removed.**
Use `#[catch]` and `catchers!` instead.
* **`Rocket::catch()` was renamed to [`Rocket::register()`].**
Change calls of the form `.catch(errors![..])` to
`.register(catchers![..])`.
* **The `#[catch]` attribute only accepts functions with 0 or 1 argument.**
Ensure the argument to the catcher, if any, is of type `&Request`.
* **`LocalRequest::cloned_dispatch()` was removed.**
Chain calls to `.clone().dispatch()` for the previous behavior.
* **`Uri` was largely replaced by [`Origin`].**
In general, replace the type `Uri` with `Origin`. The `base` and `uri`
fields of [`Route`] are now of type [`Origin`]. The `&Uri` guard is now
`&Origin`. [`Request::uri()`] now returns an [`Origin`].
* **[`Redirect`] constructors take a generic type of `T:
TryInto<Uri<'static>>`.**
@ -277,11 +224,6 @@ applications when applicable.
Ensure matches on `ConfigError` include or ignore the `Missing` variant.
* **Route and catcher attributes respect function privacy.**
To mount a route or register a catcher outside of the module it is declared,
ensure that the handler function is marked `pub` or `crate`.
* **The [`FromData`] impl for [`Json`] now returns an error of type
[`JsonError`].**
@ -293,29 +235,13 @@ applications when applicable.
Change _implementations_, not uses, of `FromData` to `FromDataSimple`.
Consider whether your implementation could benefit from [transformations].
* **[`Form`] and [`LenientForm`] lost a lifetime parameter, `get()` method.**
Change a type of `Form<'a, T<'a>>` to `Form<T>` or `Form<T<'a>>`. `Form<T>`
and `LenientForm<T>` now implement `Deref<Target = T>`, allowing for calls
to `.get()` to be removed.
* **Query handling syntax has been completely revamped.**
A query parameter of `<param>` is now `<param..>`. Consider whether your
application benefits from the revamped [query string handling].
* **[`FormItems`] iterates over values of type [`FormItem`].**
Map using `.map(|item| item.key_value())` for the previous behavior.
* **All items in [`rocket_contrib`] are namespaced behind modules.**
* **[`LaunchErrorKind::Collision`] contains a vector of the colliding routes.**
* `Json` is now `json::Json`
* `MsgPack` is now `msgpack::MsgPack`
* `MsgPackError` is now `msgpack::Error`
* `Template` is now `templates::Template`
* `UUID` is now `uuid::Uuid`
* `Value` is replaced by `json::JsonValue`
Destruct using `LaunchErrorKind::Collision(..)` to ignore the vector.
* **[`Request::get_param()`] and [`Request::get_segments()`] are indexed by
_segment_, not dynamic parameter.**
@ -339,8 +265,18 @@ applications when applicable.
`status::NoContent` with `Status::NoContent`. Replace `status::Reset` with
`Status::ResetContent`.
* **[`Config::root()`] returns an `Option<&Path>` instead of an `&Path`.**
For the previous behavior, use `config.root().unwrap()`.
* **[`Status::new()`] is no longer `const`.**
Construct a `Status` directly.
* **[`Config`] constructors return a `Config` instead of a `Result<Config>`.**
* **`ConfigError::BadCWD`, `Config.config_path` were removed.**
* **[`Json`] no longer has a default value for its type parameter.**
* **Using `data` on a non-payload method route is a warning instead of error.**
@ -389,6 +325,8 @@ applications when applicable.
[`rocket_contrib`]: https://api.rocket.rs/v0.4/rocket_contrib/index.html
[`MsgPack`]: https://api.rocket.rs/v0.4/rocket_contrib/msgpack/struct.MsgPack.html
[`Status::new()`]: https://api.rocket.rs/v0.4/rocket/http/struct.Status.html#method.new
[`Config`]: https://api.rocket.rs/v0.4/rocket/struct.Config.html
[`Config::root()`]: https://api.rocket.rs/v0.4/rocket/struct.Config.html#method.root
## General Improvements
@ -401,6 +339,8 @@ In addition to new features, Rocket saw the following improvements:
* Private cookies are set to `HttpOnly` and are given an expiration date of 1
week by default.
* A [Tera templates example] was added.
* All macros, derives, and attributes are individually documented in
[`rocket_codegen`].
* Invalid client requests receive a response of `400` instead of `500`.
* Response bodies are reliably stripped on `HEAD` requests.
* Added a default catcher for `504: Gateway Timeout`.
@ -423,7 +363,8 @@ In addition to new features, Rocket saw the following improvements:
* Added FLAC (`audio/flac`), Icon (`image/x-icon`), WEBA (`audio/webm`), TIFF
(`image/tiff`), AAC (`audio/aac`), Calendar (`text/calendar`), MPEG
(`video/mpeg`), TAR (`application/x-tar`), GZIP (`application/gzip`), MOV
(`video/quicktime`), MP4 (`video/mp4`) as known media types.
(`video/quicktime`), MP4 (`video/mp4`), ZIP (`application/zip`) as known
media types.
* Added `.weba` (`WEBA`), `.ogv` (`OGG`), `.mp4` (`MP4`), `.mpeg4` (`MP4`),
`.aac` (`AAC`), `.ics` (`Calendar`), `.bin` (`Binary`), `.mpg` (`MPEG`),
`.mpeg` (`MPEG`), `.tar` (`TAR`), `.gz` (`GZIP`), `.tif` (`TIFF`), `.tiff`
@ -433,8 +374,11 @@ In addition to new features, Rocket saw the following improvements:
* Generated code now logs through logging infrastructures as opposed to using
`println!`.
* Routing has been optimized by caching routing metadata.
* All macros, derives, and attributes are individually documented in
[`rocket_codegen`].
* [`Form`] and [`LenientForm`] can be publicly constructed.
* Console coloring uses default terminal colors instead of white.
* Console coloring is consistent across all messages.
* `i128` and `u128` now implement [`FromParam`], [`FromFormValue`].
* The `base64` dependency was updated to `0.10`.
* The `log` dependency was updated to `0.4`.
* The `handlebars` dependency was updated to `1.0`.
* The `tera` dependency was updated to `0.11`.
@ -451,6 +395,9 @@ In addition to new features, Rocket saw the following improvements:
[`Config::root_relative()`]: https://api.rocket.rs/v0.4/rocket/struct.Config.html#method.root_relative
[`Config::tls_enabled()`]: https://api.rocket.rs/v0.4/rocket/struct.Config.html#method.tls_enabled
[`rocket_codegen`]: https://api.rocket.rs/v0.4/rocket_codegen/index.html
[`FromParam`]: https://api.rocket.rs/v0.4/rocket/request/trait.FromParam.html
[`FromFormValue`]: https://api.rocket.rs/v0.4/rocket/request/trait.FromFormValue.html
[`Data`]: https://api.rocket.rs/v0.4/rocket/struct.Data.html
## Infrastructure

View File

@ -1,6 +1,6 @@
[package]
name = "rocket_contrib_codegen"
version = "0.4.0-rc.2"
version = "0.4.0"
authors = ["Sergio Benitez <sb@sergio.bz>"]
description = "Procedural macros for the Rocket contrib libraries."
documentation = "https://api.rocket.rs/v0.4/rocket_contrib/"

View File

@ -1,6 +1,6 @@
[package]
name = "rocket_contrib"
version = "0.4.0-rc.2"
version = "0.4.0"
authors = ["Sergio Benitez <sb@sergio.bz>"]
description = "Community contributed libraries for the Rocket web framework."
documentation = "https://api.rocket.rs/v0.4/rocket_contrib/"
@ -37,8 +37,8 @@ mongodb_pool = ["databases", "mongodb", "r2d2-mongodb"]
[dependencies]
# Global dependencies.
rocket_contrib_codegen = { version = "0.4.0-rc.2", path = "../codegen", optional = true }
rocket = { version = "0.4.0-rc.2", path = "../../core/lib/" }
rocket_contrib_codegen = { version = "0.4.0", path = "../codegen", optional = true }
rocket = { version = "0.4.0", path = "../../core/lib/" }
log = "0.4"
# Serialization and templating dependencies.

View File

@ -32,7 +32,7 @@
//!
//! ```toml
//! [dependencies.rocket_contrib]
//! version = "0.4.0-rc.2"
//! version = "0.4.0"
//! default-features = false
//! features = ["diesel_sqlite_pool"]
//! ```

View File

@ -33,7 +33,7 @@
//!
//! ```toml
//! [dependencies.rocket_contrib]
//! version = "0.4.0-rc.2"
//! version = "0.4.0"
//! default-features = false
//! features = ["json"]
//! ```

View File

@ -9,7 +9,7 @@
//!
//! ```toml
//! [dependencies.rocket_contrib]
//! version = 0.4.0-rc.2
//! version = 0.4.0
//! default-features = false
//! features = ["handlebars_templates", "tera_templates"]
//! ```

View File

@ -1,6 +1,6 @@
[package]
name = "rocket_codegen"
version = "0.4.0-rc.2"
version = "0.4.0"
authors = ["Sergio Benitez <sb@sergio.bz>"]
description = "Procedural macros for the Rocket web framework."
documentation = "https://api.rocket.rs/v0.4/rocket_codegen/"
@ -17,7 +17,7 @@ proc-macro = true
[dependencies]
indexmap = "1.0"
quote = "0.6.1"
rocket_http = { version = "0.4.0-rc.2", path = "../http/" }
rocket_http = { version = "0.4.0", path = "../http/" }
devise = "0.2"
[build-dependencies]
@ -25,5 +25,5 @@ yansi = "0.5"
version_check = "0.1.3"
[dev-dependencies]
rocket = { version = "0.4.0-rc.2", path = "../lib" }
rocket = { version = "0.4.0", path = "../lib" }
compiletest_rs = { version = "0.3", features = ["stable"] }

View File

@ -22,7 +22,7 @@
//!
//! ```toml
//! [dependencies]
//! rocket = "0.4.0-rc.2"
//! rocket = "0.4.0"
//! ```
//!
//! And to import all macros, attributes, and derives via `#[macro_use]` in the

View File

@ -1,6 +1,6 @@
[package]
name = "rocket_http"
version = "0.4.0-rc.2"
version = "0.4.0"
authors = ["Sergio Benitez <sb@sergio.bz>"]
description = """
Types, traits, and parsers for HTTP requests, responses, and headers.
@ -36,4 +36,4 @@ features = ["server"]
optional = true
[dev-dependencies]
rocket = { version = "0.4.0-rc.2", path = "../lib" }
rocket = { version = "0.4.0", path = "../lib" }

View File

@ -1,6 +1,6 @@
[package]
name = "rocket"
version = "0.4.0-rc.2"
version = "0.4.0"
authors = ["Sergio Benitez <sb@sergio.bz>"]
description = """
Web framework for nightly with a focus on ease-of-use, expressibility, and speed.
@ -23,8 +23,8 @@ tls = ["rocket_http/tls"]
private-cookies = ["rocket_http/private-cookies"]
[dependencies]
rocket_codegen = { version = "0.4.0-rc.2", path = "../codegen" }
rocket_http = { version = "0.4.0-rc.2", path = "../http" }
rocket_codegen = { version = "0.4.0", path = "../codegen" }
rocket_http = { version = "0.4.0", path = "../http" }
yansi = "0.5"
log = "0.4"
toml = "0.4.7"

View File

@ -47,7 +47,7 @@
//!
//! ```toml
//! [dependencies]
//! rocket = "0.4.0-rc.2"
//! rocket = "0.4.0"
//! ```
//!
//! Then, add the following to the top of your `main.rs` file:

View File

@ -24,7 +24,7 @@ function relative() {
}
# Full and major version of Rocket
ROCKET_VERSION="0.4.0-rc.2"
ROCKET_VERSION="0.4.0"
ROCKET_MAJOR_VERSION="0.4"
CURRENT_RELEASE=true

View File

@ -15,7 +15,7 @@ For instance, the following set of commands runs the `hello_world` example:
```sh
git clone https://github.com/SergioBenitez/Rocket
cd Rocket
git checkout v0.4.0-rc.2
git checkout v0.4.0
cd examples/hello_world
cargo run
```

View File

@ -43,8 +43,8 @@ Then add the usual Rocket dependencies to the `Cargo.toml` file:
```toml
[dependencies]
rocket = "0.4.0-rc.2"
rocket_codegen = "0.4.0-rc.2"
rocket = "0.4.0"
rocket_codegen = "0.4.0"
```
And finally, create a skeleton Rocket application to work off of in

View File

@ -50,7 +50,7 @@ Now, add Rocket as a dependency in your `Cargo.toml`:
```
[dependencies]
rocket = "0.4.0-rc.2"
rocket = "0.4.0"
```
Modify `src/main.rs` so that it contains the code for the Rocket `Hello, world!`

View File

@ -510,7 +510,7 @@ so that you depend on `rocket` as follows:
```toml
[dependencies]
rocket = { version = "0.4.0-rc.2", default-features = false }
rocket = { version = "0.4.0", default-features = false }
```
[`ring`]: https://github.com/briansmith/ring

View File

@ -218,7 +218,7 @@ databases, you'd write in `Cargo.toml`:
```toml
[dependencies.rocket_contrib]
version = "0.4.0-rc.2"
version = "0.4.0"
default-features = false
features = ["diesel_sqlite_pool"]
```

View File

@ -279,7 +279,7 @@ dependency in your `Cargo.toml` file:
```
[dependencies]
rocket = { version = "0.4.0-rc.2", features = ["tls"] }
rocket = { version = "0.4.0", features = ["tls"] }
```
TLS is configured through the `tls` configuration parameter. The value of `tls`

View File

@ -3,8 +3,8 @@
###############################################################################
[release]
version = "0.4.0-rc.2"
date = "Nov 30, 2018"
version = "0.4.0"
date = "Dec 06, 2018"
###############################################################################
# Top features: displayed in the header under the introductory text.

View File

@ -13,11 +13,11 @@ contributions for improved diagnostics and stability. As before, this is an
opportunity to discover issues with Rocket v0.4 and its documentation before its
general release. We encourage all users to migrate their applications to the
second release candidate and report any issues to the [GitHub issue tracker].
To update to `v0.4.0-rc.2`, manually update `rocket` in your `Cargo.toml` file:
To update to `v0.4.0`, manually update `rocket` in your `Cargo.toml` file:
```toml
[dependencies]
rocket = "0.4.0-rc.2"
rocket = "0.4.0"
```
Barring any major issues, of which none are expected, the general release of