validator: code tweaks

This commit is contained in:
Quaternions 2025-04-11 22:20:59 -07:00
parent eff9097456
commit aa513a7973
Signed by: Quaternions
GPG Key ID: D0DF5964F79AC131

@ -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;