chore: fix triple casting

pull/795/head
Jesse Wright 1 year ago
parent 40db982131
commit 1be3e0ac10
  1. 34
      lib/oxrdf/src/triple.rs

@ -754,11 +754,14 @@ impl Triple {
/// Builds an RDF [triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple). /// Builds an RDF [triple](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple).
#[inline] #[inline]
pub fn new_maybe( pub fn new_maybe(
subject: impl Into<Option<Subject>>, subject: impl Into<Term>,
predicate: impl Into<Option<NamedNode>>, predicate: impl Into<Term>,
object: impl Into<Option<Term>>, object: impl Into<Term>,
) -> Option<Self> { ) -> Option<Self> {
match (subject.into(), predicate.into(), object.into()) { match (
Into::<Option<Subject>>::into(Into::<Term>::into(subject)),
Into::<Option<NamedNode>>::into(Into::<Term>::into(predicate)),
Into::<Option<Term>>::into(Into::<Term>::into(object))) {
(Some(subject), Some(predicate), Some(object)) => Some(Self { (Some(subject), Some(predicate), Some(object)) => Some(Self {
subject, subject,
predicate, predicate,
@ -1298,26 +1301,49 @@ mod tests {
#[test] #[test]
fn constructing_triple() { fn constructing_triple() {
use super::*;
let optional_triple = Triple::new_maybe( let optional_triple = Triple::new_maybe(
Term::NamedNode(NamedNode::new("http://example.org/test").unwrap()), Term::NamedNode(NamedNode::new("http://example.org/test").unwrap()),
Term::NamedNode(NamedNode::new("http://example.org/test").unwrap()), Term::NamedNode(NamedNode::new("http://example.org/test").unwrap()),
Term::NamedNode(NamedNode::new("http://example.org/test").unwrap()) Term::NamedNode(NamedNode::new("http://example.org/test").unwrap())
); );
let optional_triple_2 = Triple::new_maybe(
NamedNode::new("http://example.org/test").unwrap(),
NamedNode::new("http://example.org/test").unwrap(),
NamedNode::new("http://example.org/test").unwrap()
);
let bad_triple = Triple::new_maybe( let bad_triple = Triple::new_maybe(
Term::BlankNode(BlankNode::new("abc123").unwrap()), Term::BlankNode(BlankNode::new("abc123").unwrap()),
Term::NamedNode(NamedNode::new("http://example.org/test").unwrap()), Term::NamedNode(NamedNode::new("http://example.org/test").unwrap()),
Term::NamedNode(NamedNode::new("http://example.org/test").unwrap()) Term::NamedNode(NamedNode::new("http://example.org/test").unwrap())
); );
let bad_triple_2 = Triple::new_maybe(
BlankNode::new("abc123").unwrap(),
NamedNode::new("http://example.org/test").unwrap(),
NamedNode::new("http://example.org/test").unwrap()
);
let triple: Triple = Triple::new( let triple: Triple = Triple::new(
Subject::NamedNode(NamedNode::new("http://example.org/test").unwrap()), Subject::NamedNode(NamedNode::new("http://example.org/test").unwrap()),
NamedNode::new("http://example.org/test").unwrap(), NamedNode::new("http://example.org/test").unwrap(),
Term::NamedNode(NamedNode::new("http://example.org/test").unwrap()) Term::NamedNode(NamedNode::new("http://example.org/test").unwrap())
); );
let triple_2: Triple = Triple::new(
NamedNode::new("http://example.org/test").unwrap(),
NamedNode::new("http://example.org/test").unwrap(),
NamedNode::new("http://example.org/test").unwrap()
);
assert_eq!(optional_triple, Some(triple)); assert_eq!(optional_triple, Some(triple));
assert_eq!(optional_triple, Some(triple_2.clone()));
assert_eq!(optional_triple_2, Some(triple_2));
assert_eq!(bad_triple, None); assert_eq!(bad_triple, None);
assert_eq!(bad_triple_2, None);
} }
#[test] #[test]

Loading…
Cancel
Save