use serde_json;
use chrono::{DateTime, Utc};
use error::HelpScoutError;
use client::Client;
use envelope::{Collection, Item};
#[derive(Debug, Default, Clone, Serialize)]
pub struct UsersBuilder {
pub(crate) page: Option<i32>,
#[serde(rename = "type")]
pub(crate) user_type: Option<UserType>,
}
impl UsersBuilder {
pub(crate) fn new() -> UsersBuilder {
UsersBuilder {
page: None,
user_type: None,
.. UsersBuilder::default()
}
}
pub fn page(mut self, page: i32) -> Self {
self.page = Some(page);
self
}
pub fn user_type(mut self, user_type: UserType) -> Self {
self.user_type = Some(user_type);
self
}
pub fn list(self, client: &Client) -> Result<Collection<User>, HelpScoutError> {
let res = client.get("users.json", self)?;
let users = serde_json::from_value(res.clone())?;
Ok(users)
}
pub fn get(self, client: &Client, id: i32) -> Result<Item<User>, HelpScoutError> {
let res = client.get(&format!("users/{}.json", id), ())?;
let user = serde_json::from_value(res.clone())?;
Ok(user)
}
pub fn list_by_mailbox(self, client: &Client, mailbox_id: i32) -> Result<Collection<User>, HelpScoutError> {
let res = client.get(&format!("mailboxes/{}/users.json", mailbox_id), self)?;
let users = serde_json::from_value(res.clone())?;
Ok(users)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum UserType {
Team,
User
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct User {
pub id: i32,
pub first_name: String,
pub last_name: String,
pub email: String,
pub role: String,
pub timezone: String,
pub photo_url: Option<String>,
pub created_at: DateTime<Utc>,
pub modified_at: DateTime<Utc>,
#[serde(rename = "type")]
pub user_type: UserType,
}