pub struct ByRef<T>(pub T);
Expand description
Wrapper type to allow
Term<Id<&V::Iri, &V::BlankId>, &V::Literal>
to be extracted into Term
using the ExtractFromVocabulary<V>
trait.
There is a limitation in Rust’s trait solver forbidding the implementation
of ExtractFromVocabulary<V>
for both
Term<Id<V::Iri, V::BlankId>, V::Literal>
and
Term<Id<&V::Iri, &V::BlankId>, &V::Literal>
.
It is detected as a conflicting implementation although an associated type
T::Assoc
can never be equal to its reference &T::Assoc
.
As a workaround, ExtractFromVocabulary
is implemented for
ExtractFromVocabulary<V>
is implemented for
ByRef<Term<Id<&V::Iri, &V::BlankId>, &V::Literal>>
instead.
§Example
use rdf_types::{Id, Term, vocabulary::{IndexVocabulary, IriVocabularyMut, IriIndex, BlankIdIndex, LiteralIndex, ExtractFromVocabulary, ByRef}};
use static_iref::iri;
let mut vocabulary = IndexVocabulary::new();
let iri = vocabulary.insert(iri!("http://example.org/"));
let term: Term<Id<&IriIndex, &BlankIdIndex>, &LiteralIndex> = Term::iri(&iri);
let _: Term = ByRef(term).extract_from_vocabulary(&vocabulary);
Tuple Fields§
§0: T
Trait Implementations§
Source§impl<'a, V: IriVocabulary + BlankIdVocabulary> ExtractFromVocabulary<V> for ByRef<Id<&'a V::Iri, &'a V::BlankId>>
impl<'a, V: IriVocabulary + BlankIdVocabulary> ExtractFromVocabulary<V> for ByRef<Id<&'a V::Iri, &'a V::BlankId>>
Source§impl<T, V> ExtractFromVocabulary<V> for ByRef<Option<T>>where
ByRef<T>: ExtractFromVocabulary<V>,
impl<T, V> ExtractFromVocabulary<V> for ByRef<Option<T>>where
ByRef<T>: ExtractFromVocabulary<V>,
Source§impl<V: IriVocabulary> ExtractFromVocabulary<V> for ByRef<Predicate<&V::Iri>>
impl<V: IriVocabulary> ExtractFromVocabulary<V> for ByRef<Predicate<&V::Iri>>
Source§impl<V, S, P, O, G> ExtractFromVocabulary<V> for ByRef<Quad<S, P, O, G>>where
ByRef<S>: ExtractFromVocabulary<V>,
ByRef<P>: ExtractFromVocabulary<V>,
ByRef<O>: ExtractFromVocabulary<V>,
ByRef<G>: ExtractFromVocabulary<V>,
impl<V, S, P, O, G> ExtractFromVocabulary<V> for ByRef<Quad<S, P, O, G>>where
ByRef<S>: ExtractFromVocabulary<V>,
ByRef<P>: ExtractFromVocabulary<V>,
ByRef<O>: ExtractFromVocabulary<V>,
ByRef<G>: ExtractFromVocabulary<V>,
type Extracted = Quad<<ByRef<S> as ExtractFromVocabulary<V>>::Extracted, <ByRef<P> as ExtractFromVocabulary<V>>::Extracted, <ByRef<O> as ExtractFromVocabulary<V>>::Extracted, <ByRef<G> as ExtractFromVocabulary<V>>::Extracted>
fn extract_from_vocabulary(self, vocabulary: &V) -> Self::Extracted
Source§impl<V: LiteralVocabulary, I> ExtractFromVocabulary<V> for ByRef<Term<I, &V::Literal>>where
ByRef<I>: ExtractFromVocabulary<V>,
impl<V: LiteralVocabulary, I> ExtractFromVocabulary<V> for ByRef<Term<I, &V::Literal>>where
ByRef<I>: ExtractFromVocabulary<V>,
Source§impl<V, S, P, O> ExtractFromVocabulary<V> for ByRef<Triple<S, P, O>>where
ByRef<S>: ExtractFromVocabulary<V>,
ByRef<P>: ExtractFromVocabulary<V>,
ByRef<O>: ExtractFromVocabulary<V>,
impl<V, S, P, O> ExtractFromVocabulary<V> for ByRef<Triple<S, P, O>>where
ByRef<S>: ExtractFromVocabulary<V>,
ByRef<P>: ExtractFromVocabulary<V>,
ByRef<O>: ExtractFromVocabulary<V>,
type Extracted = Triple<<ByRef<S> as ExtractFromVocabulary<V>>::Extracted, <ByRef<P> as ExtractFromVocabulary<V>>::Extracted, <ByRef<O> as ExtractFromVocabulary<V>>::Extracted>
fn extract_from_vocabulary(self, vocabulary: &V) -> Self::Extracted
Auto Trait Implementations§
impl<T> Freeze for ByRef<T>where
T: Freeze,
impl<T> RefUnwindSafe for ByRef<T>where
T: RefUnwindSafe,
impl<T> Send for ByRef<T>where
T: Send,
impl<T> Sync for ByRef<T>where
T: Sync,
impl<T> Unpin for ByRef<T>where
T: Unpin,
impl<T> UnwindSafe for ByRef<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more