From b1611b10c152fac90fba33d8e26c36421a4cd7c7 Mon Sep 17 00:00:00 2001 From: Chris Mikkelson Date: Fri, 19 Jul 2024 21:01:43 -0500 Subject: [PATCH] pull out the non-working generic source bits --- src/source.rs | 68 +-------------------------------------------------- 1 file changed, 1 insertion(+), 67 deletions(-) diff --git a/src/source.rs b/src/source.rs index c6262b0..4d581a7 100644 --- a/src/source.rs +++ b/src/source.rs @@ -1,6 +1,5 @@ use crate::Entry; use std::iter::Iterator; -use std::marker::PhantomData; pub trait Iter: Iterator { fn seek(&mut self, key: &[u8]); @@ -116,68 +115,9 @@ impl Iter for RangeIter { } } -pub struct WrapSource<'a, S: Source<'a> + Ranges<'a> + 'a>(S, PhantomData<&'a S>); -impl<'a, S: Source<'a> + Ranges<'a> + 'a> Source<'a> for WrapSource<'a, S> { - type It = Box; - fn iter(&'a self) -> Self::It { - Box::new(self.0.iter()) - } -} -impl<'a, S: Source<'a> + Ranges<'a> + 'a> Ranges<'a> for WrapSource<'a, S> { - type Get = Box; - type Prefix = Box; - type Range = Box; - - fn get(&'a self, key: &[u8]) -> Self::Get { - Box::new(self.0.get(key)) - } - fn get_prefix(&'a self, prefix: &[u8]) -> Self::Prefix { - Box::new(self.0.get_prefix(prefix)) - } - fn get_range(&'a self, start: &[u8], end: &[u8]) -> Self::Range { - Box::new(self.0.get_range(start, end)) - } -} -impl<'a, S: Source<'a> + Ranges<'a> + 'a> GenSource<'a> for WrapSource<'a, S> {} - -trait GenSource<'a>: - Source<'a, It = Box> - + Ranges<'a, Get = Box, Prefix = Box, Range = Box> -{ -} - -struct GenericSource<'a>(Box + 'a>, PhantomData<&'a u8>); -impl<'a> GenericSource<'a> { - fn from + Ranges<'a> + 'a>(source: S) -> Self { - panic!("GenericSource::from running"); - GenericSource(Box::new(WrapSource(source, PhantomData)), PhantomData) - } -} - -impl<'a> Source<'a> for GenericSource<'a> { - type It = Box; - fn iter(&'a self) -> Self::It { - self.0.iter() - } -} -impl<'a> Ranges<'a> for GenericSource<'a> { - type Get = Box; - type Prefix = Box; - type Range = Box; - fn get(&'a self, key: &[u8]) -> Self::Get { - self.0.get(key) - } - fn get_prefix(&'a self, prefix: &[u8]) -> Self::Prefix { - self.0.get_prefix(prefix) - } - fn get_range(&'a self, start: &[u8], end: &[u8]) -> Self::Range { - self.0.get_range(start, end) - } -} - #[cfg(test)] pub mod test { - use super::{DefaultRanges, Entry, GenericSource, Iter, Ranges, Source}; + use super::{DefaultRanges, Entry, Iter, Ranges, Source}; pub struct TestSource(pub Vec); @@ -233,13 +173,7 @@ pub mod test { #[test] fn test_source_iter() { - // WrapSource used directly works, as does test_source() - // let s = WrapSource(test_source(), PhantomData); let s = test_source(); - // But if wrapped in GenericSource, complains of - // borrowed value does not live long enough - // at the first s.iter() call - let _ = GenericSource::from(test_source()); assert_eq!( Vec::from_iter(s.iter().map(|e| e.value[0])), vec![0, 1, 2, 3, 4] -- 2.50.1