use crate::objects::user::User;
use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};
#[derive(Serialize, Deserialize)]
pub struct JsonUser {
origin: User,
}
impl JsonUser {
pub fn new(origin: User) -> JsonUser {
JsonUser { origin }
}
pub fn as_json(self) -> Value {
let mut map = Map::new();
map.insert(String::from("login"), Value::from(self.origin.login));
for (k, v) in self.origin.extra.into_iter() {
map.insert(k, v);
}
Value::Object(map)
}
}
#[cfg(test)]
mod tests {
use crate::objects::json::json_user::JsonUser;
use crate::objects::user::User;
use anyhow::Result;
use hamcrest::{equal_to, is, HamcrestMatcher};
use serde_json::Value;
#[test]
fn prints_json() -> Result<()> {
let jeff = "jeff";
let mut base = User::new(String::from(jeff));
let url = "testing";
base.extra
.insert(String::from("url"), Value::String(String::from(url)));
let user = JsonUser::new(base);
let value = user.as_json();
assert_that!(value["login"].as_str(), is(equal_to(Some(jeff))));
assert_that!(value["url"].as_str(), is(equal_to(Some(url))));
Ok(())
}
}