hypixel-sdk 0.1.1

Async client for the Hypixel Public API with typed models and SkyBlock helpers
Documentation
use crate::client::HypixelClient;
use crate::error::Result;
use crate::models::skyblock::*;

impl HypixelClient {
    /// Fetch all SkyBlock profiles for a player by UUID. Requires an API key.
    pub async fn skyblock_profiles(&self, uuid: &str) -> Result<Vec<SkyBlockProfile>> {
        let resp: ProfilesResponse = self
            .request("/v2/skyblock/profiles", &[("uuid", uuid)], true)
            .await?;
        Ok(resp.profiles.unwrap_or_default())
    }

    /// Fetch a single SkyBlock profile by its profile id. Requires an API key.
    pub async fn skyblock_profile(&self, profile: &str) -> Result<Option<SkyBlockProfile>> {
        let resp: ProfileResponse = self
            .request("/v2/skyblock/profile", &[("profile", profile)], true)
            .await?;
        Ok(resp.profile)
    }

    /// Fetch a profile's museum data by profile id. Requires an API key.
    pub async fn skyblock_museum(&self, profile: &str) -> Result<Option<Museum>> {
        let resp: MuseumResponse = self
            .request("/v2/skyblock/museum", &[("profile", profile)], true)
            .await?;
        Ok(resp.profile)
    }

    /// Fetch a profile's garden data by profile id. Requires an API key.
    pub async fn skyblock_garden(&self, profile: &str) -> Result<Option<Garden>> {
        let resp: GardenResponse = self
            .request("/v2/skyblock/garden", &[("profile", profile)], true)
            .await?;
        Ok(resp.garden)
    }

    /// Fetch a player's bingo participation by UUID. Requires an API key.
    pub async fn skyblock_bingo(&self, uuid: &str) -> Result<Vec<serde_json::Value>> {
        let resp: BingoEventsResponse = self
            .request("/v2/skyblock/bingo", &[("uuid", uuid)], true)
            .await?;
        Ok(resp.events)
    }

    /// Fetch the active auctions of a player, profile, or single auction.
    /// Provide exactly one of `uuid`, `player`, or `profile`. Requires an API key.
    pub async fn skyblock_auction(
        &self,
        uuid: Option<&str>,
        player: Option<&str>,
        profile: Option<&str>,
    ) -> Result<Vec<SkyBlockAuction>> {
        let mut query = Vec::new();
        if let Some(v) = uuid {
            query.push(("uuid", v));
        }
        if let Some(v) = player {
            query.push(("player", v));
        }
        if let Some(v) = profile {
            query.push(("profile", v));
        }
        let resp: AuctionResponse = self.request("/v2/skyblock/auction", &query, true).await?;
        Ok(resp.auctions)
    }

    /// Fetch one page of the global active-auction listing. Keyless.
    pub async fn skyblock_auctions(&self, page: u32) -> Result<AuctionsPage> {
        let page = page.to_string();
        self.request("/v2/skyblock/auctions", &[("page", &page)], false)
            .await
    }

    /// Fetch the most recently ended auctions. Keyless.
    pub async fn skyblock_auctions_ended(&self) -> Result<Vec<EndedAuction>> {
        let resp: EndedAuctionsResponse = self
            .request("/v2/skyblock/auctions_ended", &[], false)
            .await?;
        Ok(resp.auctions)
    }

    /// Fetch the current bazaar order books for every product. Keyless.
    pub async fn skyblock_bazaar(&self) -> Result<Bazaar> {
        self.request("/v2/skyblock/bazaar", &[], false).await
    }

    /// Fetch the currently scheduled fire sales. Keyless.
    pub async fn skyblock_firesales(&self) -> Result<Vec<FireSale>> {
        let resp: FireSalesResponse = self.request("/v2/skyblock/firesales", &[], false).await?;
        Ok(resp.sales)
    }

    /// Fetch the latest SkyBlock news posts. Keyless.
    pub async fn skyblock_news(&self) -> Result<Vec<NewsItem>> {
        let resp: NewsResponse = self.request("/v2/skyblock/news", &[], false).await?;
        Ok(resp.items)
    }
}