validator: remove explicit StringEmptyCheck newtype
This commit is contained in:
parent
c4f910c1f0
commit
9331f37d70
@ -177,21 +177,13 @@ impl<'a,Str:std::fmt::Display> std::fmt::Display for StringCheckContext<'a,Str>{
|
|||||||
|
|
||||||
// check if a string is empty
|
// check if a string is empty
|
||||||
pub struct StringEmpty;
|
pub struct StringEmpty;
|
||||||
pub struct StringEmptyCheck<Context>(Result<Context,StringEmpty>);
|
|
||||||
impl<Context> StringEmptyCheck<Context>{
|
|
||||||
fn map<T>(self,f:impl Fn(Context)->T)->StringEmptyCheck<T>{
|
|
||||||
StringEmptyCheck(self.0.map(f))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
impl std::fmt::Display for StringEmpty{
|
impl std::fmt::Display for StringEmpty{
|
||||||
fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
|
fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
|
||||||
write!(f,"Empty string")
|
write!(f,"Empty string")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl<'a> StringEmptyCheck<&'a str>{
|
fn check_empty(value:&str)->Result<&str,StringEmpty>{
|
||||||
fn new(value:&'a str)->StringEmptyCheck<&'a str>{
|
value.is_empty().then_some(value).ok_or(StringEmpty)
|
||||||
StringEmptyCheck(value.is_empty().then_some(value).ok_or(StringEmpty))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for duplicate objects
|
// check for duplicate objects
|
||||||
@ -282,10 +274,10 @@ pub struct MapCheck<'a>{
|
|||||||
model_name:StringCheck<'a,(),String>,
|
model_name:StringCheck<'a,(),String>,
|
||||||
// Map must have a StringValue named DisplayName.
|
// Map must have a StringValue named DisplayName.
|
||||||
// Value must not be empty, must be in title case.
|
// Value must not be empty, must be in title case.
|
||||||
display_name:Result<StringEmptyCheck<StringCheck<'a,&'a str,String>>,StringValueError>,
|
display_name:Result<Result<StringCheck<'a,&'a str,String>,StringEmpty>,StringValueError>,
|
||||||
// Map must have a StringValue named Creator.
|
// Map must have a StringValue named Creator.
|
||||||
// Value must not be empty.
|
// Value must not be empty.
|
||||||
creator:Result<StringEmptyCheck<&'a str>,StringValueError>,
|
creator:Result<Result<&'a str,StringEmpty>,StringValueError>,
|
||||||
// The prefix of the model's name must match the game it was submitted for.
|
// The prefix of the model's name must match the game it was submitted for.
|
||||||
// bhop_ for bhop, and surf_ for surf
|
// bhop_ for bhop, and surf_ for surf
|
||||||
game_id:Result<GameID,ParseGameIDError>,
|
game_id:Result<GameID,ParseGameIDError>,
|
||||||
@ -323,14 +315,14 @@ impl<'a> ModelInfo<'a>{
|
|||||||
|
|
||||||
// Check display name is not empty and has title case
|
// Check display name is not empty and has title case
|
||||||
let display_name=self.map_info.display_name.map(|display_name|{
|
let display_name=self.map_info.display_name.map(|display_name|{
|
||||||
StringEmptyCheck::new(display_name).map(|display_name|StringCheckContext{
|
check_empty(display_name).map(|display_name|StringCheckContext{
|
||||||
observed:display_name,
|
observed:display_name,
|
||||||
expected:display_name.to_title_case(),
|
expected:display_name.to_title_case(),
|
||||||
}.check(display_name))
|
}.check(display_name))
|
||||||
});
|
});
|
||||||
|
|
||||||
// Check Creator is not empty
|
// Check Creator is not empty
|
||||||
let creator=self.map_info.creator.map(StringEmptyCheck::new);
|
let creator=self.map_info.creator.map(check_empty);
|
||||||
|
|
||||||
// Check GameID (model name was prefixed with bhop_ surf_ etc)
|
// Check GameID (model name was prefixed with bhop_ surf_ etc)
|
||||||
let game_id=self.map_info.game_id;
|
let game_id=self.map_info.game_id;
|
||||||
@ -391,8 +383,8 @@ impl<'a> MapCheck<'a>{
|
|||||||
MapCheck{
|
MapCheck{
|
||||||
model_class:StringCheck(Ok(())),
|
model_class:StringCheck(Ok(())),
|
||||||
model_name:StringCheck(Ok(())),
|
model_name:StringCheck(Ok(())),
|
||||||
display_name:Ok(StringEmptyCheck(Ok(StringCheck(Ok(display_name))))),
|
display_name:Ok(Ok(StringCheck(Ok(display_name)))),
|
||||||
creator:Ok(StringEmptyCheck(Ok(creator))),
|
creator:Ok(Ok(creator)),
|
||||||
game_id:Ok(game_id),
|
game_id:Ok(game_id),
|
||||||
mapstart:Ok(()),
|
mapstart:Ok(()),
|
||||||
mode_start_counts:DuplicateCheck(Ok(())),
|
mode_start_counts:DuplicateCheck(Ok(())),
|
||||||
@ -446,16 +438,16 @@ impl<'a> std::fmt::Display for MapCheck<'a>{
|
|||||||
writeln!(f,"Invalid Model Name: {context}")?;
|
writeln!(f,"Invalid Model Name: {context}")?;
|
||||||
}
|
}
|
||||||
match &self.display_name{
|
match &self.display_name{
|
||||||
Ok(StringEmptyCheck(Ok(StringCheck(Ok(_)))))=>(),
|
Ok(Ok(StringCheck(Ok(_))))=>(),
|
||||||
Ok(StringEmptyCheck(Ok(StringCheck(Err(context)))))=>writeln!(f,"Invalid DisplayName: {context}")?,
|
Ok(Ok(StringCheck(Err(context))))=>writeln!(f,"Invalid DisplayName: {context}")?,
|
||||||
Ok(StringEmptyCheck(Err(context)))=>writeln!(f,"Invalid DisplayName: {context}")?,
|
Ok(Err(context))=>writeln!(f,"Invalid DisplayName: {context}")?,
|
||||||
Err(StringValueError::ObjectNotFound)=>writeln!(f,"Missing DisplayName StringValue")?,
|
Err(StringValueError::ObjectNotFound)=>writeln!(f,"Missing DisplayName StringValue")?,
|
||||||
Err(StringValueError::ValueNotSet)=>writeln!(f,"DisplayName Value not set")?,
|
Err(StringValueError::ValueNotSet)=>writeln!(f,"DisplayName Value not set")?,
|
||||||
Err(StringValueError::NonStringValue)=>writeln!(f,"DisplayName Value is not a String")?,
|
Err(StringValueError::NonStringValue)=>writeln!(f,"DisplayName Value is not a String")?,
|
||||||
}
|
}
|
||||||
match &self.creator{
|
match &self.creator{
|
||||||
Ok(StringEmptyCheck(Ok(_)))=>(),
|
Ok(Ok(_))=>(),
|
||||||
Ok(StringEmptyCheck(Err(context)))=>writeln!(f,"Invalid Creator: {context}")?,
|
Ok(Err(context))=>writeln!(f,"Invalid Creator: {context}")?,
|
||||||
Err(StringValueError::ObjectNotFound)=>writeln!(f,"Missing Creator StringValue")?,
|
Err(StringValueError::ObjectNotFound)=>writeln!(f,"Missing Creator StringValue")?,
|
||||||
Err(StringValueError::ValueNotSet)=>writeln!(f,"Creator Value not set")?,
|
Err(StringValueError::ValueNotSet)=>writeln!(f,"Creator Value not set")?,
|
||||||
Err(StringValueError::NonStringValue)=>writeln!(f,"Creator Value is not a String")?,
|
Err(StringValueError::NonStringValue)=>writeln!(f,"Creator Value is not a String")?,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user