poot 0.1.1

API wrapper for Photop.
Documentation
use serde::Deserialize;

use crate::{model::{user::UserRaw, id::PostId, post::{Post, PostRaw}}, context::BASE_API_URL};


impl super::Context {
    pub async fn get_post(&self, id: PostId) -> Result<Post, reqwest::Error> {
        #[derive(Deserialize)]
        struct GetResponse {
            users: Vec<UserRaw>,
            posts: Vec<PostRaw>,
        }

        let mut url = BASE_API_URL.join("posts").unwrap();
        url.query_pairs_mut().append_pair(
            "postid",
            serde_json::to_value(id).unwrap().as_str().unwrap(),
        );

        let val = self
            .client
            .get(url)
            .send()
            .await?
            .json::<GetResponse>()
            .await?;

        let GetResponse {
            mut posts,
            mut users,
        } = val;
        let post = posts.remove(0);
        let user = users.remove(0);
        let post = Post {
            id: post.id,
            author: user.into(),
            content: post.content,
        };
        return Ok(post);
    }
}