use crate::graph::accounts::AccountsAPI;
use crate::prelude::errors::ClientErr;
use crate::prelude::{Accounts, HttpConnection};
use serde::{Deserialize, Serialize};
#[derive(Deserialize, Serialize, Clone, Debug, Default)]
pub struct Me {
name: String,
id: String,
last_name: String,
first_name: String,
picture: PictureData,
email: Option<String>,
}
impl Me {
pub fn name(&self) -> &str {
&self.name
}
pub fn id(&self) -> &str {
&self.id
}
pub fn first_name(&self) -> &str {
&self.first_name
}
pub fn picture(&self) -> &PictureData {
&self.picture
}
pub fn last_name(&self) -> &str {
&self.last_name
}
pub fn email(&self) -> &Option<String> {
&self.email
}
}
#[derive(Deserialize, Serialize, Clone, Debug, Default)]
pub struct PictureData {
pub data: FacebookPictureUserPicture,
}
#[derive(Deserialize, Serialize, Clone, Debug, Default)]
pub struct FacebookPictureUserPicture {
url: String,
}
impl FacebookPictureUserPicture {
pub fn url(&self) -> &str {
&self.url
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct MeApi {
url: String,
}
impl MeApi {
pub fn new(graph_base: String) -> MeApi {
MeApi {
url: graph_base.replace("NODE", "me"),
}
}
pub async fn pages_by_me(self) -> Result<Accounts, ClientErr> {
Ok(AccountsAPI::new(self.url).get().await?)
}
pub async fn pages_by_user_id(self, user_id: String) -> Result<Accounts, ClientErr> {
Ok(AccountsAPI::new(self.url.replace("me", &user_id))
.get()
.await?)
}
pub async fn user(&self) -> Result<Me, ClientErr> {
let fields =
"&fields=id,name,picture, email,first_name,last_name,about,birthday,gender,link";
let base_ur = self.url.replace("EDGE", "");
let url = base_ur + fields;
let resp = HttpConnection::get::<Me>(url, "".to_string()).await?;
Ok(resp)
}
pub async fn user_by_id(&self, user_id: String) -> Result<Me, ClientErr> {
let base_url = self.url.replace("me", &user_id);
let fields =
"&fields=id,name,picture, email,first_name,last_name,about,birthday,gender,link";
let base_url = base_url.replace("EDGE", "");
let url = base_url + fields;
let resp = HttpConnection::get::<Me>(url, "".to_string()).await?;
Ok(resp)
}
}