【发布时间】:2021-12-10 19:18:03
【问题描述】:
我正在学习 Rust 和它的 web api 支持。我正在做一个简单的项目,该项目执行 Web API 调用。这是直觉:
(一切都是为了从 Azure DevOps 项目中获取 Sprint 日期)
- 在
src/getlatestsprint.rs中,我有一个结构,其中包含名为“日期”和“冲刺”的字段。它们都是字符串类型。
pub struct Sprint {
date: String,
sprint: String,
}
- 然后我在上面做一个
impl,我期待它返回Sprint本身,它应该有date和sprint号码。仅供参考,它在代码中返回的只是占位符。 - 我遇到的问题是响应(不是这个块)。
impl Sprint {
pub fn get_sprint_and_date() -> Result<Sprint, reqwest::Error> {
let sprint_url: &str = "https://dev.azure.com/redactedOrg/redactedProj/redactedTeam/_apis/work/teamsettings/iterations?api-version=6.0";
let pat: &str = "redactedPAT";
let client = reqwest::blocking::Client::new();
let get_request = client.get(sprint_url)
.basic_auth(&"None", Some(pat))
.send()?;
- 所有这些都有效。
get_request.status()是200和get_request.text()是Ok(JSON_respose)。麻烦从这里开始:
if get_request.status() == 200 {
match get_request.text() {
Ok(v) => {
let deserialized_json: HashMap<String, serde_json::Value> = serde_json::from_str(&v).unwrap(); //This I got from another SO post that I was going through to work this out.
match deserialized_json.get("value") {
Some(des_j) => des_j,
None => None, //It says here "expected `&serde_json::Value`, found enum `std::option::Option`" This is where I am lost really.
}
},
_ => (),
}
}
//Placeholder return statement (I know I don't need to write return, but I am just doing it because I am used to it in other languages)
return Ok(Sprint {
date: String::from("sdfsd"),
sprint: String::from("dsfsfsdfsdfsd"),
})
}
}
我的意图是将响应中获得的最新日期和冲刺作为结构返回。
我在这里做错了什么?
编辑 示例 JSON 响应:
{
"count": 82,
"value": [
{
"id": "redactedID",
"name": "Sprint 74",
"path": "redactedProjectName\\Sprint 74",
"attributes": {
"startDate": "2018-10-22T00:00:00Z",
"finishDate": "2018-11-04T00:00:00Z",
"timeFrame": "past"
},
"url": "dev.azure.com/redactedOrg/redactedProject/redactedProj/_apis/…"
}
]
}
【问题讨论】: