From f838b26a3a1a9d7f795e50e593df234ff78f80f2 Mon Sep 17 00:00:00 2001 From: Quaternions <krakow20@gmail.com> Date: Thu, 3 Apr 2025 13:43:43 -0700 Subject: [PATCH] validation: catch final error --- validation/src/create_mapfix.rs | 53 ++++++++++++++++------------- validation/src/create_submission.rs | 49 +++++++++++++------------- validation/src/message_handler.rs | 4 +-- 3 files changed, 57 insertions(+), 49 deletions(-) diff --git a/validation/src/create_mapfix.rs b/validation/src/create_mapfix.rs index 6dbe905..982fd91 100644 --- a/validation/src/create_mapfix.rs +++ b/validation/src/create_mapfix.rs @@ -4,8 +4,8 @@ use crate::create::CreateRequest; #[allow(dead_code)] #[derive(Debug)] pub enum Error{ + Create(crate::create::Error), ApiActionMapfixCreate(submissions_api::Error), - ApiActionOperationFailed(submissions_api::Error), } impl std::fmt::Display for Error{ fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{ @@ -15,31 +15,36 @@ impl std::fmt::Display for Error{ impl std::error::Error for Error{} impl crate::message_handler::MessageHandler{ - pub async fn create_mapfix(&self,create_info:CreateMapfixRequest)->Result<(),Error>{ - let create_result=self.create_inner(CreateRequest{ + async fn create_mapfix_inner(&self,create_info:CreateMapfixRequest)->Result<(),Error>{ + // call deduplicated inner code + let create_request=self.create_inner(CreateRequest{ ModelID:create_info.ModelID, - }).await; + }).await.map_err(Error::Create)?; - match create_result{ - Ok(create_request)=>{ - // call create on api - self.api.create_mapfix(submissions_api::types::CreateMapfixRequest{ - OperationID:create_info.OperationID, - AssetOwner:create_request.AssetOwner, - DisplayName:create_request.DisplayName.as_str(), - Creator:create_request.Creator.as_str(), - GameID:create_request.GameID, - AssetID:create_info.ModelID, - AssetVersion:create_request.AssetVersion, - TargetAssetID:create_info.TargetAssetID, - }).await.map_err(Error::ApiActionMapfixCreate)?; - }, - Err(e)=>{ - self.api.action_operation_failed(submissions_api::types::ActionOperationFailedRequest{ - OperationID:create_info.OperationID, - StatusMessage:format!("{e}"), - }).await.map_err(Error::ApiActionOperationFailed)?; - }, + // call create on api + self.api.create_mapfix(submissions_api::types::CreateMapfixRequest{ + OperationID:create_info.OperationID, + AssetOwner:create_request.AssetOwner, + DisplayName:create_request.DisplayName.as_str(), + Creator:create_request.Creator.as_str(), + GameID:create_request.GameID, + AssetID:create_info.ModelID, + AssetVersion:create_request.AssetVersion, + TargetAssetID:create_info.TargetAssetID, + }).await.map_err(Error::ApiActionMapfixCreate)?; + + Ok(()) + } + pub async fn create_mapfix(&self,create_info:CreateMapfixRequest)->Result<(),submissions_api::Error>{ + let operation_id=create_info.OperationID; + + let create_result=self.create_mapfix_inner(create_info).await; + + if let Err(e)=create_result{ + self.api.action_operation_failed(submissions_api::types::ActionOperationFailedRequest{ + OperationID:operation_id, + StatusMessage:format!("{e}"), + }).await?; } Ok(()) diff --git a/validation/src/create_submission.rs b/validation/src/create_submission.rs index 31f2a0e..4949366 100644 --- a/validation/src/create_submission.rs +++ b/validation/src/create_submission.rs @@ -4,8 +4,8 @@ use crate::create::CreateRequest; #[allow(dead_code)] #[derive(Debug)] pub enum Error{ + Create(crate::create::Error), ApiActionSubmissionCreate(submissions_api::Error), - ApiActionOperationFailed(submissions_api::Error), } impl std::fmt::Display for Error{ fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{ @@ -15,30 +15,33 @@ impl std::fmt::Display for Error{ impl std::error::Error for Error{} impl crate::message_handler::MessageHandler{ - pub async fn create_submission(&self,create_info:CreateSubmissionRequest)->Result<(),Error>{ - let create_result=self.create_inner(CreateRequest{ + async fn create_submission_inner(&self,create_info:CreateSubmissionRequest)->Result<(),Error>{ + let create_request=self.create_inner(CreateRequest{ ModelID:create_info.ModelID, - }).await; + }).await.map_err(Error::Create)?; + // call create on api + self.api.create_submission(submissions_api::types::CreateSubmissionRequest{ + OperationID:create_info.OperationID, + AssetOwner:create_request.AssetOwner, + DisplayName:create_request.DisplayName.as_str(), + Creator:create_request.Creator.as_str(), + GameID:create_request.GameID, + AssetID:create_info.ModelID, + AssetVersion:create_request.AssetVersion, + }).await.map_err(Error::ApiActionSubmissionCreate)?; - match create_result{ - Ok(create_request)=>{ - // call create on api - self.api.create_submission(submissions_api::types::CreateSubmissionRequest{ - OperationID:create_info.OperationID, - AssetOwner:create_request.AssetOwner, - DisplayName:create_request.DisplayName.as_str(), - Creator:create_request.Creator.as_str(), - GameID:create_request.GameID, - AssetID:create_info.ModelID, - AssetVersion:create_request.AssetVersion, - }).await.map_err(Error::ApiActionSubmissionCreate)?; - }, - Err(e)=>{ - self.api.action_operation_failed(submissions_api::types::ActionOperationFailedRequest{ - OperationID:create_info.OperationID, - StatusMessage:format!("{e}"), - }).await.map_err(Error::ApiActionOperationFailed)?; - }, + 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:format!("{e}"), + }).await?; } Ok(()) diff --git a/validation/src/message_handler.rs b/validation/src/message_handler.rs index bff0f10..fe79ee5 100644 --- a/validation/src/message_handler.rs +++ b/validation/src/message_handler.rs @@ -5,8 +5,8 @@ pub enum HandleMessageError{ DoubleAck(async_nats::Error), Json(serde_json::Error), UnknownSubject(String), - CreateMapfix(crate::create_mapfix::Error), - CreateSubmission(crate::create_submission::Error), + CreateMapfix(submissions_api::Error), + CreateSubmission(submissions_api::Error), UploadMapfix(crate::upload_mapfix::Error), UploadSubmission(crate::upload_submission::Error), ValidateMapfix(crate::validate_mapfix::Error),