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
|
||||
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{
|
||||
fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
|
||||
write!(f,"Empty string")
|
||||
}
|
||||
}
|
||||
impl<'a> StringEmptyCheck<&'a str>{
|
||||
fn new(value:&'a str)->StringEmptyCheck<&'a str>{
|
||||
StringEmptyCheck(value.is_empty().then_some(value).ok_or(StringEmpty))
|
||||
}
|
||||
fn check_empty(value:&str)->Result<&str,StringEmpty>{
|
||||
value.is_empty().then_some(value).ok_or(StringEmpty)
|
||||
}
|
||||
|
||||
// check for duplicate objects
|
||||
@ -282,10 +274,10 @@ pub struct MapCheck<'a>{
|
||||
model_name:StringCheck<'a,(),String>,
|
||||
// Map must have a StringValue named DisplayName.
|
||||
// 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.
|
||||
// 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.
|
||||
// bhop_ for bhop, and surf_ for surf
|
||||
game_id:Result<GameID,ParseGameIDError>,
|
||||
@ -323,14 +315,14 @@ impl<'a> ModelInfo<'a>{
|
||||
|
||||
// Check display name is not empty and has title case
|
||||
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,
|
||||
expected:display_name.to_title_case(),
|
||||
}.check(display_name))
|
||||
});
|
||||
|
||||
// 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)
|
||||
let game_id=self.map_info.game_id;
|
||||
@ -391,8 +383,8 @@ impl<'a> MapCheck<'a>{
|
||||
MapCheck{
|
||||
model_class:StringCheck(Ok(())),
|
||||
model_name:StringCheck(Ok(())),
|
||||
display_name:Ok(StringEmptyCheck(Ok(StringCheck(Ok(display_name))))),
|
||||
creator:Ok(StringEmptyCheck(Ok(creator))),
|
||||
display_name:Ok(Ok(StringCheck(Ok(display_name)))),
|
||||
creator:Ok(Ok(creator)),
|
||||
game_id:Ok(game_id),
|
||||
mapstart:Ok(()),
|
||||
mode_start_counts:DuplicateCheck(Ok(())),
|
||||
@ -446,16 +438,16 @@ impl<'a> std::fmt::Display for MapCheck<'a>{
|
||||
writeln!(f,"Invalid Model Name: {context}")?;
|
||||
}
|
||||
match &self.display_name{
|
||||
Ok(StringEmptyCheck(Ok(StringCheck(Ok(_)))))=>(),
|
||||
Ok(StringEmptyCheck(Ok(StringCheck(Err(context)))))=>writeln!(f,"Invalid DisplayName: {context}")?,
|
||||
Ok(StringEmptyCheck(Err(context)))=>writeln!(f,"Invalid DisplayName: {context}")?,
|
||||
Ok(Ok(StringCheck(Ok(_))))=>(),
|
||||
Ok(Ok(StringCheck(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::ValueNotSet)=>writeln!(f,"DisplayName Value not set")?,
|
||||
Err(StringValueError::NonStringValue)=>writeln!(f,"DisplayName Value is not a String")?,
|
||||
}
|
||||
match &self.creator{
|
||||
Ok(StringEmptyCheck(Ok(_)))=>(),
|
||||
Ok(StringEmptyCheck(Err(context)))=>writeln!(f,"Invalid Creator: {context}")?,
|
||||
Ok(Ok(_))=>(),
|
||||
Ok(Err(context))=>writeln!(f,"Invalid Creator: {context}")?,
|
||||
Err(StringValueError::ObjectNotFound)=>writeln!(f,"Missing Creator StringValue")?,
|
||||
Err(StringValueError::ValueNotSet)=>writeln!(f,"Creator Value not set")?,
|
||||
Err(StringValueError::NonStringValue)=>writeln!(f,"Creator Value is not a String")?,
|
||||
|
Loading…
x
Reference in New Issue
Block a user