我用来在网络上序列化的结构的定义
pub struct NetworkData {
id: String,
status: String,
details: <Data Structure>,
}
现在有一个函数接受这个结构,序列化它并通过网络发送。
fn send_data(data: NetworkData ...) -> ... {
let data = serde_json::to_string(&data).expect("serialize issue");
let mut request = Request::new(reqwest::Method::POST, url);
*request.body_mut() = Some(data.into());
self.inner
.execute(request)
...
}
现在我想通过网络发送“x-www-form-urlencoded”数据,这应该改变这个函数如下:
fn send_data(data: NetworkData ...) -> ... {
// How should I change this?????
//let data = serde_json::to_string(&data).expect("serialize issue");
let mut request = Request::new(reqwest::Method::POST, url);
let content_type = HeaderValue::from_str(&format!("{}", "application/x-www-form-urlencoded",))
.expect("Header value creation bug");
request
.headers_mut()
.insert(header::CONTENT_TYPE, content_type);
*request.body_mut() = Some(data.into());
self.inner
.execute(request)
...
}
但是我应该如何组织我的“数据”来适应这幅图。
2条答案
按热度按时间6rqinv9w1#
您很有可能以与JSON完全相同的方式使用serde_urlencoded crate。
我不知道你的
<Data Structure>
是什么样子的,因为你没有提供它,但是serde_urlencoded crate只支持原始类型,所以如果你有更花哨的东西,你必须提出自己的转换;x-www-form-urlencoded只是一组key=value
对。无论如何,这里有一个工作示例:playground
jexiocij2#
如文档中所述,这已大大简化: