From 15f70e8c1b3f340a905149814fd2060f1206c6a9 Mon Sep 17 00:00:00 2001 From: Stephen Leitnick Date: Thu, 6 Jun 2024 12:02:00 -0400 Subject: [PATCH 1/7] Universe API --- src/rbx/v2/mod.rs | 1 + src/rbx/v2/universe.rs | 152 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 src/rbx/v2/universe.rs diff --git a/src/rbx/v2/mod.rs b/src/rbx/v2/mod.rs index 8112359..a34dec3 100644 --- a/src/rbx/v2/mod.rs +++ b/src/rbx/v2/mod.rs @@ -15,6 +15,7 @@ pub mod group; pub(crate) mod http_err; pub mod notification; pub mod subscription; +pub mod universe; use crate::rbx::error::Error; diff --git a/src/rbx/v2/universe.rs b/src/rbx/v2/universe.rs new file mode 100644 index 0000000..1a4ef38 --- /dev/null +++ b/src/rbx/v2/universe.rs @@ -0,0 +1,152 @@ +use serde::{Deserialize, Serialize}; + +use crate::rbx::{error::Error, types::UniverseId, util::QueryString}; + +use super::http_err::handle_http_err; + +#[derive(Deserialize, Serialize, Debug)] +#[serde(rename_all = "SCREAMING_SNAKE_CASE")] +pub enum UniverseVisibility { + VisibilityUnspecified, + Public, + Private, +} + +#[derive(Deserialize, Serialize, Debug)] +#[serde(rename_all = "SCREAMING_SNAKE_CASE")] +pub enum UniverseAgeRating { + AgeRatingUnspecified, + AgeRatingAll, + AgeRating9Plus, + AgeRating13Plus, + AgeRating17Plus, +} + +#[derive(Deserialize, Serialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct UniverseSocialLink { + title: String, + uri: String, +} + +pub struct GetUniverseParams { + pub api_key: String, + pub universe_id: UniverseId, +} + +#[derive(Deserialize, Serialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct UniverseInfo { + path: String, + create_time: String, + update_time: String, + display_name: String, + description: String, + user: Option, + group: Option, + visibility: UniverseVisibility, + facebook_social_link: UniverseSocialLink, + twitter_social_link: UniverseSocialLink, + youtube_social_link: UniverseSocialLink, + twitch_social_link: UniverseSocialLink, + discord_social_link: UniverseSocialLink, + roblox_group_social_link: UniverseSocialLink, + guilded_social_link: UniverseSocialLink, + voice_chat_enabled: bool, + age_rating: UniverseAgeRating, + private_server_price_robux: u32, + desktop_enabled: bool, + mobile_enabled: bool, + tablet_enabled: bool, + console_enabled: bool, + vr_enabled: bool, +} + +pub struct UpdateUniverseParams { + pub api_key: String, + pub universe_id: UniverseId, + pub update_mask: String, +} + +pub struct RestartUniverseServersParams { + pub api_key: String, + pub universe_id: UniverseId, +} + +pub async fn get_universe(params: &GetUniverseParams) -> Result { + let client = reqwest::Client::new(); + + let url = format!( + "https://apis.roblox.com/cloud/v2/universes/{universeId}", + universeId = ¶ms.universe_id, + ); + + let res = client + .get(url) + .header("x-api-key", ¶ms.api_key) + .send() + .await?; + + let status = res.status(); + + if !status.is_success() { + let code = status.as_u16(); + return handle_http_err(code); + } + + let body = res.json::().await?; + Ok(body) +} + +pub async fn update_universe(params: &UpdateUniverseParams) -> Result { + let client = reqwest::Client::new(); + + let url = format!( + "https://apis.roblox.com/cloud/v2/universes/{universeId}", + universeId = ¶ms.universe_id, + ); + + let mut query: QueryString = vec![]; + query.push(("updateMask", params.update_mask.clone())); + + let res = client + .patch(url) + .header("x-api-key", ¶ms.api_key) + .query(&query) + .send() + .await?; + + let status = res.status(); + + if !status.is_success() { + let code = status.as_u16(); + return handle_http_err(code); + } + + let body = res.json::().await?; + Ok(body) +} + +pub async fn restart_universe_servers(params: &RestartUniverseServersParams) -> Result<(), Error> { + let client = reqwest::Client::new(); + + let url = format!( + "https://apis.roblox.com/cloud/v2/universes/{universeId}:restartServers", + universeId = ¶ms.universe_id, + ); + + let res = client + .post(url) + .header("x-api-key", ¶ms.api_key) + .send() + .await?; + + let status = res.status(); + + if !status.is_success() { + let code = status.as_u16(); + return handle_http_err(code); + } + + Ok(()) +} From 79852386450d1f13f94f6642094b19a43f3b4b0b Mon Sep 17 00:00:00 2001 From: Stephen Leitnick Date: Thu, 6 Jun 2024 12:10:16 -0400 Subject: [PATCH 2/7] Universe client --- src/rbx/v2/mod.rs | 48 ++++++++++++++++++++++++++++++++++++++++++ src/rbx/v2/universe.rs | 4 ++++ 2 files changed, 52 insertions(+) diff --git a/src/rbx/v2/mod.rs b/src/rbx/v2/mod.rs index a34dec3..08076cf 100644 --- a/src/rbx/v2/mod.rs +++ b/src/rbx/v2/mod.rs @@ -2,6 +2,10 @@ //! //! Most usage should go through the `Client` struct. +use universe::{ + GetUniverseParams, RestartUniverseServersParams, UniverseInfo, UpdateUniverseParams, +}; + use self::{ group::{ GetGroupParams, GetGroupResponse, GetGroupShoutParams, GetGroupShoutResponse, @@ -48,6 +52,11 @@ pub struct NotificationClient { pub universe_id: UniverseId, } +pub struct UniverseClient { + pub api_key: String, + pub universe_id: UniverseId, +} + impl GroupClient { pub async fn get_info(&self) -> Result { group::get_group(&GetGroupParams { @@ -130,6 +139,38 @@ impl NotificationClient { } } +impl UniverseClient { + pub async fn get(&self) -> Result { + universe::get_universe(&GetUniverseParams { + api_key: self.api_key.clone(), + universe_id: self.universe_id, + }) + .await + } + + pub async fn update( + &self, + update_mask: String, + info: UniverseInfo, + ) -> Result { + universe::update_universe(&UpdateUniverseParams { + api_key: self.api_key.clone(), + universe_id: self.universe_id, + update_mask, + info: info, + }) + .await + } + + pub async fn restart_servers(&self) -> Result<(), Error> { + universe::restart_universe_servers(&RestartUniverseServersParams { + api_key: self.api_key.clone(), + universe_id: self.universe_id, + }) + .await + } +} + impl Client { pub fn new(api_key: &str) -> Client { Client { @@ -156,4 +197,11 @@ impl Client { universe_id, } } + + pub fn universe(&self, universe_id: UniverseId) -> UniverseClient { + UniverseClient { + api_key: self.api_key.clone(), + universe_id, + } + } } diff --git a/src/rbx/v2/universe.rs b/src/rbx/v2/universe.rs index 1a4ef38..fe510b5 100644 --- a/src/rbx/v2/universe.rs +++ b/src/rbx/v2/universe.rs @@ -66,6 +66,7 @@ pub struct UpdateUniverseParams { pub api_key: String, pub universe_id: UniverseId, pub update_mask: String, + pub info: UniverseInfo, } pub struct RestartUniverseServersParams { @@ -109,9 +110,12 @@ pub async fn update_universe(params: &UpdateUniverseParams) -> Result Date: Thu, 6 Jun 2024 12:57:51 -0400 Subject: [PATCH 3/7] Universe CLI --- src/cli/mod.rs | 6 ++ src/cli/universe_cli.rs | 220 ++++++++++++++++++++++++++++++++++++++++ src/rbx/v2/mod.rs | 5 +- src/rbx/v2/universe.rs | 109 +++++++++++++++----- 4 files changed, 312 insertions(+), 28 deletions(-) create mode 100644 src/cli/universe_cli.rs diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 0105d43..d151c7c 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -6,8 +6,10 @@ mod messaging_cli; mod notification_cli; mod ordered_datastore_cli; mod subscription_cli; +mod universe_cli; use clap::{Parser, Subcommand}; +use universe_cli::Universe; use self::{ assets_cli::Assets, datastore_cli::DataStore, experience_cli::Experience, group_cli::Group, @@ -47,6 +49,9 @@ pub enum Command { /// Access the Roblox Notification API Notification(Notification), + + /// Access the Roblox Universe API + Universe(Universe), } impl Cli { @@ -60,6 +65,7 @@ impl Cli { Command::Group(command) => command.run().await, Command::Subscription(command) => command.run().await, Command::Notification(command) => command.run().await, + Command::Universe(command) => command.run().await, } } } diff --git a/src/cli/universe_cli.rs b/src/cli/universe_cli.rs new file mode 100644 index 0000000..32b357e --- /dev/null +++ b/src/cli/universe_cli.rs @@ -0,0 +1,220 @@ +use clap::{Args, Subcommand}; +use rbxcloud::rbx::{ + types::UniverseId, + v2::{universe::UpdateUniverseInfo, Client}, +}; + +#[derive(Debug, Subcommand)] +pub enum UniverseCommands { + /// Get universe information + Get { + /// Universe ID + #[clap(short, long, value_parser)] + universe_id: u64, + + /// Pretty-print the JSON response + #[clap(short, long, value_parser, default_value_t = false)] + pretty: bool, + + /// Roblox Open Cloud API Key + #[clap(short, long, value_parser, env = "RBXCLOUD_API_KEY")] + api_key: String, + }, + + /// Restart servers + Restart { + /// Universe ID + #[clap(short, long, value_parser)] + universe_id: u64, + + /// Roblox Open Cloud API Key + #[clap(short, long, value_parser, env = "RBXCLOUD_API_KEY")] + api_key: String, + }, + + /// Update Universe name + UpdateName { + /// Universe ID + #[clap(short, long, value_parser)] + universe_id: u64, + + /// New Universe name + #[clap(short, long, value_parser)] + name: String, + + /// Pretty-print the JSON response + #[clap(short, long, value_parser, default_value_t = false)] + pretty: bool, + + /// Roblox Open Cloud API Key + #[clap(short, long, value_parser, env = "RBXCLOUD_API_KEY")] + api_key: String, + }, + + /// Update Universe description + UpdateDescription { + /// Universe ID + #[clap(short, long, value_parser)] + universe_id: u64, + + /// New Universe description + #[clap(short, long, value_parser)] + description: String, + + /// Pretty-print the JSON response + #[clap(short, long, value_parser, default_value_t = false)] + pretty: bool, + + /// Roblox Open Cloud API Key + #[clap(short, long, value_parser, env = "RBXCLOUD_API_KEY")] + api_key: String, + }, +} + +#[derive(Debug, Args)] +pub struct Universe { + #[clap(subcommand)] + command: UniverseCommands, +} + +impl Universe { + pub async fn run(self) -> anyhow::Result> { + match self.command { + UniverseCommands::Get { + universe_id, + pretty, + api_key, + } => { + let client = Client::new(&api_key); + let universe_client = client.universe(UniverseId(universe_id)); + let res = universe_client.get().await; + match res { + Ok(universe_info) => { + let r = if pretty { + serde_json::to_string_pretty(&universe_info)? + } else { + serde_json::to_string(&universe_info)? + }; + Ok(Some(r)) + } + Err(err) => Err(anyhow::anyhow!(err)), + } + } + + UniverseCommands::Restart { + universe_id, + api_key, + } => { + let client = Client::new(&api_key); + let universe_client = client.universe(UniverseId(universe_id)); + let res = universe_client.restart_servers().await; + match res { + Ok(()) => Ok(Some("servers restarted".to_string())), + Err(err) => Err(anyhow::anyhow!(err)), + } + } + + UniverseCommands::UpdateName { + universe_id, + name, + pretty, + api_key, + } => { + let client = Client::new(&api_key); + let universe_client = client.universe(UniverseId(universe_id)); + let res = universe_client + .update( + "displayName".to_string(), + UpdateUniverseInfo { + path: None, + create_time: None, + update_time: None, + display_name: Some(name), + description: None, + user: None, + group: None, + visibility: None, + facebook_social_link: None, + twitter_social_link: None, + youtube_social_link: None, + twitch_social_link: None, + discord_social_link: None, + roblox_group_social_link: None, + guilded_social_link: None, + voice_chat_enabled: None, + age_rating: None, + private_server_price_robux: None, + desktop_enabled: None, + mobile_enabled: None, + tablet_enabled: None, + console_enabled: None, + vr_enabled: None, + }, + ) + .await; + match res { + Ok(universe_info) => { + let r = if pretty { + serde_json::to_string_pretty(&universe_info)? + } else { + serde_json::to_string(&universe_info)? + }; + Ok(Some(r)) + } + Err(err) => Err(anyhow::anyhow!(err)), + } + } + + UniverseCommands::UpdateDescription { + universe_id, + description, + pretty, + api_key, + } => { + let client = Client::new(&api_key); + let universe_client = client.universe(UniverseId(universe_id)); + let res = universe_client + .update( + "description".to_string(), + UpdateUniverseInfo { + path: None, + create_time: None, + update_time: None, + display_name: None, + description: Some(description), + user: None, + group: None, + visibility: None, + facebook_social_link: None, + twitter_social_link: None, + youtube_social_link: None, + twitch_social_link: None, + discord_social_link: None, + roblox_group_social_link: None, + guilded_social_link: None, + voice_chat_enabled: None, + age_rating: None, + private_server_price_robux: None, + desktop_enabled: None, + mobile_enabled: None, + tablet_enabled: None, + console_enabled: None, + vr_enabled: None, + }, + ) + .await; + match res { + Ok(universe_info) => { + let r = if pretty { + serde_json::to_string_pretty(&universe_info)? + } else { + serde_json::to_string(&universe_info)? + }; + Ok(Some(r)) + } + Err(err) => Err(anyhow::anyhow!(err)), + } + } + } + } +} diff --git a/src/rbx/v2/mod.rs b/src/rbx/v2/mod.rs index 08076cf..423dc78 100644 --- a/src/rbx/v2/mod.rs +++ b/src/rbx/v2/mod.rs @@ -3,7 +3,8 @@ //! Most usage should go through the `Client` struct. use universe::{ - GetUniverseParams, RestartUniverseServersParams, UniverseInfo, UpdateUniverseParams, + GetUniverseParams, RestartUniverseServersParams, UniverseInfo, UpdateUniverseInfo, + UpdateUniverseParams, }; use self::{ @@ -151,7 +152,7 @@ impl UniverseClient { pub async fn update( &self, update_mask: String, - info: UniverseInfo, + info: UpdateUniverseInfo, ) -> Result { universe::update_universe(&UpdateUniverseParams { api_key: self.api_key.clone(), diff --git a/src/rbx/v2/universe.rs b/src/rbx/v2/universe.rs index fe510b5..f989b48 100644 --- a/src/rbx/v2/universe.rs +++ b/src/rbx/v2/universe.rs @@ -25,8 +25,8 @@ pub enum UniverseAgeRating { #[derive(Deserialize, Serialize, Debug)] #[serde(rename_all = "camelCase")] pub struct UniverseSocialLink { - title: String, - uri: String, + pub title: String, + pub uri: String, } pub struct GetUniverseParams { @@ -37,36 +37,87 @@ pub struct GetUniverseParams { #[derive(Deserialize, Serialize, Debug)] #[serde(rename_all = "camelCase")] pub struct UniverseInfo { - path: String, - create_time: String, - update_time: String, - display_name: String, - description: String, - user: Option, - group: Option, - visibility: UniverseVisibility, - facebook_social_link: UniverseSocialLink, - twitter_social_link: UniverseSocialLink, - youtube_social_link: UniverseSocialLink, - twitch_social_link: UniverseSocialLink, - discord_social_link: UniverseSocialLink, - roblox_group_social_link: UniverseSocialLink, - guilded_social_link: UniverseSocialLink, - voice_chat_enabled: bool, - age_rating: UniverseAgeRating, - private_server_price_robux: u32, - desktop_enabled: bool, - mobile_enabled: bool, - tablet_enabled: bool, - console_enabled: bool, - vr_enabled: bool, + pub path: String, + pub create_time: String, + pub update_time: String, + pub display_name: String, + pub description: String, + pub user: Option, + pub group: Option, + pub visibility: UniverseVisibility, + pub facebook_social_link: Option, + pub twitter_social_link: Option, + pub youtube_social_link: Option, + pub twitch_social_link: Option, + pub discord_social_link: Option, + pub roblox_group_social_link: Option, + pub guilded_social_link: Option, + pub voice_chat_enabled: bool, + pub age_rating: UniverseAgeRating, + pub private_server_price_robux: u32, + pub desktop_enabled: bool, + pub mobile_enabled: bool, + pub tablet_enabled: bool, + pub console_enabled: bool, + pub vr_enabled: bool, +} + +#[derive(Deserialize, Serialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct UpdateUniverseInfo { + #[serde(skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub create_time: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub update_time: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub display_name: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub description: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub user: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub group: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub visibility: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub facebook_social_link: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub twitter_social_link: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub youtube_social_link: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub twitch_social_link: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub discord_social_link: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub roblox_group_social_link: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub guilded_social_link: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub voice_chat_enabled: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub age_rating: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub private_server_price_robux: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub desktop_enabled: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub mobile_enabled: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub tablet_enabled: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub console_enabled: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub vr_enabled: Option, } pub struct UpdateUniverseParams { pub api_key: String, pub universe_id: UniverseId, pub update_mask: String, - pub info: UniverseInfo, + pub info: UpdateUniverseInfo, } pub struct RestartUniverseServersParams { @@ -111,10 +162,12 @@ pub async fn update_universe(params: &UpdateUniverseParams) -> Result universeId = ¶ms.universe_id, ); + let body = "{}"; + let res = client .post(url) .header("x-api-key", ¶ms.api_key) + .header("Content-Type", "application/json") + .body(body) .send() .await?; From bb0cc1cd66c386b282f385498a1dc25a5732ce51 Mon Sep 17 00:00:00 2001 From: Stephen Leitnick Date: Thu, 6 Jun 2024 13:00:40 -0400 Subject: [PATCH 4/7] Restart servers example --- examples/restart-servers.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 examples/restart-servers.rs diff --git a/examples/restart-servers.rs b/examples/restart-servers.rs new file mode 100644 index 0000000..c92df41 --- /dev/null +++ b/examples/restart-servers.rs @@ -0,0 +1,26 @@ +use rbxcloud::rbx::{error::Error, types::UniverseId, v2::Client}; + +async fn restart_servers() -> Result<(), Error> { + // Inputs: + let api_key = "MY_API_KEY"; + let universe_id = 9876543210; + + let client = Client::new(api_key); + let universe_client = client.universe(UniverseId(universe_id)); + + universe_client.restart_servers().await +} + +#[tokio::main] +async fn main() { + let restart_result = restart_servers().await; + + match restart_result { + Ok(()) => { + println!("Servers restarted"); + } + Err(e) => { + eprintln!("{e:?}"); + } + } +} From d1aaf8d808c626a4882c670a4e725abca32c3e2d Mon Sep 17 00:00:00 2001 From: Stephen Leitnick Date: Thu, 6 Jun 2024 13:05:45 -0400 Subject: [PATCH 5/7] Universe docs --- docs/cli/cli-universe.md | 66 ++++++++++++++++++++++++++++++++++++++++ mkdocs.yml | 1 + 2 files changed, 67 insertions(+) create mode 100644 docs/cli/cli-universe.md diff --git a/docs/cli/cli-universe.md b/docs/cli/cli-universe.md new file mode 100644 index 0000000..1fc569d --- /dev/null +++ b/docs/cli/cli-universe.md @@ -0,0 +1,66 @@ +# Universe API + +## Getting Universe Info +``` +Usage: rbxcloud universe get [OPTIONS] --universe-id --api-key + +Options: + -u, --universe-id Universe ID + -p, --pretty Pretty-print the JSON response + -a, --api-key Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=] + -h, --help Print help +``` + +### Example +``` +$ rbxcloud universe get -p -u 12345 -a MY_KEY +``` + +## Updating Name +``` +Usage: rbxcloud universe update-name [OPTIONS] --universe-id --name --api-key + +Options: + -u, --universe-id Universe ID + -n, --name New Universe name + -p, --pretty Pretty-print the JSON response + -a, --api-key Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=] + -h, --help Print help +``` + +### Example +``` +$ rbxcloud universe update-name -n "Experience Name" -p -u 12345 -a MY_KEY +``` + +## Updating Description +``` +Usage: rbxcloud universe update-description [OPTIONS] --universe-id --description --api-key + +Options: + -u, --universe-id Universe ID + -d, --description New Universe description + -p, --pretty Pretty-print the JSON response + -a, --api-key Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=] + -h, --help Print help +``` + +### Example +``` +$ rbxcloud universe update-description -n "Experience description here." -p -u 12345 -a MY_KEY +``` + +## Restarting Servers +``` +Usage: rbxcloud universe restart --universe-id --api-key + +Options: + -u, --universe-id Universe ID + -a, --api-key Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=] + -h, --help Print help +``` + +### Example +``` +$ rbxcloud universe restart -u 12345 -a MY_KEY +``` diff --git a/mkdocs.yml b/mkdocs.yml index ee91bca..8cd43ee 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -16,6 +16,7 @@ nav: - Group: cli/cli-group.md - Subscription: cli/cli-subscription.md - Notification: cli/cli-notification.md + - Universe: cli/cli-universe.md - Rust Lib: - Install: lib/lib-install.md From 72642f581387fb2d904b016b1b4488083484cb22 Mon Sep 17 00:00:00 2001 From: Stephen Leitnick Date: Thu, 6 Jun 2024 13:06:12 -0400 Subject: [PATCH 6/7] Universes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 00967c6..b9fe87f 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Possible use-cases: | | API v2 (Beta) | | -- | -- | | :white_check_mark: | Groups | -| :x: | Universes | +| :white_check_mark: | Universes | | :x: | Places | | :x: | Instances | | :white_check_mark: | Subscriptions | From 262a4bade542f68637829a326e3391d069fa5037 Mon Sep 17 00:00:00 2001 From: Stephen Leitnick Date: Thu, 6 Jun 2024 13:09:07 -0400 Subject: [PATCH 7/7] Bump version --- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 4 ++-- docs/cli/cli-install.md | 4 ++-- docs/lib/lib-install.md | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0ca3807..a41ff87 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -660,7 +660,7 @@ dependencies = [ [[package]] name = "rbxcloud" -version = "0.10.0" +version = "0.11.0" dependencies = [ "anyhow", "base64 0.22.0", diff --git a/Cargo.toml b/Cargo.toml index fdbf967..01bed2e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rbxcloud" -version = "0.10.0" +version = "0.11.0" description = "CLI and SDK for the Roblox Open Cloud APIs" authors = ["Stephen Leitnick"] license = "MIT" diff --git a/README.md b/README.md index b9fe87f..188624b 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ The goal of this project is to support all API endpoints that Roblox provides. ### Aftman Run the `aftman add` command within your project directory. This will add `rbxcloud` to the project's `aftman.toml` file (or create one if it doesn't yet exist). ```sh -$ aftman add Sleitnick/rbxcloud@0.10.0 +$ aftman add Sleitnick/rbxcloud@0.11.0 ``` ### From Release @@ -61,7 +61,7 @@ The library built for the CLI tool is available to use directly in Rust projects To use `rbxcloud` in a Rust project, simply add `rbxcloud` to the `Cargo.toml` dependency list. ```toml [dependencies] -rbxcloud = "0.10.0" +rbxcloud = "0.11.0" ``` Alternatively, use `cargo add`. diff --git a/docs/cli/cli-install.md b/docs/cli/cli-install.md index 74dd0e8..4b821a4 100644 --- a/docs/cli/cli-install.md +++ b/docs/cli/cli-install.md @@ -7,7 +7,7 @@ There are a few different ways to install the `rbxcloud` CLI. ### [Aftman](https://github.com/LPGhatguy/aftman) (Preferred) Run the `aftman add` command within your project directory. This will add `rbxcloud` to the project's `aftman.toml` file (or create one if it doesn't yet exist). ```sh -$ aftman add Sleitnick/rbxcloud@0.10.0 +$ aftman add Sleitnick/rbxcloud@0.11.0 ``` Next, run `aftman install` to install `rbxcloud`. @@ -17,7 +17,7 @@ Add `rbxcloud` under the `[tools]` section of your `foreman.toml` file. ```toml # foreman.toml [tools] -rbxcloud = { github = "Sleitnick/rbxcloud", version = "0.10.0" } +rbxcloud = { github = "Sleitnick/rbxcloud", version = "0.11.0" } ``` Next, run `foreman install` to install `rbxcloud`. diff --git a/docs/lib/lib-install.md b/docs/lib/lib-install.md index 2d43994..68ac087 100644 --- a/docs/lib/lib-install.md +++ b/docs/lib/lib-install.md @@ -5,7 +5,7 @@ To use `rbxcloud` in a Rust project, simply add `rbxcloud` to the `Cargo.toml` dependency list. ```toml [dependencies] -rbxcloud = "0.10.0" +rbxcloud = "0.11.0" ``` Alternatively, use `cargo add`.