validator: allow create without valid metadata
This commit is contained in:
parent
e8fb2d2f3a
commit
d00fbf5fa8
@ -1,5 +1,5 @@
|
|||||||
use crate::download::download_asset_version;
|
use crate::download::download_asset_version;
|
||||||
use crate::rbx_util::{get_root_instance,get_mapinfo,read_dom,MapInfo,ReadDomError,GetRootInstanceError,ParseGameIDError};
|
use crate::rbx_util::{get_root_instance,get_mapinfo,read_dom,MapInfo,ReadDomError,GetRootInstanceError,GameID};
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@ -9,7 +9,6 @@ pub enum Error{
|
|||||||
Download(crate::download::Error),
|
Download(crate::download::Error),
|
||||||
ModelFileDecode(ReadDomError),
|
ModelFileDecode(ReadDomError),
|
||||||
GetRootInstance(GetRootInstanceError),
|
GetRootInstance(GetRootInstanceError),
|
||||||
ParseGameID(ParseGameIDError),
|
|
||||||
}
|
}
|
||||||
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{
|
||||||
@ -24,10 +23,10 @@ pub struct CreateRequest{
|
|||||||
}
|
}
|
||||||
#[allow(nonstandard_style)]
|
#[allow(nonstandard_style)]
|
||||||
pub struct CreateResult{
|
pub struct CreateResult{
|
||||||
pub AssetOwner:i64,
|
pub AssetOwner:u64,
|
||||||
pub DisplayName:String,
|
pub DisplayName:Option<String>,
|
||||||
pub Creator:String,
|
pub Creator:Option<String>,
|
||||||
pub GameID:i32,
|
pub GameID:Option<GameID>,
|
||||||
pub AssetVersion:u64,
|
pub AssetVersion:u64,
|
||||||
}
|
}
|
||||||
impl crate::message_handler::MessageHandler{
|
impl crate::message_handler::MessageHandler{
|
||||||
@ -63,13 +62,11 @@ impl crate::message_handler::MessageHandler{
|
|||||||
game_id,
|
game_id,
|
||||||
}=get_mapinfo(&dom,model_instance);
|
}=get_mapinfo(&dom,model_instance);
|
||||||
|
|
||||||
let game_id=game_id.map_err(Error::ParseGameID)?;
|
|
||||||
|
|
||||||
Ok(CreateResult{
|
Ok(CreateResult{
|
||||||
AssetOwner:user_id as i64,
|
AssetOwner:user_id,
|
||||||
DisplayName:display_name.unwrap_or_default().to_owned(),
|
DisplayName:display_name.ok().map(ToOwned::to_owned),
|
||||||
Creator:creator.unwrap_or_default().to_owned(),
|
Creator:creator.ok().map(ToOwned::to_owned),
|
||||||
GameID:game_id as i32,
|
GameID:game_id.ok(),
|
||||||
AssetVersion:asset_version,
|
AssetVersion:asset_version,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -24,10 +24,11 @@ impl crate::message_handler::MessageHandler{
|
|||||||
// call create on api
|
// call create on api
|
||||||
self.api.create_mapfix(submissions_api::types::CreateMapfixRequest{
|
self.api.create_mapfix(submissions_api::types::CreateMapfixRequest{
|
||||||
OperationID:create_info.OperationID,
|
OperationID:create_info.OperationID,
|
||||||
AssetOwner:create_request.AssetOwner,
|
AssetOwner:create_request.AssetOwner as i64,
|
||||||
DisplayName:create_request.DisplayName.as_str(),
|
DisplayName:create_request.DisplayName.as_deref().unwrap_or_default(),
|
||||||
Creator:create_request.Creator.as_str(),
|
Creator:create_request.Creator.as_deref().unwrap_or_default(),
|
||||||
GameID:create_request.GameID,
|
// not great TODO: make this great
|
||||||
|
GameID:create_request.GameID.unwrap_or(crate::rbx_util::GameID::Bhop) as i32,
|
||||||
AssetID:create_info.ModelID,
|
AssetID:create_info.ModelID,
|
||||||
AssetVersion:create_request.AssetVersion,
|
AssetVersion:create_request.AssetVersion,
|
||||||
TargetAssetID:create_info.TargetAssetID,
|
TargetAssetID:create_info.TargetAssetID,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
use crate::nats_types::CreateSubmissionRequest;
|
use crate::nats_types::CreateSubmissionRequest;
|
||||||
use crate::create::CreateRequest;
|
use crate::create::CreateRequest;
|
||||||
|
use crate::rbx_util::GameID;
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@ -19,13 +20,29 @@ impl crate::message_handler::MessageHandler{
|
|||||||
let create_request=self.create_inner(CreateRequest{
|
let create_request=self.create_inner(CreateRequest{
|
||||||
ModelID:create_info.ModelID,
|
ModelID:create_info.ModelID,
|
||||||
}).await.map_err(Error::Create)?;
|
}).await.map_err(Error::Create)?;
|
||||||
|
|
||||||
|
// grab values from submission form, otherwise try to fill blanks from map data
|
||||||
|
let display_name=if create_info.DisplayName.is_empty(){
|
||||||
|
create_request.DisplayName.as_deref().unwrap_or_default()
|
||||||
|
}else{
|
||||||
|
create_info.DisplayName.as_str()
|
||||||
|
};
|
||||||
|
|
||||||
|
let creator=if create_info.Creator.is_empty(){
|
||||||
|
create_request.Creator.as_deref().unwrap_or_default()
|
||||||
|
}else{
|
||||||
|
create_info.Creator.as_str()
|
||||||
|
};
|
||||||
|
|
||||||
|
let game_id=create_info.GameID.try_into().ok().or(create_request.GameID).unwrap_or(GameID::Bhop);
|
||||||
|
|
||||||
// call create on api
|
// call create on api
|
||||||
self.api.create_submission(submissions_api::types::CreateSubmissionRequest{
|
self.api.create_submission(submissions_api::types::CreateSubmissionRequest{
|
||||||
OperationID:create_info.OperationID,
|
OperationID:create_info.OperationID,
|
||||||
AssetOwner:create_request.AssetOwner,
|
AssetOwner:create_request.AssetOwner as i64,
|
||||||
DisplayName:create_request.DisplayName.as_str(),
|
DisplayName:display_name,
|
||||||
Creator:create_request.Creator.as_str(),
|
Creator:creator,
|
||||||
GameID:create_request.GameID,
|
GameID:game_id as i32,
|
||||||
AssetID:create_info.ModelID,
|
AssetID:create_info.ModelID,
|
||||||
AssetVersion:create_request.AssetVersion,
|
AssetVersion:create_request.AssetVersion,
|
||||||
}).await.map_err(Error::ApiActionSubmissionCreate)?;
|
}).await.map_err(Error::ApiActionSubmissionCreate)?;
|
||||||
|
@ -10,6 +10,9 @@ pub struct CreateSubmissionRequest{
|
|||||||
// operation_id is passed back in the response message
|
// operation_id is passed back in the response message
|
||||||
pub OperationID:i32,
|
pub OperationID:i32,
|
||||||
pub ModelID:u64,
|
pub ModelID:u64,
|
||||||
|
pub DisplayName:String,
|
||||||
|
pub Creator:String,
|
||||||
|
pub GameID:u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(nonstandard_style)]
|
#[allow(nonstandard_style)]
|
||||||
|
@ -70,6 +70,18 @@ impl std::str::FromStr for GameID{
|
|||||||
return Err(ParseGameIDError);
|
return Err(ParseGameIDError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pub struct GameIDError;
|
||||||
|
impl TryFrom<u32> for GameID{
|
||||||
|
type Error=GameIDError;
|
||||||
|
fn try_from(value:u32)->Result<Self,Self::Error>{
|
||||||
|
match value{
|
||||||
|
1=>Ok(GameID::Bhop),
|
||||||
|
2=>Ok(GameID::Surf),
|
||||||
|
5=>Ok(GameID::FlyTrials),
|
||||||
|
_=>Err(GameIDError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct MapInfo<'a>{
|
pub struct MapInfo<'a>{
|
||||||
pub display_name:Result<&'a str,StringValueError>,
|
pub display_name:Result<&'a str,StringValueError>,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user