@@ -96,13 +96,13 @@ impl<'a> Decoder<'a> {
9696 }
9797 }
9898
99- pub fn decode < Source , Callbacks > (
99+ pub fn decode < ' b , Source , Callbacks > (
100100 & mut self ,
101101 source : & mut Source ,
102102 callbacks : & mut Callbacks ,
103103 ) -> Result < ( ) >
104104 where
105- Source : Iterator < Item = u8 > ,
105+ Source : Iterator < Item = & ' b u8 > ,
106106 Callbacks : DecoderCallbacks ,
107107 {
108108 while !self . state . finished ( ) {
@@ -114,13 +114,13 @@ impl<'a> Decoder<'a> {
114114 Ok ( ( ) )
115115 }
116116
117- fn decode_step < Source , Callbacks > (
117+ fn decode_step < ' b , Source , Callbacks > (
118118 & mut self ,
119119 source : & mut Source ,
120120 callbacks : & mut Callbacks ,
121121 ) -> Result < ( ) >
122122 where
123- Source : Iterator < Item = u8 > ,
123+ Source : Iterator < Item = & ' b u8 > ,
124124 Callbacks : DecoderCallbacks ,
125125 {
126126 let mut state = self . state ;
@@ -142,7 +142,10 @@ impl<'a> Decoder<'a> {
142142 Ok ( ( ) )
143143 }
144144
145- fn decode_start < Source : Iterator < Item = u8 > > ( & mut self , source : & mut Source ) -> Result < ( ) > {
145+ fn decode_start < ' b , Source : Iterator < Item = & ' b u8 > > (
146+ & mut self ,
147+ source : & mut Source ,
148+ ) -> Result < ( ) > {
146149 self . state = match self . read_next ( source) {
147150 Ok ( status) => Self :: next_state_for_status ( status) ,
148151 Err ( Error :: MissingData ) => Ok ( State :: Finished ) ,
@@ -151,7 +154,7 @@ impl<'a> Decoder<'a> {
151154 Ok ( ( ) )
152155 }
153156
154- fn decode_partial < Source , Callbacks > (
157+ fn decode_partial < ' b , Source , Callbacks > (
155158 & mut self ,
156159 source : & mut Source ,
157160 callbacks : & mut Callbacks ,
@@ -160,7 +163,7 @@ impl<'a> Decoder<'a> {
160163 required : usize ,
161164 ) -> Result < ( ) >
162165 where
163- Source : Iterator < Item = u8 > ,
166+ Source : Iterator < Item = & ' b u8 > ,
164167 Callbacks : DecoderCallbacks ,
165168 {
166169 let limit = required. min ( self . data_buffer . len ( ) ) ;
@@ -205,14 +208,14 @@ impl<'a> Decoder<'a> {
205208 }
206209 }
207210
208- fn decode_sysex < Source , Callbacks > (
211+ fn decode_sysex < ' b , Source , Callbacks > (
209212 & mut self ,
210213 source : & mut Source ,
211214 callbacks : & mut Callbacks ,
212215 mut len : usize ,
213216 ) -> Result < ( ) >
214217 where
215- Source : Iterator < Item = u8 > ,
218+ Source : Iterator < Item = & ' b u8 > ,
216219 Callbacks : DecoderCallbacks ,
217220 {
218221 while len < self . data_buffer . len ( )
@@ -255,13 +258,13 @@ impl<'a> Decoder<'a> {
255258 }
256259 }
257260
258- fn decode_interleaved_realtime_messages < Source , Callbacks > (
261+ fn decode_interleaved_realtime_messages < ' b , Source , Callbacks > (
259262 & mut self ,
260263 source : & mut Source ,
261264 callbacks : & mut Callbacks ,
262265 ) -> Result < ( ) >
263266 where
264- Source : Iterator < Item = u8 > ,
267+ Source : Iterator < Item = & ' b u8 > ,
265268 Callbacks : DecoderCallbacks ,
266269 {
267270 while self . next_is_status ( source) {
@@ -275,23 +278,32 @@ impl<'a> Decoder<'a> {
275278 Ok ( ( ) )
276279 }
277280
278- pub fn source_is_empty < Source : Iterator < Item = u8 > > ( & mut self , source : & mut Source ) -> bool {
281+ pub fn source_is_empty < ' b , Source : Iterator < Item = & ' b u8 > > (
282+ & mut self ,
283+ source : & mut Source ,
284+ ) -> bool {
279285 self . peek_next ( source) . is_none ( )
280286 }
281287
282- pub fn next_is_status < Source : Iterator < Item = u8 > > ( & mut self , source : & mut Source ) -> bool {
288+ pub fn next_is_status < ' b , Source : Iterator < Item = & ' b u8 > > (
289+ & mut self ,
290+ source : & mut Source ,
291+ ) -> bool {
283292 self . peek_next ( source) . map ( is_midi_status) . unwrap_or ( false )
284293 }
285294
286- pub fn read_next < Source : Iterator < Item = u8 > > ( & mut self , source : & mut Source ) -> Result < u8 > {
295+ pub fn read_next < ' b , Source : Iterator < Item = & ' b u8 > > (
296+ & mut self ,
297+ source : & mut Source ,
298+ ) -> Result < u8 > {
287299 let maybe_byte = self . peek_next ( source) ;
288- self . source_buffer = source. next ( ) ;
300+ self . source_buffer = source. next ( ) . cloned ( ) ;
289301 maybe_byte. ok_or ( Error :: MissingData )
290302 }
291303
292- fn peek_next < Source : Iterator < Item = u8 > > ( & mut self , source : & mut Source ) -> Option < u8 > {
304+ fn peek_next < ' b , Source : Iterator < Item = & ' b u8 > > ( & mut self , source : & mut Source ) -> Option < u8 > {
293305 if self . source_buffer . is_none ( ) {
294- self . source_buffer = source. next ( ) ;
306+ self . source_buffer = source. next ( ) . cloned ( ) ;
295307 }
296308 self . source_buffer
297309 }
@@ -555,7 +567,7 @@ mod tests {
555567 }
556568
557569 fn decodes_successfully ( source : Vec < u8 > , expected : Vec < Message > ) {
558- let mut source = source. into_iter ( ) ;
570+ let mut source = source. iter ( ) ;
559571 decoder_with_mocked_callbacks ( & mut [ 0u8 ; 2 ] , |mut callbacks, mut decoder| {
560572 assert_eq ! ( decoder. decode( & mut source, & mut callbacks) , Ok ( ( ) ) ) ;
561573 assert_eq ! ( callbacks. state( ) . messages, expected) ;
@@ -565,7 +577,8 @@ mod tests {
565577 #[ test]
566578 fn decode_empty_vec ( ) {
567579 decoder_with_mocked_callbacks ( & mut [ ] , |mut callbacks, mut decoder| {
568- let mut source = Vec :: < u8 > :: new ( ) . into_iter ( ) ;
580+ let data = Vec :: < u8 > :: new ( ) ;
581+ let mut source = data. iter ( ) ;
569582 assert_eq ! ( decoder. decode( & mut source, & mut callbacks) , Ok ( ( ) ) ) ;
570583 assert_eq ! ( callbacks. state( ) . num_events, 0 ) ;
571584 } ) ;
@@ -574,7 +587,8 @@ mod tests {
574587 #[ test]
575588 fn reserved_status ( ) {
576589 decoder_with_mocked_callbacks ( & mut [ 0u8 ; 2 ] , |mut callbacks, mut decoder| {
577- let mut source = vec ! [ 0b1111_0100 , 0b1111_0101 , 0b1111_1001 , 0b1111_1101 ] . into_iter ( ) ;
590+ let data = vec ! [ 0b1111_0100 , 0b1111_0101 , 0b1111_1001 , 0b1111_1101 ] ;
591+ let mut source = data. iter ( ) ;
578592
579593 assert_eq ! (
580594 decoder. decode( & mut source, & mut callbacks) ,
@@ -598,7 +612,8 @@ mod tests {
598612 #[ test]
599613 fn unexpected_status ( ) {
600614 decoder_with_mocked_callbacks ( & mut [ 0u8 ; 2 ] , |mut callbacks, mut decoder| {
601- let mut source = vec ! [ 0b1000_0000 , 64 , 0b1000_0001 , 0b1000_0010 , 12 ] . into_iter ( ) ;
615+ let data = vec ! [ 0b1000_0000 , 64 , 0b1000_0001 , 0b1000_0010 , 12 ] ;
616+ let mut source = data. iter ( ) ;
602617
603618 assert_eq ! (
604619 decoder. decode( & mut source, & mut callbacks) ,
@@ -668,7 +683,7 @@ mod tests {
668683 #[ test]
669684 fn unexpected_channel_mode ( ) {
670685 decoder_with_mocked_callbacks ( & mut [ 0u8 ; 2 ] , |mut callbacks, mut decoder| {
671- let mut source = vec ! [
686+ let data = vec ! [
672687 0b1011_0101u8 ,
673688 120 ,
674689 1 ,
@@ -687,8 +702,8 @@ mod tests {
687702 0b1011_0101u8 ,
688703 127 ,
689704 1 ,
690- ]
691- . into_iter ( ) ;
705+ ] ;
706+ let mut source = data . iter ( ) ;
692707
693708 assert_eq ! (
694709 decoder. decode( & mut source, & mut callbacks) ,
@@ -823,7 +838,8 @@ mod tests {
823838 #[ test]
824839 fn decode_reserved ( ) {
825840 decoder_with_mocked_callbacks ( & mut [ ] , |mut callbacks, mut decoder| {
826- let mut source = vec ! [ 0b1111_0100u8 , 0b1111_0101 , 0b1111_1001 , 0b1111_1101 ] . into_iter ( ) ;
841+ let data = vec ! [ 0b1111_0100u8 , 0b1111_0101 , 0b1111_1001 , 0b1111_1101 ] ;
842+ let mut source = data. iter ( ) ;
827843
828844 assert_eq ! (
829845 decoder. decode( & mut source, & mut callbacks) ,
@@ -864,9 +880,9 @@ mod tests {
864880 #[ test]
865881 fn sysex_buffer_overflow ( ) {
866882 decoder_with_mocked_callbacks ( & mut [ 0u8 ; 2 ] , |mut callbacks, mut decoder| {
867- let mut source = vec ! [ 0b1111_0000u8 , 1 , 2 , 3 , 4 , 0b1111_0111 ] . into_iter ( ) ;
883+ let data = vec ! [ 0b1111_0000u8 , 1 , 2 , 3 , 4 , 0b1111_0111 ] ;
868884 assert_eq ! (
869- decoder. decode( & mut source , & mut callbacks) ,
885+ decoder. decode( & mut data . iter ( ) , & mut callbacks) ,
870886 Err ( Error :: DataBufferOverflow )
871887 ) ;
872888 } ) ;
@@ -875,17 +891,17 @@ mod tests {
875891 #[ test]
876892 fn decode_sysex_continuous ( ) {
877893 decoder_with_mocked_callbacks ( & mut [ 0u8 ; 4 ] , |mut callbacks, mut decoder| {
878- let mut source = vec ! [ 0b1111_0000u8 , 1 , 2 , 3 , 4 , 0b1111_0111 ] . into_iter ( ) ;
894+ let data = vec ! [ 0b1111_0000u8 , 1 , 2 , 3 , 4 , 0b1111_0111 ] ;
879895
880- assert_eq ! ( decoder. decode( & mut source , & mut callbacks) , Ok ( ( ) ) ) ;
896+ assert_eq ! ( decoder. decode( & mut data . iter ( ) , & mut callbacks) , Ok ( ( ) ) ) ;
881897 assert_eq ! ( callbacks. state( ) . sysex, vec![ 1u8 , 2 , 3 , 4 ] ) ;
882898 } ) ;
883899 }
884900
885901 #[ test]
886902 fn decode_sysex_interleaved ( ) {
887903 decoder_with_mocked_callbacks ( & mut [ 0u8 ; 4 ] , |mut callbacks, mut decoder| {
888- let mut source = vec ! [
904+ let data = vec ! [
889905 0b1111_0000u8 ,
890906 0b1111_1000u8 ,
891907 1 ,
@@ -896,10 +912,9 @@ mod tests {
896912 4 ,
897913 0b1111_1100 ,
898914 0b1111_0111 ,
899- ]
900- . into_iter ( ) ;
915+ ] ;
901916
902- assert_eq ! ( decoder. decode( & mut source , & mut callbacks) , Ok ( ( ) ) ) ;
917+ assert_eq ! ( decoder. decode( & mut data . iter ( ) , & mut callbacks) , Ok ( ( ) ) ) ;
903918 assert_eq ! (
904919 callbacks. state( ) . messages,
905920 vec![
@@ -916,7 +931,7 @@ mod tests {
916931 #[ test]
917932 fn decode_sysex_interleaved_split ( ) {
918933 decoder_with_mocked_callbacks ( & mut [ 0u8 ; 4 ] , |mut callbacks, mut decoder| {
919- let mut sources = vec ! [
934+ let dataset = vec ! [
920935 0b1111_0000u8 ,
921936 0b1111_1000u8 ,
922937 1 ,
@@ -926,51 +941,20 @@ mod tests {
926941 3 ,
927942 4 ,
928943 0b1111_1100 ,
929- 0b1111_0111 ,
930944 ]
931945 . into_iter ( )
932- . map ( |value| vec ! [ value] . into_iter ( ) ) ;
946+ . map ( |value| vec ! [ value] )
947+ . collect :: < Vec < Vec < u8 > > > ( ) ;
933948
934- assert_eq ! (
935- decoder. decode( & mut sources. next( ) . unwrap( ) , & mut callbacks) ,
936- Err ( Error :: MissingData )
937- ) ;
938- assert_eq ! (
939- decoder. decode( & mut sources. next( ) . unwrap( ) , & mut callbacks) ,
940- Err ( Error :: MissingData )
941- ) ;
942- assert_eq ! (
943- decoder. decode( & mut sources. next( ) . unwrap( ) , & mut callbacks) ,
944- Err ( Error :: MissingData )
945- ) ;
946- assert_eq ! (
947- decoder. decode( & mut sources. next( ) . unwrap( ) , & mut callbacks) ,
948- Err ( Error :: MissingData )
949- ) ;
950- assert_eq ! (
951- decoder. decode( & mut sources. next( ) . unwrap( ) , & mut callbacks) ,
952- Err ( Error :: MissingData )
953- ) ;
954- assert_eq ! (
955- decoder. decode( & mut sources. next( ) . unwrap( ) , & mut callbacks) ,
956- Err ( Error :: MissingData )
957- ) ;
958- assert_eq ! (
959- decoder. decode( & mut sources. next( ) . unwrap( ) , & mut callbacks) ,
960- Err ( Error :: MissingData )
961- ) ;
962- assert_eq ! (
963- decoder. decode( & mut sources. next( ) . unwrap( ) , & mut callbacks) ,
964- Err ( Error :: MissingData )
965- ) ;
966- assert_eq ! (
967- decoder. decode( & mut sources. next( ) . unwrap( ) , & mut callbacks) ,
968- Err ( Error :: MissingData )
969- ) ;
970- assert_eq ! (
971- decoder. decode( & mut sources. next( ) . unwrap( ) , & mut callbacks) ,
972- Ok ( ( ) )
973- ) ;
949+ dataset. iter ( ) . take ( 9 ) . for_each ( |data| {
950+ assert_eq ! (
951+ decoder. decode( & mut data. iter( ) , & mut callbacks) ,
952+ Err ( Error :: MissingData )
953+ ) ;
954+ } ) ;
955+
956+ let source = vec ! [ 0b1111_0111 ] ;
957+ assert_eq ! ( decoder. decode( & mut source. iter( ) , & mut callbacks) , Ok ( ( ) ) ) ;
974958
975959 assert_eq ! (
976960 callbacks. state( ) . messages,
@@ -988,8 +972,8 @@ mod tests {
988972 #[ test]
989973 fn decode_stop ( ) {
990974 decoder_with_mocked_callbacks ( & mut [ 0u8 ; 2 ] , |mut callbacks, mut decoder| {
991- let mut source = vec ! [ 0b1000_0000 , 64 , 0b1111_1000u8 , 12 , 0b1111_1010u8 ] . into_iter ( ) ;
992-
975+ let data = vec ! [ 0b1000_0000 , 64 , 0b1111_1000u8 , 12 , 0b1111_1010u8 ] ;
976+ let mut source = data . iter ( ) ;
993977 callbacks. state_mut ( ) . max_events = 1 ;
994978
995979 assert_eq ! ( decoder. decode( & mut source, & mut callbacks) , Err ( Stopped ) ) ;
0 commit comments