use crate::download::download_asset_version; use crate::nats_types::UploadMapfixRequest; #[allow(dead_code)] #[derive(Debug)] pub enum Error{ Download(crate::download::Error), IO(std::io::Error), Json(serde_json::Error), Upload(rbx_asset::cookie::UploadError), ApiActionMapfixUploaded(submissions_api::Error), } impl std::fmt::Display for Error{ fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{ write!(f,"{self:?}") } } impl std::error::Error for Error{} impl crate::message_handler::MessageHandler{ pub async fn upload_mapfix(&self,upload_info:UploadMapfixRequest)->Result<(),Error>{ // download the map model let maybe_gzip=download_asset_version(&self.cloud_context,rbx_asset::cloud::GetAssetVersionRequest{ asset_id:upload_info.ModelID, version:upload_info.ModelVersion, }).await.map_err(Error::Download)?; // transparently handle gzipped models let model_data=maybe_gzip.to_vec().map_err(Error::IO)?; // upload the map to the strafesnet group let _upload_response=self.cookie_context.upload(rbx_asset::cookie::UploadRequest{ assetid:upload_info.TargetAssetID, groupId:self.group_id, name:None, description:None, ispublic:None, allowComments:None, },model_data).await.map_err(Error::Upload)?; // that's it, the database entry does not need to be changed. // mark mapfix as uploaded, TargetAssetID is unchanged self.api.action_mapfix_uploaded(submissions_api::types::ActionMapfixUploadedRequest{ MapfixID:upload_info.MapfixID, }).await.map_err(Error::ApiActionMapfixUploaded)?; Ok(()) } }