|
| 1 | +use serde::de::Error as SerdeError; |
1 | 2 | use serde::{de::DeserializeOwned, Deserialize, Serialize};
|
2 | 3 | use serde_json::{json, Value};
|
3 | 4 | use std::{collections::HashMap, time::Duration};
|
@@ -79,16 +80,36 @@ impl<Http: HttpClient> Client<Http> {
|
79 | 80 | &self,
|
80 | 81 | value: &Value,
|
81 | 82 | ) -> Result<IndexesResults<Http>, Error> {
|
82 |
| - let raw_indexes = value["results"].as_array().unwrap(); |
| 83 | + let raw_indexes = value["results"] |
| 84 | + .as_array() |
| 85 | + .ok_or_else(|| serde_json::Error::custom("Missing or invalid 'results' field")) |
| 86 | + .map_err(Error::ParseError)?; |
| 87 | + |
| 88 | + let limit = value["limit"] |
| 89 | + .as_u64() |
| 90 | + .ok_or_else(|| serde_json::Error::custom("Missing or invalid 'limit' field")) |
| 91 | + .map_err(Error::ParseError)? as u32; |
| 92 | + |
| 93 | + let offset = value["offset"] |
| 94 | + .as_u64() |
| 95 | + .ok_or_else(|| serde_json::Error::custom("Missing or invalid 'offset' field")) |
| 96 | + .map_err(Error::ParseError)? as u32; |
| 97 | + |
| 98 | + let total = value["total"] |
| 99 | + .as_u64() |
| 100 | + .ok_or_else(|| serde_json::Error::custom("Missing or invalid 'total' field")) |
| 101 | + .map_err(Error::ParseError)? as u32; |
| 102 | + |
| 103 | + let results = raw_indexes |
| 104 | + .iter() |
| 105 | + .map(|raw_index| Index::from_value(raw_index.clone(), self.clone())) |
| 106 | + .collect::<Result<_, _>>()?; |
83 | 107 |
|
84 | 108 | let indexes_results = IndexesResults {
|
85 |
| - limit: value["limit"].as_u64().unwrap() as u32, |
86 |
| - offset: value["offset"].as_u64().unwrap() as u32, |
87 |
| - total: value["total"].as_u64().unwrap() as u32, |
88 |
| - results: raw_indexes |
89 |
| - .iter() |
90 |
| - .map(|raw_index| Index::from_value(raw_index.clone(), self.clone())) |
91 |
| - .collect::<Result<_, _>>()?, |
| 109 | + limit, |
| 110 | + offset, |
| 111 | + total, |
| 112 | + results, |
92 | 113 | };
|
93 | 114 |
|
94 | 115 | Ok(indexes_results)
|
|
0 commit comments