diff --git a/examples/getfromnet.rs b/examples/getfromnet.rs
index 2df7bcc..9ce526e 100644
--- a/examples/getfromnet.rs
+++ b/examples/getfromnet.rs
@@ -2,10 +2,7 @@ use wikidata::*;
fn main() {
for i in 1_usize.. {
- let uri = format!(
- "https://www.wikidata.org/wiki/Special:EntityData/Q{}.json",
- i
- );
+ let uri = format!("https://www.wikidata.org/wiki/Special:EntityData/Q{i}.json");
let res = reqwest::blocking::get(uri).unwrap();
let text = res.text().unwrap();
if text.contains("
Not Found
No entity with ID ") {
@@ -13,6 +10,6 @@ fn main() {
}
let ent = Entity::from_json(serde_json::from_str(&text).unwrap()).unwrap();
let _ = ent;
- println!("verified Q{}", i);
+ println!("verified Q{i}");
}
}
diff --git a/src/entity.rs b/src/entity.rs
index 7a98fa4..a681c56 100755
--- a/src/entity.rs
+++ b/src/entity.rs
@@ -27,7 +27,7 @@ pub struct Entity {
/// The type of entity: normal entity with a Qid, a property with a Pid, or a lexeme with a Lid.
///
-/// EntitySchemas (with E IDs) are currently unsupported.
+/// `EntitySchemas` (with E IDs) are currently unsupported.
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum EntityType {
@@ -80,7 +80,7 @@ pub enum ClaimValueData {
},
/// A point in time time.
DateTime {
- /// The time as a Chrono DateTime.
+ /// The time as a Chrono `DateTime`.
date_time: DateTime,
/// The precision of the date:
///
@@ -109,7 +109,7 @@ pub enum ClaimValueData {
MathExpr(String),
/// A geometric shape. The value of the string is currently unspecified.
GeoShape(String),
- /// LilyPond musical notation.
+ /// `LilyPond` musical notation.
MusicNotation(String),
/// ID of a file with tabular data on Wikimedia commons.
TabularData(String),
@@ -200,8 +200,8 @@ impl Entity {
if *pid == consts::INSTANCE_OF {
if let ClaimValueData::Item(qid) = claim.data {
instances.push(qid);
- };
- };
+ }
+ }
}
instances.shrink_to_fit();
instances
@@ -214,8 +214,8 @@ impl Entity {
if *pid == consts::DATE_OF_BIRTH {
if let ClaimValueData::DateTime { date_time, .. } = claim.data {
return Some(date_time);
- };
- };
+ }
+ }
}
None
}
@@ -227,8 +227,8 @@ impl Entity {
if *pid == consts::DATE_OF_DEATH {
if let ClaimValueData::DateTime { date_time, .. } = claim.data {
return Some(date_time);
- };
- };
+ }
+ }
}
None
}
@@ -255,7 +255,7 @@ impl Entity {
_ => return Err(EntityError::MultipleEntities),
}
}
- None => json,
+ _ => json,
};
let raw_id: &str = json
@@ -289,7 +289,7 @@ impl Entity {
}
map
}
- None => BTreeMap::new(),
+ _ => BTreeMap::new(),
}
}};
}
@@ -323,7 +323,7 @@ impl Entity {
}
map
}
- None => BTreeMap::new(),
+ _ => BTreeMap::new(),
};
let sitelinks = match json.get("sitelinks") {
@@ -355,13 +355,13 @@ impl Entity {
Qid::from_str(raw_id).ok()
})
.collect(),
- url: obj.get("url").map(|val| val.to_string()),
+ url: obj.get("url").map(std::string::ToString::to_string),
},
);
}
map
}
- None => BTreeMap::new(),
+ _ => BTreeMap::new(),
};
let entity_type = match &json.get("type").ok_or(EntityError::NoEntityType)?.as_str() {
@@ -505,7 +505,6 @@ impl Entity {
/// }
/// }
/// ```
- #[must_use]
pub fn pid_claims(&self, pid: Pid) -> impl Iterator- {
self.claims
.iter()
@@ -637,7 +636,7 @@ pub enum EntityError {
OutOfBoundsTime,
}
-fn get_json_string(json: Value) -> Result {
+fn get_json_string(json: &Value) -> Result {
json.as_str()
.map(ToString::to_string)
.ok_or(EntityError::ExpectedString)
@@ -679,7 +678,7 @@ fn try_get_as_qid(datavalue: &Value) -> Result {
fn take_prop(key: &'static str, claim: &mut Value) -> Value {
match claim.as_object_mut() {
Some(obj) => obj.remove(key).unwrap_or(Value::Null),
- None => Value::Null,
+ _ => Value::Null,
}
}
@@ -706,14 +705,14 @@ fn parse_wb_time(time: &str) -> Result, En
Ok(0) | Err(_) => None,
Ok(x) => Some(x),
},
- None => None,
+ _ => None,
};
let day: Option = match dash_parts.get(2) {
Some(day_str) => match day_str.parse() {
Ok(0) | Err(_) => None,
Ok(x) => Some(x),
},
- None => None,
+ _ => None,
};
#[allow(deprecated)] // TODO: avoid using ymd_opt here
let maybe_date = Utc.ymd_opt(year, month.unwrap_or(1), day.unwrap_or(1));
@@ -724,29 +723,27 @@ fn parse_wb_time(time: &str) -> Result, En
};
let (hour, min, sec) = if time_parts.len() == 2 {
let colon_parts: Vec<&str> = time_parts[1].split(':').collect();
- let hour = match colon_parts.get(0).ok_or(EntityError::MissingHour)?.parse() {
- Ok(x) => x,
- Err(_) => return Err(EntityError::FloatParse),
+ let Ok(hour) = colon_parts.first().ok_or(EntityError::MissingHour)?.parse() else {
+ return Err(EntityError::FloatParse);
};
- let minute = match colon_parts
+
+ let Ok(minute) = colon_parts
.get(1)
.ok_or(EntityError::MissingMinute)?
.parse()
- {
- Ok(x) => x,
- Err(_) => return Err(EntityError::FloatParse),
+ else {
+ return Err(EntityError::FloatParse);
};
- let sec = match colon_parts.get(2).ok_or(EntityError::MissingSecond)?[0..2].parse() {
- Ok(x) => x,
- Err(_) => return Err(EntityError::FloatParse),
+
+ let Ok(sec) = colon_parts.get(2).ok_or(EntityError::MissingSecond)?[0..2].parse() else {
+ return Err(EntityError::FloatParse);
};
(hour, minute, sec)
} else {
(0, 0, 0)
};
- Ok(date
- .and_hms_opt(hour, min, sec)
- .ok_or(EntityError::OutOfBoundsTime)?)
+ date.and_hms_opt(hour, min, sec)
+ .ok_or(EntityError::OutOfBoundsTime)
}
impl ClaimValueData {
@@ -756,14 +753,14 @@ impl ClaimValueData {
/// If the `snak` does not correspond to a valid snak, then an error will be returned.
pub fn parse_snak(mut snak: Value) -> Result {
let mut datavalue: Value = take_prop("datavalue", &mut snak);
- let datatype: &str = &get_json_string(take_prop("datatype", &mut snak))?;
- let snaktype: &str = &get_json_string(take_prop("snaktype", &mut snak))?;
+ let datatype: &str = &get_json_string(&take_prop("datatype", &mut snak))?;
+ let snaktype: &str = &get_json_string(&take_prop("snaktype", &mut snak))?;
match snaktype {
"value" => {}
"somevalue" => return Ok(ClaimValueData::UnknownValue),
"novalue" => return Ok(ClaimValueData::NoValue),
_ => return Err(EntityError::InvalidSnaktype),
- };
+ }
let type_str = take_prop("type", &mut datavalue)
.as_str()
.ok_or(EntityError::InvalidSnaktype)?
@@ -789,7 +786,7 @@ impl ClaimValueData {
}
"wikibase-entityid" => {
// the ID could be a entity, lexeme, property, form, or sense
- let id = get_json_string(take_prop("id", &mut value))?;
+ let id = get_json_string(&take_prop("id", &mut value))?;
match id.chars().next().ok_or(EntityError::BadId)? {
'Q' => Ok(ClaimValueData::Item(Qid(id[1..]
.parse()
@@ -841,7 +838,7 @@ impl ClaimValueData {
}),
// our time parsing code can't handle a few edge cases (really old years), so we
"time" => Ok(
- match parse_wb_time(&get_json_string(take_prop("time", &mut value))?) {
+ 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))
@@ -852,8 +849,8 @@ impl ClaimValueData {
},
),
"monolingualtext" => Ok(ClaimValueData::MonolingualText(Text {
- text: get_json_string(take_prop("text", &mut value))?,
- lang: Lang(get_json_string(take_prop("language", &mut value))?),
+ text: get_json_string(&take_prop("text", &mut value))?,
+ lang: Lang(get_json_string(&take_prop("language", &mut value))?),
})),
_ => Err(EntityError::UnknownDatatype),
}
@@ -880,8 +877,8 @@ impl ClaimValue {
let reference_group = reference_group.as_object()?;
let mut claims = Vec::with_capacity(reference_group["snaks"].as_array()?.len());
let snaks = reference_group["snaks"].as_object()?;
- for (pid, snak_group) in snaks.iter() {
- for snak in snak_group.as_array()?.iter() {
+ for (pid, snak_group) in snaks {
+ for snak in snak_group.as_array()? {
// clone, meh
let owned_snak = snak.clone().take();
if let Ok(x) = ClaimValueData::parse_snak(owned_snak) {
@@ -901,11 +898,9 @@ impl ClaimValue {
let qualifiers_json = take_prop("qualifiers", &mut claim);
let qualifiers = if qualifiers_json.is_object() {
let mut v: Vec<(Pid, ClaimValueData)> = vec![];
- for (pid, claim_array_json) in qualifiers_json.as_object()?.iter() {
+ for (pid, claim_array_json) in qualifiers_json.as_object()? {
// yep it's a clone, meh
- let mut claim_array = if let Value::Array(x) = claim_array_json.clone().take() {
- x
- } else {
+ let Value::Array(mut claim_array) = claim_array_json.clone().take() else {
return None;
};
for claim in claim_array.drain(..) {
@@ -931,7 +926,6 @@ impl ClaimValue {
})
}
- #[must_use]
/// Returns an iterator of references to all the qualifer claim data for a property ID.
///
/// ## Example
@@ -951,7 +945,6 @@ impl ClaimValue {
}
impl ReferenceGroup {
- #[must_use]
/// Returns an iterator of references to all the claim data for a property ID.
///
/// ## Example
@@ -967,7 +960,6 @@ impl ReferenceGroup {
/// };
/// assert_eq!(claims.next(), None);
/// ```
-
pub fn pid_claims(&self, pid: Pid) -> impl Iterator
- {
self.claims
.iter()
@@ -998,10 +990,10 @@ mod test {
// "-410000000-00-00T00:00:00Z",
];
for time in valid_times {
- println!("Trying \"{}\"", time);
+ println!("Trying \"{time}\"");
assert!(match parse_wb_time(time) {
Ok(val) => {
- println!("Got {:#?}", val);
+ println!("Got {val:#?}");
true
}
Err(_) => false,
@@ -1014,7 +1006,7 @@ mod test {
let qid = try_get_as_qid(
&serde_json::from_str(r#""http://www.wikidata.org/entity/Q1234567""#).unwrap(),
);
- assert_eq!(qid, Ok(Qid(1234567)));
+ assert_eq!(qid, Ok(Qid(1_234_567)));
}
#[test]
diff --git a/src/ids.rs b/src/ids.rs
index 921e85d..c440944 100755
--- a/src/ids.rs
+++ b/src/ids.rs
@@ -7,7 +7,7 @@ pub mod consts;
/// Three main types of IDs entities can have.
///
-/// EntitySchemas (with E IDs) are currently unsupported.
+/// `EntitySchemas` (with E IDs) are currently unsupported.
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum WikiId {
@@ -162,6 +162,7 @@ lexeme_subid_def!(Fid, "form ID", "F", 'F');
lexeme_subid_def!(Sid, "sense ID", "S", 'S');
#[cfg(test)]
+#[allow(missing_docs)]
pub mod test {
use super::*;
@@ -178,31 +179,31 @@ pub mod test {
assert_eq!(
Lid(1).json_url(),
"https://www.wikidata.org/wiki/Special:EntityData/L1.json"
- )
+ );
}
#[test]
fn to_string() {
let entity = Qid(42);
- assert_eq!(format!("{}", entity), "Q42");
+ assert_eq!(format!("{entity}"), "Q42");
let prop = Pid(6);
- assert_eq!(format!("{}", prop), "P6");
+ assert_eq!(format!("{prop}"), "P6");
let lexeme = Lid(2);
- assert_eq!(format!("{}", lexeme), "L2");
+ assert_eq!(format!("{lexeme}"), "L2");
let sense = Sid(Lid(5), 9);
- assert_eq!(format!("{}", sense), "L5-S9");
+ assert_eq!(format!("{sense}"), "L5-S9");
let form = Fid(Lid(3), 11);
- assert_eq!(format!("{}", form), "L3-F11");
+ assert_eq!(format!("{form}"), "L3-F11");
}
#[test]
fn from_str() {
assert_eq!(Qid::from_str("Q42").unwrap(), Qid(42));
- assert_eq!(Lid::from_str("L944114").unwrap(), Lid(944114));
+ assert_eq!(Lid::from_str("L944114").unwrap(), Lid(944_114));
assert_eq!(Pid::from_str("P1341").unwrap(), Pid(1341));
assert_eq!(Pid::from_str("Q1341"), Err(IdParseError::InvalidPrefix));
assert_eq!(Pid::from_str("1341"), Err(IdParseError::InvalidPrefix));
diff --git a/tests/claim-from-json.rs b/tests/claim-from-json.rs
index ba9c76a..0ce2c17 100644
--- a/tests/claim-from-json.rs
+++ b/tests/claim-from-json.rs
@@ -7,13 +7,13 @@ fn id_snak() {
let j: serde_json::Value =
serde_json::from_str(include_str!("../items/Q106975887.json")).unwrap();
let snak = &j["entities"]["Q106975887"]["claims"]["P31"][0]["mainsnak"];
- println!("{:?}", snak);
+ println!("{snak:?}");
let data = ClaimValueData::parse_snak(snak.clone()).unwrap();
assert_eq!(data, ClaimValueData::Item(Qid(5)));
let j: serde_json::Value = serde_json::from_str(include_str!("../items/Q1.json")).unwrap();
let snak = &j["entities"]["Q1"]["claims"]["P793"][0]["mainsnak"];
- println!("{:?}", snak);
+ println!("{snak:?}");
let data = ClaimValueData::parse_snak(snak.clone()).unwrap();
assert_eq!(data, ClaimValueData::Item(Qid(323)));
}
@@ -22,7 +22,7 @@ fn id_snak() {
fn commons_snak() {
let j: serde_json::Value = serde_json::from_str(include_str!("../items/Q42.json")).unwrap();
let snak = &j["entities"]["Q42"]["claims"]["P18"][0]["mainsnak"];
- println!("{:?}", snak);
+ println!("{snak:?}");
let data = ClaimValueData::parse_snak(snak.clone()).unwrap();
assert_eq!(
data,
@@ -34,7 +34,7 @@ fn commons_snak() {
fn quantity_snak() {
let j: serde_json::Value = serde_json::from_str(include_str!("../items/Q42.json")).unwrap();
let snak = &j["entities"]["Q42"]["claims"]["P2048"][0]["mainsnak"];
- println!("{:?}", snak);
+ println!("{snak:?}");
let data = ClaimValueData::parse_snak(snak.clone()).unwrap();
assert_eq!(
data,
@@ -51,7 +51,8 @@ fn quantity_snak() {
fn external_id_snak() {
let j: serde_json::Value = serde_json::from_str(include_str!("../items/Q42.json")).unwrap();
let snak = &j["entities"]["Q42"]["claims"]["P213"][0]["mainsnak"];
- println!("{:?}", snak);
+ println!("{snak:?}");
+
let data = ClaimValueData::parse_snak(snak.clone()).unwrap();
assert_eq!(
data,
@@ -63,7 +64,7 @@ fn external_id_snak() {
fn coordinates_snak() {
let j: serde_json::Value = serde_json::from_str(include_str!("../items/Q513.json")).unwrap();
let snak = &j["entities"]["Q513"]["claims"]["P625"][0]["mainsnak"];
- println!("{:?}", snak);
+ println!("{snak:?}");
let data = ClaimValueData::parse_snak(snak.clone()).unwrap();
assert_eq!(
data,
@@ -80,7 +81,7 @@ fn coordinates_snak() {
fn mono_text_snak() {
let j: serde_json::Value = serde_json::from_str(include_str!("../items/Q42.json")).unwrap();
let snak = &j["entities"]["Q42"]["claims"]["P1477"][0]["mainsnak"];
- println!("{:?}", snak);
+ println!("{snak:?}");
let data = ClaimValueData::parse_snak(snak.clone()).unwrap();
assert_eq!(
data,
@@ -95,10 +96,10 @@ fn mono_text_snak() {
fn date_snak() {
let j: serde_json::Value = serde_json::from_str(include_str!("../items/Q42.json")).unwrap();
let snak = &j["entities"]["Q42"]["claims"]["P569"][0]["mainsnak"];
- println!("{:?}", snak);
+ println! {"{snak:?}"};
let data = ClaimValueData::parse_snak(snak.clone()).unwrap();
assert_eq!(
- &format!("{:?}", data),
+ &format!("{data:?}"),
"DateTime { date_time: 1952-03-11T00:00:00Z, precision: 11 }",
);
}
@@ -107,7 +108,7 @@ fn date_snak() {
fn lexeme_snak() {
let j: serde_json::Value = serde_json::from_str(include_str!("../items/Q31928.json")).unwrap();
let snak = &j["entities"]["Q31928"]["claims"]["P6254"][0]["mainsnak"];
- println!("{:?}", snak);
+ println!("{snak:?}");
let data = ClaimValueData::parse_snak(snak.clone()).unwrap();
assert_eq!(data, ClaimValueData::Lexeme(Lid(361)));
}