treat out of bounds dates as unknown value
This commit is contained in:
parent
38b35a77cb
commit
284af1ad9f
2 changed files with 20 additions and 10 deletions
|
@ -398,7 +398,12 @@ impl Entity {
|
|||
.as_str()
|
||||
.ok_or(EntityError::NoRank)?,
|
||||
)?,
|
||||
data: ClaimValueData::parse_snak(claim.get_mut("mainsnak").ok_or(EntityError::MissingMainsnak)?.take())?,
|
||||
data: ClaimValueData::parse_snak(
|
||||
claim
|
||||
.get_mut("mainsnak")
|
||||
.ok_or(EntityError::MissingMainsnak)?
|
||||
.take(),
|
||||
)?,
|
||||
qualifiers,
|
||||
references,
|
||||
},
|
||||
|
@ -704,13 +709,18 @@ impl ClaimValueData {
|
|||
lower_bound: parse_wb_number(&take_prop("lowerBound", &mut value)).ok(),
|
||||
unit: try_get_as_qid(&take_prop("unit", &mut value)).ok(),
|
||||
}),
|
||||
"time" => Ok(ClaimValueData::DateTime {
|
||||
// our time parsing code can't handle a few edge cases (really old years), so we
|
||||
// just give up on parsing the snak if parse_wb_time returns None
|
||||
date_time: parse_wb_time(&get_json_string(take_prop("time", &mut value))?)?,
|
||||
"time" => Ok(
|
||||
match parse_wb_time(&get_json_string(take_prop("time", &mut value))?) {
|
||||
Ok(date_time) => ClaimValueData::DateTime {
|
||||
date_time,
|
||||
precision: parse_wb_number(&take_prop("precision", &mut value))
|
||||
.map_err(|_| EntityError::InvalidPrecision)? as u8,
|
||||
}),
|
||||
.map_err(|_| EntityError::InvalidPrecision)?
|
||||
as u8,
|
||||
},
|
||||
Err(_) => ClaimValueData::UnknownValue,
|
||||
},
|
||||
),
|
||||
"monolingualtext" => Ok(ClaimValueData::MonolingualText(Text {
|
||||
text: get_json_string(take_prop("text", &mut value))?,
|
||||
lang: Lang(get_json_string(take_prop("language", &mut value))?),
|
||||
|
|
|
@ -2,7 +2,8 @@ use wikidata::*;
|
|||
|
||||
#[test]
|
||||
fn simple_item() {
|
||||
let j: serde_json::Value = serde_json::from_str(include_str!("../items/Q106975887.json")).unwrap();
|
||||
let j: serde_json::Value =
|
||||
serde_json::from_str(include_str!("../items/Q106975887.json")).unwrap();
|
||||
Entity::from_json(j).unwrap();
|
||||
}
|
||||
|
||||
|
@ -13,7 +14,6 @@ fn douglas_adams() {
|
|||
}
|
||||
|
||||
#[test]
|
||||
#[ignore = "can't handle year right"]
|
||||
fn universe() {
|
||||
let j: serde_json::Value = serde_json::from_str(include_str!("../items/Q1.json")).unwrap();
|
||||
Entity::from_json(j).unwrap();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue