roblox_api/api/challenge/
v1.rs1use 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}