From b7ee4259057bcc8045efd885666caeb5ef45fdc3 Mon Sep 17 00:00:00 2001
From: Tangent 128 <Tangent128@gmail.com>
Date: Sat, 7 Apr 2018 01:09:17 -0400
Subject: [PATCH] Tidy Stream extension trait impl

---
 notes.md             |  1 -
 src/chunk.rs         | 10 ++++------
 src/fixers.rs        | 10 ++++------
 src/stream_parser.rs | 10 ++++------
 4 files changed, 12 insertions(+), 19 deletions(-)

diff --git a/notes.md b/notes.md
index 626e18d..ccac46b 100644
--- a/notes.md
+++ b/notes.md
@@ -1,3 +1,2 @@
 * support memory limit as toplevel limit on buffer size when Ok(None) (so only needed in futures/Read version)
 * rustfmt modules
-* bytestream source for ebml parsing
diff --git a/src/chunk.rs b/src/chunk.rs
index 7ccdfa4..7bfdf35 100644
--- a/src/chunk.rs
+++ b/src/chunk.rs
@@ -242,12 +242,8 @@ impl<S: EbmlEventSource> Stream for WebmChunker<S>
     }
 }
 
-pub trait WebmStream<T: EbmlEventSource> {
-    fn chunk_webm(self) -> WebmChunker<T>;
-}
-
-impl<'a, T: EbmlEventSource> WebmStream<T> for T {
-    fn chunk_webm(self) -> WebmChunker<T> {
+pub trait WebmStream where Self: Sized + EbmlEventSource {
+    fn chunk_webm(self) -> WebmChunker<Self> {
         WebmChunker {
             source: self,
             state: ChunkerState::BuildingHeader(Cursor::new(Vec::new()))
@@ -255,6 +251,8 @@ impl<'a, T: EbmlEventSource> WebmStream<T> for T {
     }
 }
 
+impl<T: EbmlEventSource> WebmStream for T {}
+
 #[cfg(test)]
 mod tests {
 
diff --git a/src/fixers.rs b/src/fixers.rs
index 9974bbc..4d73050 100644
--- a/src/fixers.rs
+++ b/src/fixers.rs
@@ -42,12 +42,8 @@ impl<S: Stream<Item = Chunk>> Stream for ChunkTimecodeFixer<S>
     }
 }
 
-pub trait ChunkStream<T> {
-    fn fix_timecodes(self) -> ChunkTimecodeFixer<T>;
-}
-
-impl<T: Stream<Item = Chunk>> ChunkStream<T> for T {
-    fn fix_timecodes(self) -> ChunkTimecodeFixer<T> {
+pub trait ChunkStream where Self : Sized + Stream<Item = Chunk> {
+    fn fix_timecodes(self) -> ChunkTimecodeFixer<Self> {
         ChunkTimecodeFixer {
             stream: self,
             current_offset: 0,
@@ -57,3 +53,5 @@ impl<T: Stream<Item = Chunk>> ChunkStream<T> for T {
         }
     }
 }
+
+impl<T: Stream<Item = Chunk>> ChunkStream for T {}
diff --git a/src/stream_parser.rs b/src/stream_parser.rs
index ee8b120..278410a 100644
--- a/src/stream_parser.rs
+++ b/src/stream_parser.rs
@@ -18,12 +18,8 @@ pub struct EbmlStreamingParser<S> {
     last_read: usize
 }
 
-pub trait StreamEbml<I: AsRef<[u8]>, S: Stream<Item = I>> {
-    fn parse_ebml(self) -> EbmlStreamingParser<S>;
-}
-
-impl<I: AsRef<[u8]>, S: Stream<Item = I>> StreamEbml<I, S> for S {
-    fn parse_ebml(self) -> EbmlStreamingParser<S> {
+pub trait StreamEbml where Self: Sized + Stream, Self::Item: AsRef<[u8]> {
+    fn parse_ebml(self) -> EbmlStreamingParser<Self> {
         EbmlStreamingParser {
             stream: self,
             buffer: BytesMut::new(),
@@ -32,6 +28,8 @@ impl<I: AsRef<[u8]>, S: Stream<Item = I>> StreamEbml<I, S> for S {
     }
 }
 
+impl<I: AsRef<[u8]>, S: Stream<Item = I>> StreamEbml for S {}
+
 impl<I: AsRef<[u8]>, S: Stream<Item = I>> EbmlStreamingParser<S> {
     pub fn poll_event<'a, T: FromEbml<'a>>(&'a mut self) -> Result<Async<Option<T>>, ParsingError<S::Error>> {
         // release buffer from previous event