1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
use WrapErr;
use Deserialize;
/// The `Fetchable` trait provides a generalized interface for making basic HTTP
/// requests.
///
/// Implementations are expected to specify the `URL` constant and can
/// optionally provide custom query parameters.
///
/// Types `T` and `U` are involved in deserialization and conversion.
/// - `T` is the type that the HTTP response can be deserialized into.
/// - `U` is the type that the deserialized response will be converted into.
///
/// # Examples
///
/// ```ignore
/// use crate::api::Fetchable;
///
/// struct SearchClient {
/// query: Vec<(String, String)>
/// }
///
/// impl SearchClient {
/// pub fn new(q: String) -> Self {
/// Self { query: vec!["q".to_string(), q] }
/// }
/// }
///
/// impl Fetchable<YourResponseType, YourOutputType> for SearchClient {
/// const URL: &'static str = "https://your.api/endpoint";
///
/// fn query(&self) -> Option<&Vec<(String, String)>> {
/// Some(&self.query)
/// }
/// }
/// ```
///
/// # Errors
///
/// Returns `eyre::Result` which is a custom type alias over standard `Result`.
/// Typically, errors will be of type `eyre::Report`.