use crate::{
api::telegram::{API, MessageResult, PhotoMessage, Response, TextMessage},
client::BuildableClient,
network::{NetworkPlugin, NetworkProvider},
};
pub struct Client {
provider: NetworkProvider,
}
impl BuildableClient for Client {
fn build_from_plugins(plugins: Vec<Box<dyn NetworkPlugin>>) -> Self {
let provider = NetworkProvider::new(plugins);
Client { provider }
}
}
impl Client {
pub async fn send_text(
&self,
token: impl Into<String>,
chat_id: impl Into<String>,
text: TextMessage,
) -> Result<Response<MessageResult>, anyhow::Error> {
let request = API::text(token, chat_id, text);
let response = self.provider.send_request(&request).await?;
let result: Response<MessageResult> = response.json().await?;
Ok(result)
}
pub async fn send_photo(
&self,
token: impl Into<String>,
chat_id: impl Into<String>,
photo: PhotoMessage,
) -> Result<Response<MessageResult>, anyhow::Error> {
let request = API::photo(token, chat_id, photo);
let response = self.provider.send_request(&request).await?;
let result: Response<MessageResult> = response.json().await?;
Ok(result)
}
}