telegram_bot_api_rs 0.1.1

Telegram Bot Api Rust Library
Documentation
use reqwest::multipart::Form;
use serde::{Deserialize, Serialize};

use crate::utils::ToMultipart;

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SetWebhookPayload {
    pub url: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub certificate: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub ip_address: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub max_connections: Option<i64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub allowed_updates: Option<Vec<String>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub drop_pending_updates: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub secret_token: Option<String>,
}

impl ToMultipart for SetWebhookPayload {
    fn to_multipart<'async_trait>(
        self,
    ) -> ::core::pin::Pin<
        Box<
            dyn ::core::future::Future<Output = anyhow::Result<Form>>
                + ::core::marker::Send
                + 'async_trait,
        >,
    >
    where
        Self: 'async_trait,
    {
        Box::pin(async move {
            let mut form = reqwest::multipart::Form::new();
            form = form.text("url", self.url);
            if let Some(c) = self.certificate {
                form = crate::utils::file_to_multipart("certificate".to_string(), c, form).await?;
            }
            if let Some(ip) = self.ip_address {
                form = form.text("ip_address", ip);
            }
            if let Some(mc) = self.max_connections {
                form = form.text("max_connections", mc.to_string());
            }
            if let Some(au) = self.allowed_updates {
                form = form.text("allowed_updates", serde_json::to_string(&au)?);
            }
            if let Some(dpu) = self.drop_pending_updates {
                form = form.text("drop_pending_updates", dpu.to_string());
            }
            if let Some(st) = self.secret_token {
                form = form.text("secret_token", st);
            }
            Ok(form)
        })
    }
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeleteWebhookPayload {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub drop_pending_updates: Option<bool>,
}