| 
					
				 | 
			
			
				@@ -5,10 +5,9 @@ use std::{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 use binrw::{binrw, BinRead, BinWrite}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 use diff::{Diff, VecDiff}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-use num_enum::{IntoPrimitive, TryFromPrimitive}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 use rand::{thread_rng, Rng}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 use serde::{Deserialize, Serialize}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-use serde_repr::{Deserialize_repr, Serialize_repr}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+use strum::EnumIter; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 use crate::{array_of::ArrayOfPrimitive, field_of::FieldOf}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -255,40 +254,89 @@ impl Default for ObjectType { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#[derive( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Copy, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Clone, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Debug, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Diff, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    PartialEq, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    BinRead, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    BinWrite, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    strum::Display, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Serialize_repr, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Deserialize_repr, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    IntoPrimitive, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    TryFromPrimitive, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#[derive(Copy, Clone, Debug, Diff, PartialEq, strum::Display, Serialize, Deserialize, EnumIter)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #[diff(attr( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     #[derive(Debug, PartialEq)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ))] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#[brw(repr(u32))] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#[serde(try_from = "u32")] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#[serde(into = "u32")] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #[repr(u32)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 pub enum PulseWidth { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns2 = 2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns4 = 4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns6 = 6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns8 = 8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns12 = 12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns20 = 20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns30 = 30, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns45 = 45, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns60 = 60, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns80 = 80, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns100 = 100, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns150 = 150, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns200 = 200, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns250 = 250, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns350 = 350, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ns500 = 500, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns30, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns45, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns60, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns80, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns100, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns150, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns200, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns250, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns350, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Ns500, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+impl From<PulseWidth> for u32 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fn from(value: PulseWidth) -> Self { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        match value { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns2 => 2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns4 => 4, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns6 => 6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns8 => 8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns12 => 12, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns20 => 20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns30 => 30, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns45 => 45, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns60 => 60, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns80 => 80, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns100 => 100, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns150 => 150, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns200 => 200, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns250 => 250, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns350 => 350, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidth::Ns500 => 500, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+pub enum PulseWidthError { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Unsupported, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+impl Display for PulseWidthError { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        match self { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PulseWidthError::Unsupported => write!(f, "Unsupported pulse width value"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+impl TryFrom<u32> for PulseWidth { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    type Error = PulseWidthError; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fn try_from(value: u32) -> Result<Self, Self::Error> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        match value { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            2 => Ok(PulseWidth::Ns2), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            4 => Ok(PulseWidth::Ns4), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            6 => Ok(PulseWidth::Ns6), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            8 => Ok(PulseWidth::Ns8), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            12 => Ok(PulseWidth::Ns12), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            20 => Ok(PulseWidth::Ns20), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            30 => Ok(PulseWidth::Ns30), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            45 => Ok(PulseWidth::Ns45), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            60 => Ok(PulseWidth::Ns60), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            80 => Ok(PulseWidth::Ns80), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            100 => Ok(PulseWidth::Ns100), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            150 => Ok(PulseWidth::Ns150), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            200 => Ok(PulseWidth::Ns200), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            250 => Ok(PulseWidth::Ns250), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            350 => Ok(PulseWidth::Ns350), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            500 => Ok(PulseWidth::Ns500), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            _ => Err(PulseWidthError::Unsupported), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |