@@ -169,6 +169,7 @@ pub enum Value {
169169 DOUBLE ( f64 ) ,
170170 UNKNOWN ( ( ) ) ,
171171 IntVec ( Vec < i32 > ) ,
172+ UIntVec ( Vec < u32 > ) ,
172173 FloatVec ( Vec < f32 > ) ,
173174 BoolVec ( Vec < bool > ) ,
174175}
@@ -191,7 +192,7 @@ impl Value {
191192 pub fn size ( & self ) -> usize {
192193 match self {
193194 Self :: CHAR ( _) | Self :: BOOL ( _) | Self :: BoolVec ( _) => 1 ,
194- Self :: INT ( _) | Self :: BITS ( _) | Self :: FLOAT ( _) | Self :: IntVec ( _) | Self :: FloatVec ( _) => {
195+ Self :: INT ( _) | Self :: BITS ( _) | Self :: FLOAT ( _) | Self :: IntVec ( _) | Self :: UIntVec ( _ ) | Self :: FloatVec ( _) => {
195196 4
196197 }
197198 Self :: DOUBLE ( _) => 8 ,
@@ -200,17 +201,6 @@ impl Value {
200201 }
201202}
202203
203- impl TryFrom < Value > for i32 {
204- type Error = & ' static str ;
205-
206- fn try_from ( value : Value ) -> Result < Self , Self :: Error > {
207- match value {
208- Value :: INT ( i) => Ok ( i) ,
209- _ => Err ( "Value is not an i32" ) ,
210- }
211- }
212- }
213-
214204impl TryFrom < Value > for u32 {
215205 type Error = & ' static str ;
216206
@@ -228,8 +218,8 @@ impl TryFrom<Value> for i32 {
228218
229219 fn try_from ( value : Value ) -> Result < Self , Self :: Error > {
230220 match value {
231- Value :: BITS ( u) => Ok ( u) ,
232- Value :: INT ( i) if i >= 0 => Ok ( i as i32 ) ,
221+ Value :: BITS ( u) => Ok ( u as i32 ) ,
222+ Value :: INT ( i) if i >= 0 => Ok ( i) ,
233223 _ => Err ( "Value is not a i32" ) ,
234224 }
235225 }
@@ -240,7 +230,7 @@ impl TryFrom<Value> for i64 {
240230
241231 fn try_from ( value : Value ) -> Result < Self , Self :: Error > {
242232 match value {
243- Value :: BITS ( u) => Ok ( u) ,
233+ Value :: BITS ( u) => Ok ( u as i64 ) ,
244234 Value :: INT ( i) if i >= 0 => Ok ( i as i64 ) ,
245235 _ => Err ( "Value is not a i64" ) ,
246236 }
@@ -297,8 +287,8 @@ impl TryFrom<Value> for Vec<u32> {
297287
298288 fn try_from ( value : Value ) -> Result < Self , Self :: Error > {
299289 match value {
300- Value :: IntVec ( v) => Ok ( v) ,
301- _ => Err ( "Value is not an IntVec " ) ,
290+ Value :: UIntVec ( v) => Ok ( v) ,
291+ _ => Err ( "Value is not an UIntVec " ) ,
302292 }
303293 }
304294}
@@ -426,8 +416,8 @@ impl Header {
426416 }
427417}
428418
429- fn create_header_hashmap ( header : & Vec < ValueHeader > ) -> HashMap < String , ValueHeader > {
430- HashMap :: from_iter ( header. iter ( ) . map ( |v| ( String :: from ( v. name ( ) ) , v. clone ( ) ) ) )
419+ fn create_header_hashmap ( header : & [ ValueHeader ] ) -> HashMap < String , ValueHeader > {
420+ HashMap :: from_iter ( header. iter ( ) . map ( |v| ( v. name ( ) , v. clone ( ) ) ) )
431421}
432422
433423impl Sample {
@@ -539,7 +529,17 @@ impl Sample {
539529 }
540530 }
541531 Value :: DOUBLE ( _) => Value :: DOUBLE ( f64:: from_le_bytes ( raw_val. try_into ( ) . unwrap ( ) ) ) ,
542- Value :: BITS ( _) => Value :: BITS ( u32:: from_le_bytes ( raw_val. try_into ( ) . unwrap ( ) ) ) ,
532+ Value :: BITS ( _) => {
533+ if vc == 1 {
534+ Value :: BITS ( u32:: from_le_bytes ( raw_val. try_into ( ) . unwrap ( ) ) )
535+ } else {
536+ let mut values: Vec < u32 > = Vec :: with_capacity ( vc) ;
537+ for i in 0 ..vc - 1 {
538+ values. push ( u32:: from_le_bytes ( raw_val. try_into ( ) . unwrap ( ) ) ) ;
539+ }
540+ Value :: UIntVec ( values)
541+ }
542+ }
543543 Value :: CHAR ( _) => Value :: CHAR ( raw_val[ 0 ] ) ,
544544 Value :: BOOL ( _) => {
545545 if vc == 1 {
@@ -604,7 +604,7 @@ pub enum SampleError {
604604 NoValue ( String ) ,
605605}
606606
607- impl < ' conn > Blocking < ' conn > {
607+ impl Blocking < ' _ > {
608608 fn new ( location : * const c_void ) -> IOResult < Self > {
609609 let mut event_name: Vec < u16 > = DATA_EVENT_NAME . encode_utf16 ( ) . collect ( ) ;
610610 event_name. push ( 0 ) ;
@@ -682,7 +682,7 @@ impl<'conn> Blocking<'conn> {
682682 }
683683}
684684
685- impl < ' conn > Drop for Blocking < ' conn > {
685+ impl Drop for Blocking < ' _ > {
686686 fn drop ( & mut self ) {
687687 unsafe {
688688 let succ = CloseHandle ( self . event_handle ) ;
@@ -865,7 +865,7 @@ mod tests {
865865
866866 #[ test]
867867 fn test_latest_telemetry ( ) {
868- let session_tick: u32 = Connection :: new ( )
868+ let session_tick: Sample = Connection :: new ( )
869869 . expect ( "Unable to open telemetry" )
870870 . telemetry ( ) ;
871871 }
0 commit comments