1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
use futures::future::BoxFuture; use iref::{Iri, IriBuf}; use crate::Error; pub struct RemoteContext<C> { url: IriBuf, context: C } impl<C> RemoteContext<C> { pub fn new(url: Iri, context: C) -> RemoteContext<C> { RemoteContext { url: IriBuf::from(url), context: context } } pub fn from_parts(url: IriBuf, context: C) -> RemoteContext<C> { RemoteContext { url: url, context: context } } pub fn context(&self) -> &C { &self.context } pub fn into_context(self) -> C { self.context } pub fn url(&self) -> Iri { self.url.as_iri() } pub fn cast<D>(self) -> RemoteContext<D> where C: Into<D> { RemoteContext { url: self.url, context: self.context.into() } } } pub trait Loader { type Output; fn load_context<'a>(&'a mut self, url: Iri) -> BoxFuture<'a, Result<RemoteContext<Self::Output>, Error>>; }