| 
					
				 | 
			
			
				@@ -5,8 +5,10 @@ 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}; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -254,89 +256,38 @@ impl Default for ObjectType { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#[derive(Copy, Clone, Debug, Diff, PartialEq, strum::Display, Serialize, Deserialize, EnumIter)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#[derive( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Copy, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Clone, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Debug, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Diff, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    PartialEq, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    strum::Display, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Serialize_repr, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Deserialize_repr, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    EnumIter, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    IntoPrimitive, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TryFromPrimitive, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #[diff(attr( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     #[derive(Debug, PartialEq)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ))] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#[serde(try_from = "u32")] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#[serde(into = "u32")] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #[repr(u32)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 pub enum PulseWidth { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    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), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    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, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |