use serde::{Deserialize, Serialize};
use crate::{
api::{Form, Method, Payload, PayloadError, WriteForm},
types::{ChatId, InputFile},
};
#[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)]
pub struct ChatPhoto {
pub big_file_id: String,
pub big_file_unique_id: String,
pub small_file_id: String,
pub small_file_unique_id: String,
}
#[derive(Clone, Debug, Serialize)]
pub struct DeleteChatPhoto {
chat_id: ChatId,
}
impl DeleteChatPhoto {
pub fn new<T>(chat_id: T) -> Self
where
T: Into<ChatId>,
{
DeleteChatPhoto {
chat_id: chat_id.into(),
}
}
}
impl Method for DeleteChatPhoto {
type Response = bool;
fn into_payload(self) -> Result<Payload, PayloadError> {
Payload::json("deleteChatPhoto", self)
}
}
#[derive(Debug)]
pub struct SetChatPhoto {
photo: InputFile,
parameters: SetChatPhotoParameters,
}
impl SetChatPhoto {
pub fn new<A, B>(chat_id: A, photo: B) -> Self
where
A: Into<ChatId>,
B: Into<InputFile>,
{
Self {
photo: photo.into(),
parameters: SetChatPhotoParameters {
chat_id: Some(chat_id.into()),
..Default::default()
},
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Serialize)]
struct SetChatPhotoParameters {
chat_id: Option<ChatId>,
photo: Option<String>,
}
impl Method for SetChatPhoto {
type Response = bool;
fn into_payload(self) -> Result<Payload, PayloadError> {
let Self { photo, mut parameters } = self;
let mut form = Form::default();
parameters.photo = Some(photo.write(&mut form));
parameters.serialize(&mut form)?;
Payload::form("setChatPhoto", form)
}
}