Skip to main content

roblox_api/api/develop/
v1.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{DateTime, Paging, endpoint};
4
5pub const URL: &str = "https://develop.roblox.com/v1";
6
7#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
8#[serde(rename_all = "camelCase")]
9pub struct PublishedAssetVersion {
10    #[serde(rename = "Id")]
11    pub id: u64,
12    pub asset_id: u64,
13    #[serde(rename = "assetVersionNumber")]
14    pub asset_version: u64,
15    #[serde(rename = "creatorTargetId")]
16    pub creator_id: u64,
17    pub creator_type: String,
18    pub created: DateTime,
19    pub is_published: bool,
20    #[serde(rename = "isEqualToCurrentPublishedVersion")]
21    pub is_current_published_version: bool,
22}
23
24#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
25pub struct PublishedAssetVersions {
26    #[serde(rename = "data")]
27    pub assets: Vec<PublishedAssetVersion>,
28    #[serde(rename = "nextPageCursor")]
29    pub next_cursor: Option<String>,
30    #[serde(rename = "previousPageCursor")]
31    pub previous_cursor: Option<String>,
32}
33
34#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
35#[serde(rename_all = "camelCase")]
36pub struct AssetCreator {
37    #[serde(rename = "targetId")]
38    pub id: u64,
39    #[serde(rename = "type")]
40    pub kind: String,
41    pub type_id: u32,
42}
43
44#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
45#[serde(rename_all = "camelCase")]
46pub struct Asset {
47    pub id: u64,
48    pub name: String,
49    pub description: String,
50    #[serde(rename = "type")]
51    pub kind: String,
52    pub type_id: u32,
53
54    #[serde(rename = "enableComments")]
55    pub comments_enabled: bool,
56    pub is_copying_allowed: bool,
57    #[serde(rename = "isPublicDomainEnabled")]
58    pub is_public_domain: bool,
59    pub is_moderated: bool,
60    pub is_archivable: bool,
61    #[serde(rename = "canHaveThumbnail")]
62    pub thumbnails_allowed: bool,
63    pub is_versioning_enabled: bool,
64
65    pub moderation_status: Option<String>,
66    pub review_status: String,
67
68    pub created: DateTime,
69    pub updated: DateTime,
70
71    pub genres: Vec<String>,
72    pub creator: AssetCreator,
73}
74
75#[derive(Deserialize)]
76struct AssetsResponse {
77    #[serde(rename = "data")]
78    assets: Vec<Asset>,
79}
80
81endpoint! {
82    assets(ids: &[u64]) -> Vec<Asset> {
83        GET "{URL}/assets";
84        prelude {
85            let ids = ids
86                .iter()
87                .map(|x| x.to_string())
88                .collect::<Vec<String>>()
89                .join(",");
90        }
91        query {
92            "assetIds" => &ids,
93        }
94        map |r: AssetsResponse| r.assets
95    }
96
97    published_asset_versions(id: u64, paging: Paging<'_>) -> PublishedAssetVersions {
98        GET "{URL}/assets/{id}/published-versions";
99        paging_query { paging, limit = 10 }
100    }
101
102    revert_asset_version(id: u64, version: u64) -> () {
103        POST "{URL}/assets/{id}/revert-version?assetVersionNumber={version}";
104    }
105}