Skip to main content

roblox_api/api/inventory/
v2.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{AssetTypeId, DateTime, Paging, endpoint};
4
5pub const URL: &str = "https://inventory.roblox.com/v2";
6
7#[derive(Clone, Debug, Deserialize, Serialize)]
8pub struct FromOwnerAssetOwner {
9    pub id: u64,
10    #[serde(rename = "type")]
11    pub kind: u64,
12    pub name: String,
13}
14
15#[derive(Clone, Debug, Deserialize, Serialize)]
16pub struct FromOwnerAssetInfo {
17    pub id: u64,
18    #[serde(rename = "serialNumber")]
19    pub serial: u64,
20    #[serde(rename = "collectibleItemInstanceId")]
21    pub collectible_instance_id: Option<String>,
22    pub owner: UserOwnedAssetOwner,
23    pub created: DateTime,
24    pub updated: DateTime,
25}
26
27#[derive(Clone, Debug, Deserialize, Serialize)]
28pub struct UserOwnedAssetOwner {
29    #[serde(rename = "userId")]
30    pub id: u64,
31    #[serde(rename = "username")]
32    pub name: String,
33    // TODO: change this to an enum
34    #[serde(rename = "buildersClubMembershipType")]
35    pub premium_membership_type: String,
36}
37
38#[derive(Clone, Debug, Deserialize, Serialize)]
39pub struct UserOwnedAssetInfo {
40    #[serde(rename = "assetId")]
41    pub id: u64,
42    #[serde(rename = "userAssetId")]
43    pub instance_id: u64,
44    #[serde(rename = "assetName")]
45    pub name: String,
46    pub owner: UserOwnedAssetOwner,
47    #[serde(rename = "collectibleItemId")]
48    pub collectible_id: Option<String>,
49    #[serde(rename = "collectibleItemInstanceId")]
50    pub collectible_instance_id: Option<String>,
51    #[serde(rename = "serialNumber")]
52    pub serial: Option<u64>,
53    pub created: DateTime,
54    pub updated: DateTime,
55}
56
57#[derive(Clone, Debug, Deserialize, Serialize)]
58pub struct AssetOwners {
59    #[serde(rename = "nextPageCursor")]
60    pub next_cursor: String,
61    #[serde(rename = "previousPageCursor")]
62    pub previous_cursor: String,
63    #[serde(rename = "data")]
64    pub assets: Vec<FromOwnerAssetInfo>,
65}
66
67#[derive(Clone, Debug, Deserialize, Serialize)]
68pub struct UserOwnedAssets {
69    #[serde(rename = "nextPageCursor")]
70    pub next_cursor: Option<String>,
71    #[serde(rename = "previousPageCursor")]
72    pub previous_cursor: Option<String>,
73    #[serde(rename = "data")]
74    pub assets: Vec<UserOwnedAssetInfo>,
75}
76
77endpoint! {
78    asset_owners(id: u64, paging: Paging<'_>) -> AssetOwners {
79        GET "{URL}/assets/{id}/owners";
80        paging_query { paging, limit = 10 }
81    }
82
83    user_owned_assets(user_id: u64, asset_type_id: AssetTypeId, paging: Paging<'_>) -> UserOwnedAssets {
84        GET "{URL}/users/{user_id}/inventory/{__aid}";
85        paging_query { paging, limit = 10 }
86        prelude {
87            let __aid = asset_type_id as u8;
88        }
89    }
90}