我试图从运行由O'Reilly出版的书编程锈的例子,我停留在做下面的代码编译成功:
Cargo.toml
[package]
name = "gcd-online"
version = "0.1.0"
authors = ["Jignesh Gohel <[email protected]>"]
edition = "2018"
[dependencies]
iron = "0.6.0"
mime = "0.3.12"
router = "0.6.0"
urlencoded = "0.6.0"
/双人床/卖弄.人生
extern crate iron;
extern crate mime;
use iron::prelude::*;
use iron::status;
fn main() {
println!("Serving on http://localhost:3000...");
Iron::new(get_form).http("localhost:3000").unwrap();
}
fn get_form(_request: &mut Request) -> IronResult<Response> {
let mut response = Response::new();
response.set_mut(status::Ok);
response.set_mut(mime::TEXT_HTML_UTF_8);
response.set_mut(r#"
<title>GCD Calculator</title>
<form action="/gcd" method="post">
<input type="text" name="n" />
<input type="text" name="m" />
<button type="submit">Compute GCD</button>
</form>
"#);
Ok(response)
}
产量
Compiling gcd-online v0.1.0 (~/oreilly-programming-rust-book-examples/chapter-1/gcd-online)
error[E0277]: the trait bound `mime::Mime: iron::modifier::Modifier<iron::Response>` is not satisfied
--> src/main.rs:17:14
|
17 | response.set_mut(mime::TEXT_HTML_UTF_8);
| ^^^^^^^ the trait `iron::modifier::Modifier<iron::Response>` is not implemented for `mime::Mime`
我Cargo.toml使用最新版本的相关性,但是书的作者使用以下版本
[dependencies]
iron = "0.5.1"
mime = "0.2.3"
router = "0.5.1"
urlencoded = "0.5.0"
并作为其中一部分的作者使用以下代码
#[macro_use] extern crate mime;
fn get_form(_request: &mut Request) -> IronResult<Response> {
let mut response = Response::new();
response.set_mut(mime!(Text/Html; Charset=Utf8));
Ok(response)
}
我认为,在版本的区别是什么原因造成的编译错误。
正如您所注意到,哑剧和铁的最新版本不从书中的示例代码兼容。该issue was raised on the official book's repository。
你可以使用旧的哑剧箱,但是从长远来看,这将是最好使用MIME从铁箱子as explained in the docs。
对于铁0.6.0可以更换发生故障的线路:
response.set_mut(mime::TEXT_HTML_UTF_8);
要么
response.set_mut(mime!(Text/Html; Charset=Utf8));
具有下列之一:
response.headers.set(iron::headers::ContentType("text/html; charset=utf-8".parse::<iron::mime::Mime>().unwrap()));
要么
response.headers.set(iron::headers::ContentType(
iron::mime::Mime(
iron::mime::TopLevel::Text,
iron::mime::SubLevel::Html,
vec![(iron::mime::Attr::Charset, iron::mime::Value::Utf8)])
)
);