1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
pub fn action<T, B>(url: &str, body: B, tid: Option<String>) -> crate::Result<T>
where
    T: serde::de::DeserializeOwned,
    B: serde::Serialize,
{
    let url = crate::url(url);

    if crate::is_test() {
        return crate::mock(tid, serde_json::json! ({"url": url.as_str(), "body": body}));
    }

    let json = match serde_json::to_string(&body) {
        Ok(v) => v,
        Err(e) => return Err(crate::Error::SerializeError(e)),
    };

    crate::handle(crate::client(url.as_str(), reqwest::Method::POST).body(json))
}