mirror of https://github.com/rwf2/Rocket.git
Prefer '&str' in doc examples.
This commit is contained in:
parent
3045e0ac63
commit
feadb4dd16
|
@ -13,7 +13,7 @@ extensibility, and speed.
|
|||
#[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)
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ fn entry_to_tests(root_glob: &LitStr) -> Result<Vec<TokenStream>, Box<dyn Error>
|
|||
.replace(|c| c == '-' || c == '.', "_"))
|
||||
.ok_or_else(|| "invalid file name")?;
|
||||
|
||||
let ident = Ident::new(&name, root_glob.span());
|
||||
let ident = Ident::new(&name.to_lowercase(), root_glob.span());
|
||||
let full_path = Path::new(&manifest_dir).join(&path).display().to_string();
|
||||
tests.push(quote_spanned!(root_glob.span() =>
|
||||
mod #ident {
|
||||
|
@ -36,5 +36,9 @@ fn entry_to_tests(root_glob: &LitStr) -> Result<Vec<TokenStream>, Box<dyn Error>
|
|||
));
|
||||
}
|
||||
|
||||
if tests.is_empty() {
|
||||
return Err(format!("glob '{}' evaluates to 0 files", full_glob).into());
|
||||
}
|
||||
|
||||
Ok(tests)
|
||||
}
|
||||
|
|
|
@ -272,6 +272,7 @@ Rocket makes it easy to use `async/await` in routes.
|
|||
```rust
|
||||
# #[macro_use] extern crate rocket;
|
||||
use rocket::tokio::time::{sleep, Duration};
|
||||
|
||||
#[get("/delay/<seconds>")]
|
||||
async fn delay(seconds: u64) -> String {
|
||||
sleep(Duration::from_secs(seconds)).await;
|
||||
|
|
|
@ -100,7 +100,7 @@ Here's a more complete route to illustrate varied usage:
|
|||
# fn main() {}
|
||||
|
||||
#[get("/hello/<name>/<age>/<cool>")]
|
||||
fn hello(name: String, age: u8, cool: bool) -> String {
|
||||
fn hello(name: &str, age: u8, cool: bool) -> String {
|
||||
if cool {
|
||||
format!("You're a cool {} year old, {}!", age, name)
|
||||
} else {
|
||||
|
@ -173,7 +173,7 @@ previous example:
|
|||
# fn main() {}
|
||||
|
||||
#[get("/hello/<name>/<age>/<cool>")]
|
||||
fn hello(name: String, age: u8, cool: bool) { /* ... */ }
|
||||
fn hello(name: &str, age: u8, cool: bool) { /* ... */ }
|
||||
```
|
||||
|
||||
What if `cool` isn't a `bool`? Or, what if `age` isn't a `u8`? When a parameter
|
||||
|
@ -626,13 +626,13 @@ use serde::Deserialize;
|
|||
use rocket_contrib::json::Json;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct Task {
|
||||
description: String,
|
||||
struct Task<'r> {
|
||||
description: &'r str,
|
||||
complete: bool
|
||||
}
|
||||
|
||||
#[post("/todo", data = "<task>")]
|
||||
fn new(task: Json<Task>) { /* .. */ }
|
||||
fn new(task: Json<Task<'_>>) { /* .. */ }
|
||||
```
|
||||
|
||||
See the [JSON example] on GitHub for a complete example.
|
||||
|
@ -711,13 +711,13 @@ can easily handle the form request in Rocket as follows:
|
|||
use rocket::form::Form;
|
||||
|
||||
#[derive(FromForm)]
|
||||
struct Task {
|
||||
struct Task<'r> {
|
||||
complete: bool,
|
||||
r#type: String,
|
||||
r#type: &'r str,
|
||||
}
|
||||
|
||||
#[post("/todo", data = "<task>")]
|
||||
fn new(task: Form<Task>) { /* .. */ }
|
||||
fn new(task: Form<Task<'_>>) { /* .. */ }
|
||||
```
|
||||
|
||||
The [`Form`] type implements the `FromData` trait as long as its generic
|
||||
|
@ -732,10 +732,10 @@ forward or failure can be caught by using the `Option` and `Result` types:
|
|||
|
||||
```rust
|
||||
# use rocket::{post, form::Form};
|
||||
# type Task = String;
|
||||
# type Task<'r> = &'r str;
|
||||
|
||||
#[post("/todo", data = "<task>")]
|
||||
fn new(task: Option<Form<Task>>) { /* .. */ }
|
||||
fn new(task: Option<Form<Task<'_>>>) { /* .. */ }
|
||||
```
|
||||
|
||||
[`Form`]: @api/rocket/form/struct.Form.html
|
||||
|
@ -760,10 +760,10 @@ replace `Form<T>` with `Form<Strict<T>>` above to get strict parsing:
|
|||
|
||||
use rocket::form::{Form, Strict};
|
||||
|
||||
# #[derive(FromForm)] struct Task { complete: bool, description: String, }
|
||||
# #[derive(FromForm)] struct Task<'r> { complete: bool, description: &'r str, }
|
||||
|
||||
#[post("/todo", data = "<task>")]
|
||||
fn new(task: Form<Strict<Task>>) { /* .. */ }
|
||||
fn new(task: Form<Strict<Task<'_>>>) { /* .. */ }
|
||||
```
|
||||
|
||||
`Strict` can also be used to make individual fields strict while keeping the
|
||||
|
@ -838,9 +838,9 @@ structure can be written as:
|
|||
# use rocket::form::FromForm;
|
||||
|
||||
#[derive(FromForm)]
|
||||
struct External {
|
||||
struct External<'r> {
|
||||
#[field(name = "first-Name")]
|
||||
first_name: String
|
||||
first_name: &'r str
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -851,10 +851,10 @@ If you want to accept both `firstName` case-insensitively as well as
|
|||
# use rocket::form::FromForm;
|
||||
|
||||
#[derive(FromForm)]
|
||||
struct External {
|
||||
struct External<'r> {
|
||||
#[field(name = uncased("firstName"))]
|
||||
#[field(name = "first_name")]
|
||||
first_name: String
|
||||
first_name: &'r str
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -868,11 +868,11 @@ in each instance case-insensitively, you would write:
|
|||
# use rocket::form::FromForm;
|
||||
|
||||
#[derive(FromForm)]
|
||||
struct External {
|
||||
struct External<'r> {
|
||||
#[field(name = uncased("first-name"))]
|
||||
#[field(name = uncased("first_name"))]
|
||||
#[field(name = uncased("firstname"))]
|
||||
first_name: String
|
||||
first_name: &'r str
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -998,19 +998,19 @@ Form structs can be nested:
|
|||
use rocket::form::FromForm;
|
||||
|
||||
#[derive(FromForm)]
|
||||
struct MyForm {
|
||||
owner: Person,
|
||||
pet: Pet,
|
||||
struct MyForm<'r> {
|
||||
owner: Person<'r>,
|
||||
pet: Pet<'r>,
|
||||
}
|
||||
|
||||
#[derive(FromForm)]
|
||||
struct Person {
|
||||
name: String
|
||||
struct Person<'r> {
|
||||
name: &'r str
|
||||
}
|
||||
|
||||
#[derive(FromForm)]
|
||||
struct Pet {
|
||||
name: String,
|
||||
struct Pet<'r> {
|
||||
name: &'r str,
|
||||
#[field(validate = eq(true))]
|
||||
good_pet: bool,
|
||||
}
|
||||
|
|
|
@ -454,7 +454,7 @@ For example, given the following route:
|
|||
# fn main() {}
|
||||
|
||||
#[get("/<id>/<name>?<age>")]
|
||||
fn person(id: Option<usize>, name: String, age: Option<u8>) { /* .. */ }
|
||||
fn person(id: Option<usize>, name: &str, age: Option<u8>) { /* .. */ }
|
||||
```
|
||||
|
||||
URIs to `person` can be created as follows:
|
||||
|
@ -463,7 +463,7 @@ URIs to `person` can be created as follows:
|
|||
# #[macro_use] extern crate rocket;
|
||||
|
||||
# #[get("/<id>/<name>?<age>")]
|
||||
# fn person(id: Option<usize>, name: String, age: Option<u8>) { /* .. */ }
|
||||
# fn person(id: Option<usize>, name: &str, age: Option<u8>) { /* .. */ }
|
||||
|
||||
// with unnamed parameters, in route path declaration order
|
||||
let mike = uri!(person: 101, "Mike Smith", Some(28));
|
||||
|
@ -495,7 +495,7 @@ error: `person` route uri expects 3 parameters but 1 was supplied
|
|||
7 | let x = uri!(person: "Mike Smith");
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
||||
= note: expected parameters: id: Option <usize>, name: String, age: Option <u8>
|
||||
= note: expected parameters: id: Option <usize>, name: &str, age: Option <u8>
|
||||
```
|
||||
|
||||
Rocket also informs you of any type errors at compile-time:
|
||||
|
@ -593,7 +593,7 @@ generated.
|
|||
# #[macro_use] extern crate rocket;
|
||||
|
||||
# #[get("/<id>/<name>?<age>")]
|
||||
# fn person(id: Option<usize>, name: String, age: Option<u8>) { /* .. */ }
|
||||
# fn person(id: Option<usize>, name: &str, age: Option<u8>) { /* .. */ }
|
||||
|
||||
/// Note that `id` is `Option<usize>` in the route, but `id` in `uri!` _cannot_
|
||||
/// be an `Option`. `age`, on the other hand, _must_ be an `Option` (or `Result`
|
||||
|
|
|
@ -50,7 +50,7 @@ code = '''
|
|||
#[macro_use] extern crate rocket;
|
||||
|
||||
#[get("/hello/<name>/<age>")]
|
||||
fn hello(name: String, age: u8) -> String {
|
||||
fn hello(name: &str, age: u8) -> String {
|
||||
format!("Hello, {} year old named {}!", age, name)
|
||||
}
|
||||
|
||||
|
@ -75,17 +75,17 @@ text = '''
|
|||
title = "Forms? Check!"
|
||||
code = '''
|
||||
#[derive(FromForm)]
|
||||
struct Task {
|
||||
description: String,
|
||||
struct Task<'r> {
|
||||
description: &'r str,
|
||||
completed: bool
|
||||
}
|
||||
|
||||
#[post("/", data = "<task>")]
|
||||
fn new(task: Form<Task>) -> Flash<Redirect> {
|
||||
fn new(task: Form<Task<'_>>) -> Flash<Redirect> {
|
||||
if task.description.is_empty() {
|
||||
Flash::error(Redirect::to("/"), "Cannot be empty.")
|
||||
Flash::error(Redirect::to(uri!(home)), "Cannot be empty.")
|
||||
} else {
|
||||
Flash::success(Redirect::to("/"), "Task added.")
|
||||
Flash::success(Redirect::to(uri!(home)), "Task added.")
|
||||
}
|
||||
}
|
||||
'''
|
||||
|
@ -103,14 +103,14 @@ text = '''
|
|||
title = "JSON, out of the box."
|
||||
code = '''
|
||||
#[derive(Serialize, Deserialize)]
|
||||
struct Message {
|
||||
contents: String,
|
||||
struct Message<'r> {
|
||||
contents: &'r str,
|
||||
}
|
||||
|
||||
#[put("/<id>", data = "<msg>")]
|
||||
fn update(db: &Db, id: Id, msg: Json<Message>) -> JsonValue {
|
||||
fn update(db: &Db, id: Id, msg: Json<Message<'_>>) -> JsonValue {
|
||||
if db.contains_key(&id) {
|
||||
db.insert(id, &msg.contents);
|
||||
db.insert(id, msg.contents);
|
||||
json!({ "status": "ok" })
|
||||
} else {
|
||||
json!({ "status": "error" })
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#[cfg(any(test, doctest))] rocket::internal_guide_tests!("../guide/*.md");
|
||||
#[cfg(any(test, doctest))] rocket::internal_guide_tests!("../../../README.md");
|
||||
#[cfg(any(test, doctest))] rocket::internal_guide_tests!("../../README.md");
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! map {
|
||||
|
|
Loading…
Reference in New Issue