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)]
#[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(())

@ -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(())

@ -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),