diff --git a/validation/api/src/internal.rs b/validation/api/src/internal.rs index 990466d..0086767 100644 --- a/validation/api/src/internal.rs +++ b/validation/api/src/internal.rs @@ -3,12 +3,27 @@ use crate::types::*; #[derive(Clone)] pub struct Context(crate::context::Context); +// conditionally include specified query pairs +macro_rules! query_pairs{ + ($url:expr,)=>{ + $url + }; + ($url:expr,$(($param:expr,$value:expr))+)=>{ + { + let mut url=$url; + url.query_pairs_mut() + $(.append_pair($param,$value))*; + url + } + }; +} + // there are lots of action endpoints and they all follow the same pattern macro_rules! action{ - ($fname:ident,$action:expr)=>{ - pub async fn $fname(&self,config:SubmissionID)->Result<(),Error>{ - let url_raw=format!(concat!("{}/submissions/{}/status/",$action),self.0.base_url,config.0); - let url=reqwest::Url::parse(url_raw.as_str()).map_err(Error::Parse)?; + ($system:expr,$fname:ident,$config:ident,$config_type:ident,$action:expr,$config_submission_id:expr,$(($param:expr,$value:expr))*)=>{ + pub async fn $fname(&self,$config:$config_type)->Result<(),Error>{ + let url_raw=format!(concat!("{}/",$system,"/{}/status/",$action),self.0.base_url,$config_submission_id); + let url=query_pairs!(reqwest::Url::parse(url_raw.as_str()).map_err(Error::Parse)?,$(($param,$value))*); response_ok( self.0.post_empty_body(url).await.map_err(Error::Reqwest)? @@ -135,50 +150,16 @@ impl Context{ ).await.map_err(Error::Response)? .json().await.map_err(Error::ReqwestJson) } - pub async fn update_submission_validated_model(&self,config:UpdateSubmissionModelRequest)->Result<(),Error>{ - let url_raw=format!("{}/submissions/{}/validated-model",self.0.base_url,config.SubmissionID); - let mut url=reqwest::Url::parse(url_raw.as_str()).map_err(Error::Parse)?; - - { - url.query_pairs_mut() - .append_pair("ValidatedModelID",config.ModelID.to_string().as_str()) - .append_pair("ValidatedModelVersion",config.ModelVersion.to_string().as_str()); - } - - response_ok( - self.0.post_empty_body(url).await.map_err(Error::Reqwest)? - ).await.map_err(Error::Response)?; - - Ok(()) - } - pub async fn action_submission_uploaded(&self,config:ActionSubmissionUploadedRequest)->Result<(),Error>{ - let url_raw=format!("{}/submissions/{}/status/validator-uploaded",self.0.base_url,config.SubmissionID); - let mut url=reqwest::Url::parse(url_raw.as_str()).map_err(Error::Parse)?; - - { - url.query_pairs_mut() - .append_pair("UploadedAssetID",config.UploadedAssetID.to_string().as_str()); - } - response_ok( - self.0.post_empty_body(url).await.map_err(Error::Reqwest)? - ).await.map_err(Error::Response)?; - - Ok(()) - } - pub async fn action_submission_accepted(&self,config:ActionSubmissionAcceptedRequest)->Result<(),Error>{ - let url_raw=format!("{}/submissions/{}/status/validator-failed",self.0.base_url,config.SubmissionID); - let mut url=reqwest::Url::parse(url_raw.as_str()).map_err(Error::Parse)?; - - { - url.query_pairs_mut() - .append_pair("StatusMessage",config.StatusMessage.as_str()); - } - - response_ok( - self.0.post_empty_body(url).await.map_err(Error::Reqwest)? - ).await.map_err(Error::Response)?; - - Ok(()) - } - action!(action_submission_validated,"validator-validated"); + // simple submission endpoints + action!("submissions",action_submission_validated,config,SubmissionID,"validator-validated",config.0,); + action!("submissions",update_submission_validated_model,config,UpdateSubmissionModelRequest,"validated-model",config.SubmissionID, + ("ValidatedModelID",config.ModelID.to_string().as_str()) + ("ValidatedModelVersion",config.ModelVersion.to_string().as_str()) + ); + action!("submissions",action_submission_uploaded,config,ActionSubmissionUploadedRequest,"validator-uploaded",config.SubmissionID, + ("UploadedAssetID",config.UploadedAssetID.to_string().as_str()) + ); + action!("submissions",action_submission_accepted,config,ActionSubmissionAcceptedRequest,"validator-failed",config.SubmissionID, + ("StatusMessage",config.StatusMessage.as_str()) + ); }