From 5a4ac0e7f2b6567a1048f846034423b4a038336c Mon Sep 17 00:00:00 2001
From: Quaternions <krakow20@gmail.com>
Date: Thu, 3 Apr 2025 16:13:45 -0700
Subject: [PATCH] rbx_asset: include asset version in UploadResponse

---
 rbx_asset/src/cookie.rs | 35 +++++++++++++++++++++++++++++++----
 1 file changed, 31 insertions(+), 4 deletions(-)

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,