kjspkg-api 0.2.0

A simple and ergonomic API client for KJSPKG.
Documentation
use super::{ApiHelper, PackageApi};
use crate::models::{PackageVersion, PackageWithData, User};
use eyre::Result;
use tokio::runtime::Handle;

impl PackageApi {
    pub async fn get(&self) -> Result<PackageWithData> {
        Ok(self
            .client
            .get(self.url(format!("packages/{}", self.package))?)
            .send()
            .await?
            .json()
            .await?)
    }

    pub fn get_sync(&self, rt: &Handle) -> Result<PackageWithData> {
        Ok(rt.block_on(
            rt.block_on(
                self.client
                    .get(self.url(format!("packages/{}", self.package))?)
                    .send(),
            )?
            .json(),
        )?)
    }

    pub async fn authors(&self) -> Result<Vec<User>> {
        Ok(self
            .client
            .get(self.url(format!("packages/{}/authors", self.package))?)
            .send()
            .await?
            .json()
            .await?)
    }

    pub async fn versions(&self) -> Result<Vec<PackageVersion>> {
        Ok(self
            .client
            .get(self.url(format!("packages/{}/versions", self.package))?)
            .send()
            .await?
            .json()
            .await?)
    }

    pub async fn latest_version(&self) -> Result<PackageVersion> {
        Ok(self
            .client
            .get(self.url(format!("packages/{}/versions/latest", self.package))?)
            .send()
            .await?
            .json()
            .await?)
    }

    pub fn latest_version_sync(&self, rt: &Handle) -> Result<PackageVersion> {
        Ok(rt.block_on(
            rt.block_on(
                self.client
                    .get(self.url(format!("packages/{}/versions/latest", self.package))?)
                    .send(),
            )?
            .json(),
        )?)
    }
}