}
}
-trait GenSource<'a>:
- Source<It = BoxedIter<'a>, Get = BoxedIter<'a>, Prefix = BoxedIter<'a>, Range = BoxedIter<'a>> + 'a
-{
-}
-
-struct GenWrap<'a, S: Source + 'a>(S, PhantomData<&'a S>);
-impl<'a, S: Source + 'a> IterSource for GenWrap<'a, S> {
+struct BoxWrap<'a, S: Source + 'a>(S, PhantomData<&'a S>);
+impl<'a, S: Source + 'a> IterSource for BoxWrap<'a, S> {
type It = BoxedIter<'a>;
fn iter(&self) -> Self::It {
Box::new(self.0.iter())
}
}
-impl<'a, S: Source + 'a> Source for GenWrap<'a, S> {
+impl<'a, S: Source + 'a> Source for BoxWrap<'a, S> {
type Get = BoxedIter<'a>;
fn get(&self, key: &[u8]) -> Self::Get {
Box::new(self.0.get(key))
Box::new(self.0.get_range(start, end))
}
}
-impl<'a, S: Source + 'a> GenSource<'a> for GenWrap<'a, S> {}
-pub struct BoxedSource<'a>(Box<dyn GenSource<'a>>);
+pub struct BoxedSource<'a>(
+ Box<
+ dyn Source<
+ It = BoxedIter<'a>,
+ Get = BoxedIter<'a>,
+ Prefix = BoxedIter<'a>,
+ Range = BoxedIter<'a>,
+ > + 'a,
+ >,
+);
impl<'a> BoxedSource<'a> {
fn from<S: Source + 'a>(source: S) -> Self {
- Self(Box::new(GenWrap(source, PhantomData)))
+ Self(Box::new(BoxWrap(source, PhantomData)))
}
}
impl<'a> IterSource for BoxedSource<'a> {