From 16f2a674c0a9527581be6087338fb9270b4270fe Mon Sep 17 00:00:00 2001 From: Quaternions <krakow20@gmail.com> Date: Thu, 10 Apr 2025 15:44:16 -0700 Subject: [PATCH] rbx_asset: move code into util --- rbx_asset/src/cloud.rs | 25 +++++++++++----------- rbx_asset/src/cookie.rs | 20 +++++++++--------- rbx_asset/src/lib.rs | 47 ----------------------------------------- rbx_asset/src/util.rs | 47 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 70 deletions(-) diff --git a/rbx_asset/src/cloud.rs b/rbx_asset/src/cloud.rs index bdc5fd1..9965e13 100644 --- a/rbx_asset/src/cloud.rs +++ b/rbx_asset/src/cloud.rs @@ -1,5 +1,4 @@ -use crate::util::{serialize_u64,deserialize_u64}; -use crate::{ResponseError,maybe_gzip_decode}; +use crate::util::{serialize_u64,deserialize_u64,response_ok,ResponseError,maybe_gzip_decode}; #[derive(Debug,serde::Deserialize,serde::Serialize)] #[allow(nonstandard_style,dead_code)] @@ -381,7 +380,7 @@ impl Context{ .text("request",request_config) .part("fileContent",part); - let operation=crate::response_ok( + let operation=response_ok( self.post_form(url,form).await.map_err(CreateError::Reqwest)? ).await.map_err(CreateError::Response)? .json::<RobloxOperation>().await.map_err(CreateError::Reqwest)?; @@ -400,7 +399,7 @@ impl Context{ .text("request",request_config) .part("fileContent",reqwest::multipart::Part::bytes(body)); - let operation=crate::response_ok( + let operation=response_ok( self.patch_form(url,form).await.map_err(UpdateError::Reqwest)? ).await.map_err(UpdateError::Response)? .json::<RobloxOperation>().await.map_err(UpdateError::Reqwest)?; @@ -413,7 +412,7 @@ impl Context{ let raw_url=format!("https://apis.roblox.com/assets/v1/operations/{}",config.operation_id); let url=reqwest::Url::parse(raw_url.as_str()).map_err(GetError::ParseError)?; - crate::response_ok( + response_ok( self.get(url).await.map_err(GetError::Reqwest)? ).await.map_err(GetError::Response)? .json::<RobloxOperation>().await.map_err(GetError::Reqwest) @@ -422,7 +421,7 @@ impl Context{ let raw_url=format!("https://apis.roblox.com/assets/v1/assets/{}",config.asset_id); let url=reqwest::Url::parse(raw_url.as_str()).map_err(GetError::ParseError)?; - crate::response_ok( + response_ok( self.get(url).await.map_err(GetError::Reqwest)? ).await.map_err(GetError::Response)? .json::<AssetResponse>().await.map_err(GetError::Reqwest) @@ -431,7 +430,7 @@ impl Context{ let raw_url=format!("https://apis.roblox.com/assets/v1/assets/{}/versions/{}",config.asset_id,config.version); let url=reqwest::Url::parse(raw_url.as_str()).map_err(GetError::ParseError)?; - crate::response_ok( + response_ok( self.get(url).await.map_err(GetError::Reqwest)? ).await.map_err(GetError::Response)? .json::<AssetResponse>().await.map_err(GetError::Reqwest) @@ -440,7 +439,7 @@ impl Context{ let raw_url=format!("https://apis.roblox.com/asset-delivery-api/v1/assetId/{}",config.asset_id); let url=reqwest::Url::parse(raw_url.as_str()).map_err(GetError::ParseError)?; - crate::response_ok( + response_ok( self.get(url).await.map_err(GetError::Reqwest)? ).await.map_err(GetError::Response)? .json().await.map_err(GetError::Reqwest) @@ -449,7 +448,7 @@ impl Context{ let raw_url=format!("https://apis.roblox.com/asset-delivery-api/v1/assetId/{}/version/{}",config.asset_id,config.version); let url=reqwest::Url::parse(raw_url.as_str()).map_err(GetError::ParseError)?; - crate::response_ok( + response_ok( self.get(url).await.map_err(GetError::Reqwest)? ).await.map_err(GetError::Response)? .json().await.map_err(GetError::Reqwest) @@ -457,7 +456,7 @@ impl Context{ pub async fn get_asset(&self,config:&AssetLocation)->Result<Vec<u8>,GetError>{ let url=reqwest::Url::parse(config.location()).map_err(GetError::ParseError)?; - let body=crate::response_ok( + let body=response_ok( self.get(url).await.map_err(GetError::Reqwest)? ).await.map_err(GetError::Response)? .bytes().await.map_err(GetError::Reqwest)?; @@ -468,7 +467,7 @@ impl Context{ let raw_url=format!("https://apis.roblox.com/assets/v1/assets/{}/versions",config.asset_id); let url=reqwest::Url::parse(raw_url.as_str()).map_err(AssetVersionsError::ParseError)?; - crate::response_ok( + response_ok( self.get(url).await.map_err(AssetVersionsError::Reqwest)? ).await.map_err(AssetVersionsError::Response)? .json::<AssetVersionsResponse>().await.map_err(AssetVersionsError::Reqwest) @@ -483,7 +482,7 @@ impl Context{ } } - crate::response_ok( + response_ok( self.get(url).await.map_err(InventoryPageError::Reqwest)? ).await.map_err(InventoryPageError::Response)? .json::<InventoryPageResponse>().await.map_err(InventoryPageError::Reqwest) @@ -497,7 +496,7 @@ impl Context{ query.append_pair("versionType","Published"); } - crate::response_ok( + response_ok( self.post(url,body).await.map_err(UpdateError::Reqwest)? ).await.map_err(UpdateError::Response)? .json::<UpdatePlaceResponse>().await.map_err(UpdateError::Reqwest) diff --git a/rbx_asset/src/cookie.rs b/rbx_asset/src/cookie.rs index 5ba4532..34e83e7 100644 --- a/rbx_asset/src/cookie.rs +++ b/rbx_asset/src/cookie.rs @@ -1,4 +1,4 @@ -use crate::{ResponseError,maybe_gzip_decode}; +use crate::util::{response_ok,ResponseError,maybe_gzip_decode}; #[derive(Debug)] pub enum PostError{ @@ -371,7 +371,7 @@ impl Context{ query.append_pair("groupId",group_id.to_string().as_str()); } } - let response=crate::response_ok( + let response=response_ok( self.post(url,body).await.map_err(CreateError::PostError)? ).await.map_err(CreateError::Response)?; @@ -423,7 +423,7 @@ impl Context{ query.append_pair("groupId",group_id.to_string().as_str()); } } - let response=crate::response_ok( + let response=response_ok( self.post(url,body).await.map_err(UploadError::PostError)? ).await.map_err(UploadError::Response)?; @@ -459,7 +459,7 @@ impl Context{ query.append_pair("version",version.to_string().as_str()); } } - let body=crate::response_ok( + let body=response_ok( self.get(url).await.map_err(GetError::Reqwest)? ).await.map_err(GetError::Response)? .bytes().await.map_err(GetError::Reqwest)?; @@ -477,7 +477,7 @@ impl Context{ query.append_pair("version",version.to_string().as_str()); } } - let response=crate::response_ok( + let response=response_ok( self.get(url).await.map_err(GetAssetV2Error::Reqwest)? ).await.map_err(GetAssetV2Error::Response)?; @@ -500,7 +500,7 @@ impl Context{ pub async fn get_asset_v2_download(&self,config:&GetAssetV2Location)->Result<Vec<u8>,GetError>{ let url=reqwest::Url::parse(config.location.as_str()).map_err(GetError::ParseError)?; - let body=crate::response_ok( + let body=response_ok( self.get(url).await.map_err(GetError::Reqwest)? ).await.map_err(GetError::Response)? .bytes().await.map_err(GetError::Reqwest)?; @@ -509,7 +509,7 @@ impl Context{ } pub async fn get_asset_details(&self,config:GetAssetDetailsRequest)->Result<AssetDetails,GetError>{ let url=reqwest::Url::parse(format!("https://economy.roblox.com/v2/assets/{}/details",config.asset_id).as_str()).map_err(GetError::ParseError)?; - crate::response_ok( + response_ok( self.get(url).await.map_err(GetError::Reqwest)? ).await.map_err(GetError::Response)? .json().await.map_err(GetError::Reqwest) @@ -526,7 +526,7 @@ impl Context{ query.append_pair("cursor",cursor); } } - crate::response_ok( + response_ok( self.get(url).await.map_err(PageError::Reqwest)? ).await.map_err(PageError::Response)? .json::<AssetVersionsPageResponse>().await.map_err(PageError::Reqwest) @@ -541,7 +541,7 @@ impl Context{ query.append_pair("cursor",cursor); } } - crate::response_ok( + response_ok( self.get(url).await.map_err(PageError::Reqwest)? ).await.map_err(PageError::Response)? .json::<CreationsPageResponse>().await.map_err(PageError::Reqwest) @@ -555,7 +555,7 @@ impl Context{ query.append_pair("cursor",cursor); } } - crate::response_ok( + response_ok( self.get(url).await.map_err(PageError::Reqwest)? ).await.map_err(PageError::Response)? .json::<UserInventoryPageResponse>().await.map_err(PageError::Reqwest) diff --git a/rbx_asset/src/lib.rs b/rbx_asset/src/lib.rs index 7a5274a..6cd6619 100644 --- a/rbx_asset/src/lib.rs +++ b/rbx_asset/src/lib.rs @@ -1,50 +1,3 @@ pub mod cloud; pub mod cookie; mod util; - -#[allow(dead_code)] -#[derive(Debug)] -pub struct StatusCodeWithUrlAndBody{ - pub status_code:reqwest::StatusCode, - pub url:url::Url, - pub body:String, -} -#[derive(Debug)] -pub enum ResponseError{ - Reqwest(reqwest::Error), - StatusCodeWithUrlAndBody(StatusCodeWithUrlAndBody), -} -impl std::fmt::Display for ResponseError{ - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f,"{self:?}") - } -} -impl std::error::Error for ResponseError{} -// lazy function to draw out meaningful info from http response on failure -pub(crate) async fn response_ok(response:reqwest::Response)->Result<reqwest::Response,ResponseError>{ - let status_code=response.status(); - if status_code.is_success(){ - Ok(response) - }else{ - let url=response.url().to_owned(); - let bytes=response.bytes().await.map_err(ResponseError::Reqwest)?; - let body=String::from_utf8_lossy(&bytes).to_string(); - Err(ResponseError::StatusCodeWithUrlAndBody(StatusCodeWithUrlAndBody{ - status_code, - url, - body, - })) - } -} - -pub(crate) fn maybe_gzip_decode(data:bytes::Bytes)->std::io::Result<Vec<u8>>{ - match data.get(0..2){ - Some(b"\x1f\x8b")=>{ - use std::io::Read; - let mut buf=Vec::new(); - flate2::read::GzDecoder::new(std::io::Cursor::new(data)).read_to_end(&mut buf)?; - Ok(buf) - }, - _=>Ok(data.to_vec()), - } -} diff --git a/rbx_asset/src/util.rs b/rbx_asset/src/util.rs index 9bc7d4d..523743e 100644 --- a/rbx_asset/src/util.rs +++ b/rbx_asset/src/util.rs @@ -1,3 +1,50 @@ +#[allow(dead_code)] +#[derive(Debug)] +pub struct StatusCodeWithUrlAndBody{ + pub status_code:reqwest::StatusCode, + pub url:url::Url, + pub body:String, +} +#[derive(Debug)] +pub enum ResponseError{ + Reqwest(reqwest::Error), + StatusCodeWithUrlAndBody(StatusCodeWithUrlAndBody), +} +impl std::fmt::Display for ResponseError{ + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f,"{self:?}") + } +} +impl std::error::Error for ResponseError{} +// lazy function to draw out meaningful info from http response on failure +pub(crate) async fn response_ok(response:reqwest::Response)->Result<reqwest::Response,ResponseError>{ + let status_code=response.status(); + if status_code.is_success(){ + Ok(response) + }else{ + let url=response.url().to_owned(); + let bytes=response.bytes().await.map_err(ResponseError::Reqwest)?; + let body=String::from_utf8_lossy(&bytes).to_string(); + Err(ResponseError::StatusCodeWithUrlAndBody(StatusCodeWithUrlAndBody{ + status_code, + url, + body, + })) + } +} + +pub(crate) fn maybe_gzip_decode(data:bytes::Bytes)->std::io::Result<Vec<u8>>{ + match data.get(0..2){ + Some(b"\x1f\x8b")=>{ + use std::io::Read; + let mut buf=Vec::new(); + flate2::read::GzDecoder::new(std::io::Cursor::new(data)).read_to_end(&mut buf)?; + Ok(buf) + }, + _=>Ok(data.to_vec()), + } +} + use serde::de::{Error,Unexpected}; use serde::{Deserializer,Serializer};