realm_client/
page.rs

1fn to_url_with_query<K, V>(
2    u: &str,
3    query: std::collections::HashMap<K, V>,
4) -> crate::Result<url::Url>
5where
6    K: Into<String> + AsRef<str> + Ord,
7    V: Into<String> + AsRef<str>,
8{
9    let mut params: Vec<(_, _)> = query.iter().collect();
10    params.sort_by(|(a, _), (b, _)| a.cmp(b));
11
12    url::Url::parse_with_params(crate::url(u).as_str(), &params)
13        .map_err(crate::Error::UrlParseError)
14}
15
16pub fn page<T, K, V>(
17    url: &str,
18    query: std::collections::HashMap<K, V>,
19    tid: Option<String>,
20) -> crate::Result<T>
21where
22    T: serde::de::DeserializeOwned,
23    K: Into<String> + AsRef<str> + Ord,
24    V: Into<String> + AsRef<str>,
25{
26    let url = to_url_with_query(url, query)?;
27
28    if crate::is_test() {
29        return crate::mock(tid, serde_json::json! ({"url": url.as_str()}));
30    }
31
32    crate::handle(crate::client(url.as_str(), reqwest::Method::GET))
33}