1use serde::{Deserialize, Serialize};
2use url::Url;
3
4#[derive(Debug, Serialize, Deserialize, Clone)]
5pub struct AcquireToken {
6 pub account_id: String,
7}
8
9impl AcquireToken {
10 pub fn to_request(&self, base_url: impl AsRef<str>) -> anyhow::Result<http::Request<String>> {
11 let url = Url::parse(base_url.as_ref())?.join("token")?;
12 Ok(http::Request::post(url.as_str())
13 .header(http::header::CONTENT_TYPE, "application/json")
14 .body(serde_json::to_string(self)?)?)
15 }
16}
17
18#[test]
19fn test_json() {
20 let json = r#"
21 {
22 "account_id": "0000000000000000000"
23 }
24 "#;
25 check_json(json);
26}
27
28#[cfg(test)]
29pub(crate) fn check_json(json: &str) {
30 let login: AcquireToken = serde_json::from_str(json).unwrap();
31 let json: serde_json::Value = serde_json::from_str(json).unwrap();
32 assert_eq!(json, serde_json::to_value(login).unwrap());
33}