diff --git a/rbx_asset/src/cookie.rs b/rbx_asset/src/cookie.rs index 00b22ed..f09223d 100644 --- a/rbx_asset/src/cookie.rs +++ b/rbx_asset/src/cookie.rs @@ -31,6 +31,8 @@ pub enum CreateError{ response:String, err:std::num::ParseIntError, }, + VersionHeaderMissing, + ToStr(reqwest::header::ToStrError), } impl std::fmt::Display for CreateError{ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { @@ -59,6 +61,8 @@ pub enum UploadError{ response:String, err:std::num::ParseIntError, }, + VersionHeaderMissing, + ToStr(reqwest::header::ToStrError), } impl std::fmt::Display for UploadError{ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { @@ -70,6 +74,7 @@ impl std::error::Error for UploadError{} #[allow(nonstandard_style,dead_code)] pub struct UploadResponse{ pub AssetId:u64, + pub AssetVersion:u64, } #[allow(nonstandard_style,dead_code)] @@ -387,12 +392,23 @@ impl CookieContext{ } let response=crate::response_ok( self.post(url,body).await.map_err(CreateError::PostError)? - ).await.map_err(CreateError::Response)? - .text().await.map_err(CreateError::Reqwest)?; + ).await.map_err(CreateError::Response)?; + + let version_str=response + .headers() + .get("roblox-assetversionnumber") + .ok_or(CreateError::VersionHeaderMissing)? + .to_str() + .map_err(CreateError::ToStr)?; + let version=version_str.parse() + .map_err(|err|CreateError::ParseInt{err,response:version_str.to_owned()})?; + + let response=response.text().await.map_err(CreateError::Reqwest)?; match response.parse(){ Ok(asset_id)=>Ok(UploadResponse{ AssetId:asset_id, + AssetVersion:version, }), Err(err)=>Err(CreateError::ParseInt{ response, @@ -428,12 +444,23 @@ impl CookieContext{ } let response=crate::response_ok( self.post(url,body).await.map_err(UploadError::PostError)? - ).await.map_err(UploadError::Response)? - .text().await.map_err(UploadError::Reqwest)?; + ).await.map_err(UploadError::Response)?; + + let version_str=response + .headers() + .get("roblox-assetversionnumber") + .ok_or(UploadError::VersionHeaderMissing)? + .to_str() + .map_err(UploadError::ToStr)?; + let version=version_str.parse() + .map_err(|err|UploadError::ParseInt{err,response:version_str.to_owned()})?; + + let response=response.text().await.map_err(UploadError::Reqwest)?; match response.parse(){ Ok(asset_id)=>Ok(UploadResponse{ AssetId:asset_id, + AssetVersion:version, }), Err(err)=>Err(UploadError::ParseInt{ response,