roblox_api/api/challenge/
v1.rs

1use serde::Serialize;
2
3use crate::{
4    Error,
5    challenge::{Challenge, ChallengeMetadataRequest},
6    client::Client,
7};
8
9pub const URL: &str = "https://apis.roblox.com/challenge/v1";
10
11pub async fn continue_challenge(
12    client: &mut Client,
13    challenge: &Challenge,
14    verification_token: &str,
15) -> Result<(), Error> {
16    #[derive(Debug, Serialize)]
17    struct Request<'a> {
18        #[serde(rename = "challengeId")]
19        id: &'a str,
20        #[serde(rename = "challengeType")]
21        kind: &'a str,
22        #[serde(rename = "challengeMetadata")]
23        metadata: &'a str,
24    }
25
26    let metadata_json = serde_json::to_string(&ChallengeMetadataRequest {
27        verification_token: verification_token.to_string(),
28        challenge_id: challenge.metadata.server_challenge_id.clone(),
29        action_type: challenge.metadata.action_type,
30        remember_device: challenge.metadata.remember_device,
31    })
32    .unwrap();
33
34    let result = client
35        .requestor
36        .client
37        .post(format!("{URL}/continue"))
38        .headers(client.requestor.default_headers.clone())
39        .json(&Request {
40            id: &challenge.id,
41            kind: &challenge.kind.to_string(),
42            metadata: &metadata_json,
43        })
44        .send()
45        .await;
46
47    client.requestor.validate_response(result).await?;
48    Ok(())
49}