use crate::nats_types::CreateSubmissionRequest; use crate::create::CreateRequest; use crate::rbx_util::GameID; #[allow(dead_code)] #[derive(Debug)] pub enum Error{ Create(crate::create::Error), ApiActionSubmissionCreate(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{ async fn create_submission_inner(&self,create_info:CreateSubmissionRequest)->Result<(),Error>{ let create_request=self.create_inner(CreateRequest{ ModelID:create_info.ModelID, }).await.map_err(Error::Create)?; // grab values from submission form, otherwise try to fill blanks from map data let display_name=if create_info.DisplayName.is_empty(){ create_request.DisplayName.as_deref().unwrap_or_default() }else{ create_info.DisplayName.as_str() }; let creator=if create_info.Creator.is_empty(){ create_request.Creator.as_deref().unwrap_or_default() }else{ create_info.Creator.as_str() }; let game_id=create_info.GameID.try_into().ok().or(create_request.GameID).unwrap_or(GameID::Bhop); // call create on api self.api.create_submission(submissions_api::types::CreateSubmissionRequest{ OperationID:create_info.OperationID, AssetOwner:create_request.AssetOwner as i64, DisplayName:display_name, Creator:creator, GameID:game_id as i32, AssetID:create_info.ModelID, AssetVersion:create_request.AssetVersion, }).await.map_err(Error::ApiActionSubmissionCreate)?; Ok(()) } pub async fn create_submission(&self,create_info:CreateSubmissionRequest)->Result<(),submissions_api::Error>{ let operation_id=create_info.OperationID; let create_result=self.create_submission_inner(create_info).await; if let Err(e)=create_result{ self.api.action_operation_failed(submissions_api::types::ActionOperationFailedRequest{ OperationID:operation_id, StatusMessage:e.to_string(), }).await?; } Ok(()) } }