在下面的代码string
中Into<Body<'a>>
,RequestParameters<'a>
. 我理解为什么,因为在方法完成后string
进入范围内into
并且不再在范围内,但Body<'a>
会保留对它的引用。
至少,这就是我认为string
持续时间不够长的原因。
我不明白的是如何构造这段代码来修复string
的生命周期。
此代码的目标是将 HashMap(例如 of "a"
to "b"
)转换为 POST 请求正文的字符串("?a=b"
例如 )。如果有更好的方法可以做到这一点,请告诉我,但我会从中受益匪浅的是了解如何解决这个终身问题。
如果我对为什么string
活得不够长有误,也请告诉我。我仍在努力掌握 Rust 中的生命周期系统,因此弄清楚这一点将对我有很大帮助。
struct RequestParameters<'a> {
map: HashMap<&'a str, &'a str>,
}
impl<'a> From<HashMap<&'a str, &'a str>> for RequestParameters<'a> {
fn from(map: HashMap<&'a str, &'a str>) -> RequestParameters<'a> {
RequestParameters { map: map }
}
}
impl<'a> Into<Body<'a>> for RequestParameters<'a> {
fn into(self) -> Body<'a> {
let string = String::from("?") +
&self.map
.iter()
.map(|entry| format!("&{}={}", entry.0, entry.1))
.collect::<String>()[1..];
(&string).into()
}
}
fn main() {
let mut parameters = HashMap::new();
parameters.insert("a", "b");
let client = Client::new();
client.post("https://google.com")
.body(RequestParameters::from(parameters));
}