use racal::Queryable;
use serde::{Deserialize, Serialize};
use time::OffsetDateTime;
use super::Authentication;
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct Friends {
pub last_status_update: Option<OffsetDateTime>,
}
impl Default for Friends {
fn default() -> Self { Self { last_status_update: None } }
}
impl Queryable<Authentication, Vec<crate::model::Friend>> for Friends {
fn url(&self, auth: &Authentication) -> String {
let mut query = format!(
"{}/users/{}/friends",
crate::API_BASE_URI,
auth.user_id.as_ref()
);
if let Some(last_status_update) = self.last_status_update {
query = query + "?lastStatusUpdate=" + &last_status_update.to_string();
}
query
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct RemoveFriend {
pub to: crate::id::User,
}
impl RemoveFriend {
pub fn new(to: impl Into<crate::id::User>) -> Self { Self { to: to.into() } }
}
impl Queryable<Authentication, crate::model::User> for RemoveFriend {
fn url(&self, auth: &Authentication) -> String {
format!(
"{}/users/{}/friends/{}",
crate::API_BASE_URI,
auth.user_id.as_ref(),
self.to.as_ref()
)
}
fn body(&self, auth: &Authentication) -> Option<serde_json::Result<Vec<u8>>> {
let value = serde_json::json!({
"ownerId": auth.user_id.as_ref(),
"friendStatus": crate::model::FriendStatus::Ignored
});
Some(serde_json::to_vec(&value))
}
fn method(&self, _: &Authentication) -> racal::RequestMethod {
racal::RequestMethod::Delete
}
}