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