diff --git a/submissions-api-rs/src/external.rs b/submissions-api-rs/src/external.rs index 0979faf..fd540ae 100644 --- a/submissions-api-rs/src/external.rs +++ b/submissions-api-rs/src/external.rs @@ -152,6 +152,48 @@ impl Context{ Ok(()) } + pub async fn get_mapfixes(&self,config:GetMapfixesRequest<'_>)->Result{ + let url_raw=format!("{}/mapfixes",self.0.base_url); + let mut url=reqwest::Url::parse(url_raw.as_str()).map_err(Error::Parse)?; + + { + let mut query_pairs=url.query_pairs_mut(); + query_pairs.append_pair("Page",config.Page.to_string().as_str()); + query_pairs.append_pair("Limit",config.Limit.to_string().as_str()); + if let Some(sort)=config.Sort{ + query_pairs.append_pair("Sort",(sort as u8).to_string().as_str()); + } + if let Some(display_name)=config.DisplayName{ + query_pairs.append_pair("DisplayName",display_name); + } + if let Some(creator)=config.Creator{ + query_pairs.append_pair("Creator",creator); + } + if let Some(game_id)=config.GameID{ + query_pairs.append_pair("GameID",(game_id as u8).to_string().as_str()); + } + if let Some(submitter)=config.Submitter{ + query_pairs.append_pair("Submitter",submitter.to_string().as_str()); + } + if let Some(asset_id)=config.AssetID{ + query_pairs.append_pair("AssetID",asset_id.to_string().as_str()); + } + if let Some(asset_version)=config.AssetVersion{ + query_pairs.append_pair("AssetVersion",asset_version.to_string().as_str()); + } + if let Some(uploaded_asset_id)=config.TargetAssetID{ + query_pairs.append_pair("TargetAssetID",uploaded_asset_id.to_string().as_str()); + } + if let Some(status_id)=config.StatusID{ + query_pairs.append_pair("StatusID",(status_id as u8).to_string().as_str()); + } + } + + response_ok( + self.0.get(url).await.map_err(Error::Reqwest)? + ).await.map_err(Error::Response)? + .json().await.map_err(Error::ReqwestJson) + } pub async fn get_submissions(&self,config:GetSubmissionsRequest<'_>)->Result{ let url_raw=format!("{}/submissions",self.0.base_url); let mut url=reqwest::Url::parse(url_raw.as_str()).map_err(Error::Parse)?; diff --git a/submissions-api-rs/src/types.rs b/submissions-api-rs/src/types.rs index f4dbc38..5eef392 100644 --- a/submissions-api-rs/src/types.rs +++ b/submissions-api-rs/src/types.rs @@ -252,6 +252,73 @@ pub enum Sort{ DateDescending=4, } +#[derive(Clone,Debug,serde_repr::Serialize_repr,serde_repr::Deserialize_repr)] +#[repr(u8)] +pub enum MapfixStatus{ + // Phase: Creation + UnderConstruction=0, + ChangesRequested=1, + + // Phase: Review + Submitting=2, + Submitted=3, + + // Phase: Testing + AcceptedUnvalidated=4, // pending script review, can re-trigger validation + Validating=5, + Validated=6, + Uploading=7, + Uploaded=8, // uploaded to the group, but pending release + Releasing=11, + + // Phase: Final MapfixStatus + Rejected=9, + Released=10, +} + +#[allow(nonstandard_style)] +#[derive(Clone,Debug)] +pub struct GetMapfixesRequest<'a>{ + pub Page:u32, + pub Limit:u32, + pub Sort:Option, + pub DisplayName:Option<&'a str>, + pub Creator:Option<&'a str>, + pub GameID:Option, + pub Submitter:Option, + pub AssetID:Option, + pub AssetVersion:Option, + pub TargetAssetID:Option, + pub StatusID:Option, +} + +#[allow(nonstandard_style)] +#[derive(Clone,Debug,serde::Serialize,serde::Deserialize)] +pub struct MapfixResponse{ + pub ID:MapfixID, + pub DisplayName:String, + pub Creator:String, + pub GameID:u32, + pub CreatedAt:i64, + pub UpdatedAt:i64, + pub Submitter:u64, + pub AssetID:u64, + pub AssetVersion:u64, + pub ValidatedAssetID:u64, + pub ValidatedAssetVersion:u64, + pub Completed:bool, + pub TargetAssetID:u64, + pub StatusID:MapfixStatus, + pub Description:String, +} + +#[allow(nonstandard_style)] +#[derive(Clone,Debug,serde::Deserialize)] +pub struct MapfixesResponse{ + pub Total:u64, + pub Mapfixes:Vec, +} + #[derive(Clone,Debug,serde_repr::Deserialize_repr)] #[repr(u8)] pub enum SubmissionStatus{