diff --git a/validation/src/check.rs b/validation/src/check.rs index c6c1bbd..a4a1208 100644 --- a/validation/src/check.rs +++ b/validation/src/check.rs @@ -193,11 +193,21 @@ 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)) + } +} // check for duplicate objects pub struct DuplicateCheckContext<ID>(HashMap<ID,u64>); @@ -302,24 +312,14 @@ impl<'a> ModelInfo<'a>{ // check display name let display_name=self.map_info.display_name.map(|display_name|{ - if display_name.is_empty(){ - StringEmptyCheck(Err(StringEmpty)) - }else{ - StringEmptyCheck(Ok(StringCheckContext{ - observed:display_name, - expected:display_name.to_title_case(), - }.check(display_name))) - } + StringEmptyCheck::new(display_name).map(|display_name|StringCheckContext{ + observed:display_name, + expected:display_name.to_title_case(), + }.check(display_name)) }); // check Creator - let creator=self.map_info.creator.map(|creator|{ - if creator.is_empty(){ - StringEmptyCheck(Err(StringEmpty)) - }else{ - StringEmptyCheck(Ok(creator)) - } - }); + let creator=self.map_info.creator.map(StringEmptyCheck::new); // check GameID let game_id=self.map_info.game_id;