Skip to content

Commit c54cc6d

Browse files
committed
Add support for decoding ReadRangeValueType (bool, unsigned,
signed and NULL).
1 parent f2d1748 commit c54cc6d

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

src/application_protocol/confirmed.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ impl<'a> ComplexAckService<'a> {
377377
}
378378
ConfirmedServiceChoice::ReadPropMultiple => {
379379
let buf = &buf[reader.index..reader.end];
380-
let service = ReadPropertyMultipleAck::new_from_buf(buf);
380+
let service = ReadPropertyMultipleAck::new_from_buf(&buf[reader.index..]);
381381
Ok(ComplexAckService::ReadPropertyMultiple(service))
382382
}
383383
ConfirmedServiceChoice::ReadRange => {

src/application_protocol/services/read_range.rs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -330,35 +330,35 @@ impl<'a> ReadRangeItem<'a> {
330330
reader,
331331
buf,
332332
TagNumber::ContextSpecificOpening(Self::DATE_TIME_TAG),
333-
"ReadRangeItem decode",
333+
"ReadRangeItem decode open date time",
334334
)?;
335335
Tag::decode_expected(
336336
reader,
337337
buf,
338338
TagNumber::Application(ApplicationTagNumber::Date),
339-
"ReadRangeItem decode",
339+
"ReadRangeItem decode date",
340340
)?;
341341
let date = Date::decode(reader, buf)?;
342342
Tag::decode_expected(
343343
reader,
344344
buf,
345345
TagNumber::Application(ApplicationTagNumber::Time),
346-
"ReadRangeItem decode",
346+
"ReadRangeItem decode time",
347347
)?;
348348
let time = Time::decode(reader, buf)?;
349349
Tag::decode_expected(
350350
reader,
351351
buf,
352352
TagNumber::ContextSpecificClosing(Self::DATE_TIME_TAG),
353-
"ReadRangeItem decode",
353+
"ReadRangeItem decode close date time",
354354
)?;
355355

356356
// value
357357
Tag::decode_expected(
358358
reader,
359359
buf,
360360
TagNumber::ContextSpecificOpening(Self::VALUE_TAG),
361-
"ReadRangeItem decode",
361+
"ReadRangeItem decode open value",
362362
)?;
363363
let tag = Tag::decode(reader, buf)?;
364364
let value_type: ReadRangeValueType = match tag.number {
@@ -371,22 +371,37 @@ impl<'a> ReadRangeItem<'a> {
371371
ReadRangeValueType::Real => {
372372
let value = f32::from_be_bytes(reader.read_bytes(buf)?);
373373
ReadRangeValue::Real(value)
374-
}
374+
},
375+
ReadRangeValueType::Bool => {
376+
let bytes = reader.read_byte(buf)?;
377+
ReadRangeValue::Bool(bytes > 0)
378+
},
379+
ReadRangeValueType::Unsigned => {
380+
let value = u32::from_be_bytes(reader.read_bytes(buf)?);
381+
ReadRangeValue::Unsigned(value)
382+
},
383+
ReadRangeValueType::Signed => {
384+
let value = i32::from_be_bytes(reader.read_bytes(buf)?);
385+
ReadRangeValue::Signed(value)
386+
},
387+
ReadRangeValueType::Null => {
388+
ReadRangeValue::Null
389+
},
375390
x => return Err(Error::Unimplemented(Unimplemented::ReadRangeValueType(x))),
376391
};
377392
Tag::decode_expected(
378393
reader,
379394
buf,
380395
TagNumber::ContextSpecificClosing(Self::VALUE_TAG),
381-
"ReadRangeItem decode",
396+
"ReadRangeItem decode close value",
382397
)?;
383398

384399
// status flags
385400
Tag::decode_expected(
386401
reader,
387402
buf,
388403
TagNumber::ContextSpecific(Self::STATUS_FLAGS_TAG),
389-
"ReadRangeItem decode",
404+
"ReadRangeItem decode status",
390405
)?;
391406
let status_flags = BitString::decode(&PropertyId::PropStatusFlags, tag.value, reader, buf)?;
392407

0 commit comments

Comments
 (0)