roblox-api 0.1.7

Roblox web api bindings
Documentation
use serde::{Deserialize, Serialize};

use crate::{Error, client::Client};

pub const URL: &str = "https://apis.roblox.com/user-blocking-api/v1";

#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct UserBlockStatus {
    #[serde(rename = "userId")]
    pub id: u64,
    pub is_blocked: bool,
    pub is_blocking_viewer: bool,
}

pub async fn is_blocked(client: &mut Client, id: u64) -> Result<bool, Error> {
    let result = client
        .requestor
        .client
        .get(format!("{URL}/users/{id}/is-blocked"))
        .headers(client.requestor.default_headers.clone())
        .send()
        .await;

    let response = client.requestor.validate_response(result).await?;
    client.requestor.parse_json::<bool>(response).await
}

pub async fn batch_check_reciprocal_block(
    client: &mut Client,
    requester_id: u64,
    ids: &[u64],
) -> Result<Vec<UserBlockStatus>, Error> {
    #[derive(Debug, Serialize)]
    struct Request<'a> {
        #[serde(rename = "requesterUserId")]
        requester_id: u64,
        #[serde(rename = "userIds")]
        ids: &'a [u64],
    }

    let result = client
        .requestor
        .client
        .post(format!("{URL}/users/batch-check-reciprocal-block"))
        .json(&Request { requester_id, ids })
        .headers(client.requestor.default_headers.clone())
        .send()
        .await;

    #[derive(Debug, Deserialize)]
    struct Response {
        users: Vec<UserBlockStatus>,
    }

    let response = client.requestor.validate_response(result).await?;
    Ok(client
        .requestor
        .parse_json::<Response>(response)
        .await?
        .users)
}