don't use casts like that
parent
5e2ad524b0
commit
b135077b8f
|
@ -4,14 +4,14 @@ use crate::durandal::err::*;
|
|||
use serde::Serialize;
|
||||
use std::{fmt, num::NonZeroU16, slice::SliceIndex};
|
||||
|
||||
/// Returns a byte array from `b` at `i`.
|
||||
/// Returns a `[u8]` from `b` at `i`.
|
||||
pub fn c_data<I>(b: &[u8], i: I) -> ResultS<&<I as SliceIndex<[u8]>>::Output>
|
||||
where I: SliceIndex<[u8]>
|
||||
{
|
||||
ok!(b.get(i), "not enough data")
|
||||
}
|
||||
|
||||
/// Returns a byte from `b` at `i`.
|
||||
/// Returns a `u8` from `b` at `i`.
|
||||
pub fn c_byte(b: &[u8], i: usize) -> ResultS<u8>
|
||||
{
|
||||
match b.get(i) {
|
||||
|
@ -70,6 +70,16 @@ pub fn o_u32b(b: &[u8], i: usize) -> Option<u32>
|
|||
}
|
||||
}
|
||||
|
||||
/// Returns a big-endian `i32` from `b` at `i`.
|
||||
pub fn o_i32b(b: &[u8], i: usize) -> Option<i32>
|
||||
{
|
||||
if i + 3 < b.len() {
|
||||
Some(i32::from_be_bytes([b[i], b[i + 1], b[i + 2], b[i + 3]]))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns a big-endian `u16` from `b` at `i`.
|
||||
pub fn o_u16b(b: &[u8], i: usize) -> Option<u16>
|
||||
{
|
||||
|
@ -80,12 +90,13 @@ pub fn o_u16b(b: &[u8], i: usize) -> Option<u16>
|
|||
}
|
||||
}
|
||||
|
||||
/// Returns a big-endian `i32` from `b` at `i`.
|
||||
pub fn o_i32b(b: &[u8], i: usize) -> Option<i32>
|
||||
/// Returns a big-endian `i16` from `b` at `i`.
|
||||
pub fn o_i16b(b: &[u8], i: usize) -> Option<i16>
|
||||
{
|
||||
match o_u32b(b, i) {
|
||||
Some(n) => Some(n as i32),
|
||||
None => None,
|
||||
if i + 1 < b.len() {
|
||||
Some(i16::from_be_bytes([b[i], b[i + 1]]))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -124,7 +135,7 @@ impl ObjID
|
|||
{
|
||||
match self.0 {
|
||||
None => None,
|
||||
Some(n) => Some(n.get()),
|
||||
Some(n) => Some(n.get() - 1),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue