diff --git a/lib/oxrdf/src/triple.rs b/lib/oxrdf/src/triple.rs index a4699103..32c22f28 100644 --- a/lib/oxrdf/src/triple.rs +++ b/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). #[inline] pub fn new_maybe( - subject: impl Into>, - predicate: impl Into>, - object: impl Into>, + subject: impl Into, + predicate: impl Into, + object: impl Into, ) -> Option { - match (subject.into(), predicate.into(), object.into()) { + match ( + Into::>::into(Into::::into(subject)), + Into::>::into(Into::::into(predicate)), + Into::>::into(Into::::into(object))) { (Some(subject), Some(predicate), Some(object)) => Some(Self { subject, predicate, @@ -1298,26 +1301,49 @@ mod tests { #[test] fn constructing_triple() { + use super::*; + 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()) ); + 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( Term::BlankNode(BlankNode::new("abc123").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( Subject::NamedNode(NamedNode::new("http://example.org/test").unwrap()), 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_2.clone())); + assert_eq!(optional_triple_2, Some(triple_2)); assert_eq!(bad_triple, None); + assert_eq!(bad_triple_2, None); } #[test]