safe-vk 1.2.2

A simple library to create your own vk bot for conversations
Documentation
use super::{FromUpdate, FromUpdateParts, Parts, Update};
use crate::{responses::Message, RequestBuilder};
use std::sync::Arc;

#[derive(Clone)]
#[must_use]
pub struct Ctx<T> {
    request: Arc<RequestBuilder>,
    body: T,
}

impl<T> Ctx<T> {
    pub fn request(&self) -> &RequestBuilder {
        &self.request
    }
}

impl<T> std::ops::Deref for Ctx<T> {
    type Target = T;

    fn deref(&self) -> &Self::Target {
        &self.body
    }
}

impl<S> FromUpdate<S> for Ctx<Message>
where
    S: Send + Sync,
{
    async fn from_update(
        update: Update,
        _state: &S,
        request: Arc<RequestBuilder>,
    ) -> Result<Self, ()> {
        let message: Message =
            serde_json::from_value(update.updates.unwrap()[0].object.clone()).unwrap();

        Ok(Ctx {
            request,
            body: message,
        })
    }
}

impl<S> FromUpdateParts<S> for Arc<RequestBuilder>
where
    S: Send + Sync,
{
    async fn from_update_parts(
        _parts: &mut Parts,
        _state: &S,
        request: Arc<RequestBuilder>,
    ) -> Result<Self, ()> {
        Ok(request)
    }
}

impl<S> FromUpdate<S> for Ctx<Update>
where
    S: Send + Sync,
{
    async fn from_update(
        update: Update,
        _state: &S,
        request: Arc<RequestBuilder>,
    ) -> Result<Self, ()> {
        Ok(Ctx {
            request,
            body: update,
        })
    }
}