diff --git a/Cargo.lock b/Cargo.lock
index 4d450e0..fd290d8 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -17,6 +17,21 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "anstream"
version = "0.6.13"
@@ -143,6 +158,20 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+[[package]]
+name = "chrono"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "wasm-bindgen",
+ "windows-targets 0.52.4",
+]
+
[[package]]
name = "clap"
version = "4.5.4"
@@ -189,6 +218,12 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+
[[package]]
name = "crypto-common"
version = "0.1.6"
@@ -439,6 +474,29 @@ dependencies = [
"tracing",
]
+[[package]]
+name = "iana-time-zone"
+version = "0.1.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
[[package]]
name = "idna"
version = "0.5.0"
@@ -554,6 +612,15 @@ dependencies = [
"windows-sys 0.48.0",
]
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+]
+
[[package]]
name = "num_cpus"
version = "1.16.0"
@@ -660,10 +727,11 @@ dependencies = [
[[package]]
name = "rbxcloud"
-version = "0.14.0"
+version = "0.15.0"
dependencies = [
"anyhow",
"base64 0.22.0",
+ "chrono",
"clap",
"md-5",
"reqwest",
@@ -1199,6 +1267,15 @@ dependencies = [
"rustls-pki-types",
]
+[[package]]
+name = "windows-core"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+dependencies = [
+ "windows-targets 0.52.4",
+]
+
[[package]]
name = "windows-sys"
version = "0.48.0"
diff --git a/Cargo.toml b/Cargo.toml
index c0de43b..9b882f3 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "rbxcloud"
-version = "0.14.0"
+version = "0.15.0"
description = "CLI and SDK for the Roblox Open Cloud APIs"
authors = ["Stephen Leitnick"]
license = "MIT"
@@ -18,3 +18,4 @@ reqwest = { version = "0.12.2", default-features = false, features = ["rustls-tl
serde = { version = "1.0.197", features = ["derive"] }
serde_json = "1.0.115"
tokio = { version = "1.36.0", features = ["full"] }
+chrono = "0.4.38"
diff --git a/README.md b/README.md
index 3007fd0..c2c9a02 100644
--- a/README.md
+++ b/README.md
@@ -25,6 +25,7 @@ Possible use-cases:
| | API v2 (Beta) |
| -- | -- |
+| :x: | Data Stores |
| :white_check_mark: | Groups |
| :white_check_mark: | Universes |
| :white_check_mark: | Places |
@@ -33,6 +34,7 @@ Possible use-cases:
| :x: | Inventory |
| :white_check_mark: | User Notifications |
| :white_check_mark: | User |
+| :white_check_mark: | User Restrictions |
| :x: | Creator Store |
- :white_check_mark: = Supported
diff --git a/src/cli/mod.rs b/src/cli/mod.rs
index 1c06e27..59a40ed 100644
--- a/src/cli/mod.rs
+++ b/src/cli/mod.rs
@@ -9,10 +9,12 @@ mod place_cli;
mod subscription_cli;
mod universe_cli;
mod user_cli;
+mod user_restriction_cli;
use clap::{Parser, Subcommand};
use universe_cli::Universe;
use user_cli::User;
+use user_restriction_cli::UserRestriction;
use self::{
assets_cli::Assets, datastore_cli::DataStore, experience_cli::Experience, group_cli::Group,
@@ -22,13 +24,13 @@ use self::{
#[derive(Debug, Parser)]
#[clap(name = "rbxcloud", version)]
-pub struct Cli {
+pub(crate) struct Cli {
#[clap(subcommand)]
pub command: Command,
}
#[derive(Debug, Subcommand)]
-pub enum Command {
+pub(crate) enum Command {
/// Access the Roblox Assets API
Assets(Assets),
@@ -61,10 +63,13 @@ pub enum Command {
/// Access the Roblox User API
User(User),
+
+ /// Access to the Roblox User Restriction API
+ UserRestriction(UserRestriction),
}
impl Cli {
- pub async fn run(self) -> anyhow::Result