Skip to content

Commit 074dd26

Browse files
Handle bits
1 parent d83cc58 commit 074dd26

File tree

1 file changed

+23
-23
lines changed

1 file changed

+23
-23
lines changed

src/telemetry.rs

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
214204
impl 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

433423
impl 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

Comments
 (0)