use crate::errors::Error;
use serde::Deserialize;
#[derive(Deserialize, Debug, PartialEq, Eq)]
pub struct User {
pub tz_info: TzInfo,
}
impl User {
pub fn from_json(json: &str) -> Result<User, Error> {
let user: User = serde_json::from_str(json)?;
Ok(user)
}
}
#[derive(Deserialize, Debug, PartialEq, Eq)]
pub struct TzInfo {
pub timezone: String,
}
#[cfg(test)]
mod tests {
use super::*;
use serde_test::{Token, assert_de_tokens};
#[test]
fn user_deserializes_with_serde_tokens() {
let expected = User {
tz_info: TzInfo {
timezone: "America/Vancouver".to_string(),
},
};
assert_de_tokens(
&expected,
&[
Token::Struct {
name: "User",
len: 1,
},
Token::Str("tz_info"),
Token::Struct {
name: "TzInfo",
len: 1,
},
Token::Str("timezone"),
Token::Str("America/Vancouver"),
Token::StructEnd,
Token::StructEnd,
],
);
}
}