is not implemented"尝试使用 iron 和 mime 设置响应的内容类型-6ren"> is not implemented"尝试使用 iron 和 mime 设置响应的内容类型-我正在尝试运行 O'Reilly 出版的 Programming Rust 一书中的示例,但我坚持要使以下代码成功编译: Cargo.toml [package] name = "gcd-online-6ren">
gpt4 book ai didi

rust - "iron::Modifier is not implemented"尝试使用 iron 和 mime 设置响应的内容类型

转载 作者:行者123 更新时间:2023-11-29 08:09:16 35 4
gpt4 key购买 nike

我正在尝试运行 O'Reilly 出版的 Programming Rust 一书中的示例,但我坚持要使以下代码成功编译:

Cargo.toml

[package]
name = "gcd-online"
version = "0.1.0"
authors = ["Jignesh Gohel <abc@example.com>"]
edition = "2018"

[dependencies]
iron = "0.6.0"
mime = "0.3.12"
router = "0.6.0"
urlencoded = "0.6.0"

/src/main.rs

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)
}

我认为版本的差异是导致编译错误的原因。

我试图浏览 iron 的文档和 mime crate ,但我不知道如何解决这个错误。

最佳答案

正如您所注意到的,最新版本的mimeiron 与书中的示例代码不兼容。 issue was raised on the official book's repository

您可以使用旧的 mime crate,但从长远来看,最好使用 iron crate as explained in the docs 中的 mime

对于 iron 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)])
)
);

关于rust - "iron::Modifier<Response> is not implemented"尝试使用 iron 和 mime 设置响应的内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54007531/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com