conogram 0.2.19

An async wrapper for Telegram Bot API
Documentation
use std::fmt::Debug;

use async_trait::async_trait;
use serde::{de::DeserializeOwned, Serialize};

use crate::{api::API, entities::misc::input_file::GetFiles, errors::ConogramError};

#[async_trait]
pub trait RequestT
where
    Self: Sized + Send + Sync,
    Self::ParamsType: Serialize + Debug + Sync,
    Self::ReturnType: DeserializeOwned + Debug,
{
    type ParamsType;
    type ReturnType;

    fn get_name() -> &'static str;
    fn get_api_ref(&self) -> &API;
    fn get_params_ref(&self) -> &Self::ParamsType;
    fn is_multipart() -> bool;

    async fn send(self) -> Result<Self::ReturnType, ConogramError> {
        self.send_ref().await
    }

    async fn send_ref(&self) -> Result<Self::ReturnType, ConogramError> {
        self.get_api_ref()
            .method_json(Self::get_name(), Some(self.get_params_ref()))
            .await
    }

    async fn send_multipart(self) -> Result<Self::ReturnType, ConogramError>
    where
        Self::ParamsType: GetFiles,
    {
        self.send_ref_multipart().await
    }

    async fn send_ref_multipart(&self) -> Result<Self::ReturnType, ConogramError>
    where
        Self::ParamsType: GetFiles,
    {
        self.get_api_ref()
            .method_multipart_form(Self::get_name(), Some(self.get_params_ref()))
            .await
    }
}