use crate::nats_types::UploadNewRequest; #[allow(dead_code)] #[derive(Debug)] pub enum UploadError{ Get(rbx_asset::cookie::GetError), Json(serde_json::Error), Create(rbx_asset::cookie::CreateError), SystemTime(std::time::SystemTimeError), ApiActionSubmissionUploaded(submissions_api::Error), } impl std::fmt::Display for UploadError{ fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{ write!(f,"{self:?}") } } impl std::error::Error for UploadError{} pub struct Uploader{ roblox_cookie:rbx_asset::cookie::CookieContext, group_id:Option<u64>, api:submissions_api::internal::Context, } impl Uploader{ pub const fn new( roblox_cookie:rbx_asset::cookie::CookieContext, group_id:Option<u64>, api:submissions_api::internal::Context, )->Self{ Self{ roblox_cookie, group_id, api, } } pub async fn upload(&self,upload_info:UploadNewRequest)->Result<(),UploadError>{ // download the map model version let model_data=self.roblox_cookie.get_asset(rbx_asset::cookie::GetAssetRequest{ asset_id:upload_info.ModelID, version:Some(upload_info.ModelVersion), }).await.map_err(UploadError::Get)?; // upload the map to the strafesnet group let upload_response=self.roblox_cookie.create(rbx_asset::cookie::CreateRequest{ name:upload_info.ModelName.clone(), description:"".to_owned(), ispublic:false, allowComments:false, groupId:self.group_id, },model_data).await.map_err(UploadError::Create)?; // note the asset id of the created model for later release, and mark the submission as uploaded self.api.action_submission_uploaded(submissions_api::types::ActionSubmissionUploadedRequest{ SubmissionID:upload_info.SubmissionID, TargetAssetID:Some(upload_response.AssetId), }).await.map_err(UploadError::ApiActionSubmissionUploaded)?; Ok(()) } }