| 
					
				 | 
			
			
				@@ -1,4 +1,5 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 use binrw::{binrw, BinRead, BinWrite}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+use diff::Diff; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 use num::Num; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 use std::{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     fmt::{Debug, Display}, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -6,25 +7,20 @@ use std::{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ops::{Deref, DerefMut}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-/// Supertrait to simplify constraints 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-pub trait BinReadWrite: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()> + 'static 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-impl<T> BinReadWrite for T where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    T: for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()> + 'static 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /// Wrapper to prefix array of primitives (u8/u32/etc) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #[binrw] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#[derive(Clone, PartialEq)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#[derive(Clone, Diff, PartialEq)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#[diff(attr( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    #[derive(Debug, PartialEq)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+))] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 pub struct ArrayOfPrimitive<T, S = u32> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // Static bounds due to https://github.com/jam1garner/binrw/issues/199 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    T: BinReadWrite + Num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    S: BinReadWrite, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    S: TryFrom<usize> + Display + Debug + Copy + Clone, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    T: for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    T: Debug + Diff + PartialEq + Num + 'static, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <T as Diff>::Repr: Debug + PartialEq, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    S: for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    S: TryFrom<usize> + Copy + Clone + Debug + Display + Diff + PartialEq + 'static, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <S as TryFrom<usize>>::Error: Display + Debug + Send + Sync, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     usize: TryFrom<S>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -41,10 +37,11 @@ where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 impl<T, S> Debug for ArrayOfPrimitive<T, S> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    T: BinReadWrite + Num, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    S: BinReadWrite, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    T: Debug, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    S: TryFrom<usize> + Display + Debug + Copy + Clone, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    T: for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    T: Debug + Diff + PartialEq + Num + 'static, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <T as Diff>::Repr: Debug + PartialEq, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    S: for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    S: TryFrom<usize> + Copy + Clone + Debug + Display + Diff + PartialEq + 'static, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <S as TryFrom<usize>>::Error: Display + Debug + Send + Sync, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     usize: TryFrom<S>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -55,13 +52,18 @@ where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /// Wrapper to prefix array of single non-primitive type 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #[binrw] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#[derive(Clone, PartialEq)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#[derive(Clone, Diff, PartialEq)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#[diff(attr( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    #[derive(Debug, PartialEq)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+))] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 pub struct ArrayOf<T, S = u32> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // Static bounds due to https://github.com/jam1garner/binrw/issues/199 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    T: BinReadWrite, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    S: BinReadWrite, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    S: TryFrom<usize> + Display + Debug + Copy + Clone, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    T: for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    T: Debug + Diff + PartialEq + 'static, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <T as Diff>::Repr: Debug + PartialEq, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    S: for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    S: TryFrom<usize> + Copy + Clone + Debug + Display + Diff + PartialEq + 'static, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <S as TryFrom<usize>>::Error: Display + Debug + Send + Sync, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     usize: TryFrom<S>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -78,10 +80,11 @@ where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 impl<T, S> Debug for ArrayOf<T, S> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    T: BinReadWrite, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    S: BinReadWrite, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    T: Debug, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    S: TryFrom<usize> + Display + Debug + Copy + Clone, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    T: for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    T: Debug + Diff + PartialEq + 'static, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <T as Diff>::Repr: Debug + PartialEq, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    S: for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    S: TryFrom<usize> + Copy + Clone + Debug + Display + Diff + PartialEq + 'static, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <S as TryFrom<usize>>::Error: Display + Debug + Send + Sync, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     usize: TryFrom<S>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -92,9 +95,11 @@ where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 impl<T, S> Deref for ArrayOf<T, S> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    T: BinReadWrite, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    S: BinReadWrite, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    S: TryFrom<usize> + Display + Debug + Copy + Clone, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    T: for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    T: Debug + Diff + PartialEq + 'static, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <T as Diff>::Repr: Debug + PartialEq, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    S: for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    S: TryFrom<usize> + Copy + Clone + Debug + Display + Diff + PartialEq + 'static, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <S as TryFrom<usize>>::Error: Display + Debug + Send + Sync, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     usize: TryFrom<S>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -107,9 +112,11 @@ where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 impl<T, S> DerefMut for ArrayOf<T, S> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    T: BinReadWrite, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    S: BinReadWrite, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    S: TryFrom<usize> + Display + Debug + Copy + Clone, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    T: for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    T: Debug + Diff + PartialEq + 'static, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <T as Diff>::Repr: Debug + PartialEq, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    S: for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    S: TryFrom<usize> + Copy + Clone + Debug + Display + Diff + PartialEq + 'static, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <S as TryFrom<usize>>::Error: Display + Debug + Send + Sync, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     usize: TryFrom<S>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -120,9 +127,11 @@ where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 impl<T, S> From<Vec<T>> for ArrayOf<T, S> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 where 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    T: BinReadWrite, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    S: BinReadWrite, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    S: TryFrom<usize> + Display + Debug + Copy + Clone, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    T: for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    T: Debug + Diff + PartialEq + 'static, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <T as Diff>::Repr: Debug + PartialEq, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    S: for<'a> BinRead<Args<'a> = ()> + for<'a> BinWrite<Args<'a> = ()>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    S: TryFrom<usize> + Copy + Clone + Debug + Display + Diff + PartialEq + 'static, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <S as TryFrom<usize>>::Error: Display + Debug + Send + Sync, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     usize: TryFrom<S>, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 |