Use different types for ExpectedString errors

This commit is contained in:
Smitty 2021-05-29 10:11:23 -04:00
parent 7ad91ac481
commit c442ff1882

View file

@ -210,8 +210,14 @@ pub enum EntityError {
FloatParse, FloatParse,
/// A string was expected but not found /// A string was expected but not found
ExpectedString, ExpectedString,
/// Expected string repersenting number
ExpectedNumberString,
/// Expected string repersenting URI
ExpectedUriString,
/// A valid Qid URI was expected but not found /// A valid Qid URI was expected but not found
ExpectedQidString, ExpectedQidString,
/// Expected a string because the datatype is string
ExpectedStringDatatype,
/// A time string was empty /// A time string was empty
TimeEmpty, TimeEmpty,
/// An ID was invalid /// An ID was invalid
@ -249,7 +255,7 @@ fn parse_wb_number(num: &json::JsonValue) -> Result<f64, EntityError> {
if num.is_number() { if num.is_number() {
Ok(num.as_number().ok_or(EntityError::FloatParse)?.into()) Ok(num.as_number().ok_or(EntityError::FloatParse)?.into())
} else { } else {
let s = num.as_str().ok_or(EntityError::ExpectedString)?; let s = num.as_str().ok_or(EntityError::ExpectedNumberString)?;
match s.parse() { match s.parse() {
Ok(x) => Ok(x), Ok(x) => Ok(x),
Err(_) => Err(EntityError::FloatParse), Err(_) => Err(EntityError::FloatParse),
@ -260,7 +266,7 @@ fn parse_wb_number(num: &json::JsonValue) -> Result<f64, EntityError> {
fn try_get_as_qid(datavalue: &json::JsonValue) -> Result<Qid, EntityError> { fn try_get_as_qid(datavalue: &json::JsonValue) -> Result<Qid, EntityError> {
match datavalue match datavalue
.as_str() .as_str()
.ok_or(EntityError::ExpectedString)? .ok_or(EntityError::ExpectedUriString)?
.split("http://www.wikidata.org/entity/Q") .split("http://www.wikidata.org/entity/Q")
.nth(1) .nth(1)
.ok_or(EntityError::ExpectedQidString)? .ok_or(EntityError::ExpectedQidString)?
@ -359,7 +365,9 @@ impl ClaimValueData {
let mut value = take_prop("value", &mut datavalue); let mut value = take_prop("value", &mut datavalue);
match &type_str[..] { match &type_str[..] {
"string" => { "string" => {
let s = value.take_string().ok_or(EntityError::ExpectedString)?; let s = value
.take_string()
.ok_or(EntityError::ExpectedStringDatatype)?;
match datatype { match datatype {
"string" => Ok(ClaimValueData::String(s)), "string" => Ok(ClaimValueData::String(s)),
"commonsMedia" => Ok(ClaimValueData::CommonsMedia(s)), "commonsMedia" => Ok(ClaimValueData::CommonsMedia(s)),