validation: catch final error

This commit is contained in:
Quaternions 2025-04-03 13:43:43 -07:00
parent 5e633721c8
commit f838b26a3a
Signed by: Quaternions
GPG Key ID: D0DF5964F79AC131
3 changed files with 57 additions and 49 deletions

@ -4,8 +4,8 @@ use crate::create::CreateRequest;
#[allow(dead_code)] #[allow(dead_code)]
#[derive(Debug)] #[derive(Debug)]
pub enum Error{ pub enum Error{
Create(crate::create::Error),
ApiActionMapfixCreate(submissions_api::Error), ApiActionMapfixCreate(submissions_api::Error),
ApiActionOperationFailed(submissions_api::Error),
} }
impl std::fmt::Display for Error{ impl std::fmt::Display for Error{
fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{ 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 std::error::Error for Error{}
impl crate::message_handler::MessageHandler{ impl crate::message_handler::MessageHandler{
pub async fn create_mapfix(&self,create_info:CreateMapfixRequest)->Result<(),Error>{ async fn create_mapfix_inner(&self,create_info:CreateMapfixRequest)->Result<(),Error>{
let create_result=self.create_inner(CreateRequest{ // call deduplicated inner code
let create_request=self.create_inner(CreateRequest{
ModelID:create_info.ModelID, ModelID:create_info.ModelID,
}).await; }).await.map_err(Error::Create)?;
match create_result{ // call create on api
Ok(create_request)=>{ self.api.create_mapfix(submissions_api::types::CreateMapfixRequest{
// call create on api OperationID:create_info.OperationID,
self.api.create_mapfix(submissions_api::types::CreateMapfixRequest{ AssetOwner:create_request.AssetOwner,
OperationID:create_info.OperationID, DisplayName:create_request.DisplayName.as_str(),
AssetOwner:create_request.AssetOwner, Creator:create_request.Creator.as_str(),
DisplayName:create_request.DisplayName.as_str(), GameID:create_request.GameID,
Creator:create_request.Creator.as_str(), AssetID:create_info.ModelID,
GameID:create_request.GameID, AssetVersion:create_request.AssetVersion,
AssetID:create_info.ModelID, TargetAssetID:create_info.TargetAssetID,
AssetVersion:create_request.AssetVersion, }).await.map_err(Error::ApiActionMapfixCreate)?;
TargetAssetID:create_info.TargetAssetID,
}).await.map_err(Error::ApiActionMapfixCreate)?; Ok(())
}, }
Err(e)=>{ pub async fn create_mapfix(&self,create_info:CreateMapfixRequest)->Result<(),submissions_api::Error>{
self.api.action_operation_failed(submissions_api::types::ActionOperationFailedRequest{ let operation_id=create_info.OperationID;
OperationID:create_info.OperationID,
StatusMessage:format!("{e}"), let create_result=self.create_mapfix_inner(create_info).await;
}).await.map_err(Error::ApiActionOperationFailed)?;
}, if let Err(e)=create_result{
self.api.action_operation_failed(submissions_api::types::ActionOperationFailedRequest{
OperationID:operation_id,
StatusMessage:format!("{e}"),
}).await?;
} }
Ok(()) Ok(())

@ -4,8 +4,8 @@ use crate::create::CreateRequest;
#[allow(dead_code)] #[allow(dead_code)]
#[derive(Debug)] #[derive(Debug)]
pub enum Error{ pub enum Error{
Create(crate::create::Error),
ApiActionSubmissionCreate(submissions_api::Error), ApiActionSubmissionCreate(submissions_api::Error),
ApiActionOperationFailed(submissions_api::Error),
} }
impl std::fmt::Display for Error{ impl std::fmt::Display for Error{
fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{ 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 std::error::Error for Error{}
impl crate::message_handler::MessageHandler{ impl crate::message_handler::MessageHandler{
pub async fn create_submission(&self,create_info:CreateSubmissionRequest)->Result<(),Error>{ async fn create_submission_inner(&self,create_info:CreateSubmissionRequest)->Result<(),Error>{
let create_result=self.create_inner(CreateRequest{ let create_request=self.create_inner(CreateRequest{
ModelID:create_info.ModelID, 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(())
Ok(create_request)=>{ }
// call create on api pub async fn create_submission(&self,create_info:CreateSubmissionRequest)->Result<(),submissions_api::Error>{
self.api.create_submission(submissions_api::types::CreateSubmissionRequest{ let operation_id=create_info.OperationID;
OperationID:create_info.OperationID,
AssetOwner:create_request.AssetOwner, let create_result=self.create_submission_inner(create_info).await;
DisplayName:create_request.DisplayName.as_str(),
Creator:create_request.Creator.as_str(), if let Err(e)=create_result{
GameID:create_request.GameID, self.api.action_operation_failed(submissions_api::types::ActionOperationFailedRequest{
AssetID:create_info.ModelID, OperationID:operation_id,
AssetVersion:create_request.AssetVersion, StatusMessage:format!("{e}"),
}).await.map_err(Error::ApiActionSubmissionCreate)?; }).await?;
},
Err(e)=>{
self.api.action_operation_failed(submissions_api::types::ActionOperationFailedRequest{
OperationID:create_info.OperationID,
StatusMessage:format!("{e}"),
}).await.map_err(Error::ApiActionOperationFailed)?;
},
} }
Ok(()) Ok(())

@ -5,8 +5,8 @@ pub enum HandleMessageError{
DoubleAck(async_nats::Error), DoubleAck(async_nats::Error),
Json(serde_json::Error), Json(serde_json::Error),
UnknownSubject(String), UnknownSubject(String),
CreateMapfix(crate::create_mapfix::Error), CreateMapfix(submissions_api::Error),
CreateSubmission(crate::create_submission::Error), CreateSubmission(submissions_api::Error),
UploadMapfix(crate::upload_mapfix::Error), UploadMapfix(crate::upload_mapfix::Error),
UploadSubmission(crate::upload_submission::Error), UploadSubmission(crate::upload_submission::Error),
ValidateMapfix(crate::validate_mapfix::Error), ValidateMapfix(crate::validate_mapfix::Error),