chore: move primitive{reader,build} to utils
This commit is contained in:
parent
890aee8f72
commit
5cf693b7bb
3 changed files with 96 additions and 98 deletions
|
@ -1,5 +1,6 @@
|
||||||
use num_enum::TryFromPrimitive;
|
use num_enum::TryFromPrimitive;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
use super::utils::{PrimitiveBuilder, PrimitiveReader};
|
||||||
|
|
||||||
use crate::{LibraryError, LibraryResult};
|
use crate::{LibraryError, LibraryResult};
|
||||||
|
|
||||||
|
@ -81,104 +82,6 @@ pub struct Command {
|
||||||
metadata: Vec<u8>
|
metadata: Vec<u8>
|
||||||
}
|
}
|
||||||
|
|
||||||
struct PrimitiveBuilder {
|
|
||||||
bin: Vec<u8>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PrimitiveBuilder {
|
|
||||||
fn new() -> Self {
|
|
||||||
PrimitiveBuilder {
|
|
||||||
bin: Vec::new()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn write_u8(self, number: u8) -> Self {
|
|
||||||
self.write_array(&[number])
|
|
||||||
}
|
|
||||||
|
|
||||||
fn write_u16(self, number: u16) -> Self {
|
|
||||||
self.write_array(&number.to_be_bytes())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn write_u32(self, number: u32) -> Self {
|
|
||||||
self.write_array(&number.to_be_bytes())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn write_array(mut self, new: &[u8]) -> Self {
|
|
||||||
for b in new {
|
|
||||||
self.bin.push(*b);
|
|
||||||
}
|
|
||||||
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
fn write_array_with_len(self, bin: &[u8]) -> Self {
|
|
||||||
self
|
|
||||||
.write_u32(bin.len() as u32)
|
|
||||||
.write_array(bin)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn finish(self) -> Vec<u8> {
|
|
||||||
self.bin
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct PrimitiveReader<'a> {
|
|
||||||
offset: usize,
|
|
||||||
vec: &'a [u8],
|
|
||||||
}
|
|
||||||
|
|
||||||
// Yes, I know Cursor exists and eio exists. from_be_bytes should be a stdlib trait tho.
|
|
||||||
impl<'a> PrimitiveReader<'a> {
|
|
||||||
fn read_u8(&mut self) -> u8 {
|
|
||||||
let number = self.vec[self.offset];
|
|
||||||
self.offset += 1;
|
|
||||||
number
|
|
||||||
}
|
|
||||||
|
|
||||||
fn read_u16(&mut self) -> u16 {
|
|
||||||
let arr: [u8; 2] = self.read_arr_const();
|
|
||||||
u16::from_be_bytes(arr)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn read_u32(&mut self) -> u32 {
|
|
||||||
let arr: [u8; 4] = self.read_arr_const();
|
|
||||||
u32::from_be_bytes(arr)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn read_u64(&mut self) -> u64 {
|
|
||||||
let arr: [u8; 8] = self.read_arr_const();
|
|
||||||
u64::from_be_bytes(arr)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn read_arr_const<const N: usize>(&mut self) -> [u8; N] {
|
|
||||||
let mut arr = [0u8; N];
|
|
||||||
for n in 0..N {
|
|
||||||
arr[n] = self.read_u8();
|
|
||||||
}
|
|
||||||
|
|
||||||
return arr;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn read_arr(&mut self, n: usize) -> Vec<u8> {
|
|
||||||
let mut arr: Vec<u8> = vec![];
|
|
||||||
for _ in 0..n {
|
|
||||||
arr.push(self.read_u8());
|
|
||||||
}
|
|
||||||
|
|
||||||
arr
|
|
||||||
}
|
|
||||||
|
|
||||||
fn read_arr_from_len(&mut self) -> Vec<u8> {
|
|
||||||
let size = self.read_u32() as usize;
|
|
||||||
self.read_arr(size)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn left_to_process(&self) -> usize {
|
|
||||||
self.vec.len() - self.offset
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Command {
|
impl Command {
|
||||||
fn checksum(bin: &[u8]) -> u16 {
|
fn checksum(bin: &[u8]) -> u16 {
|
||||||
// CRC16 of some kind...
|
// CRC16 of some kind...
|
||||||
|
|
|
@ -8,6 +8,8 @@ pub use types::*;
|
||||||
mod api;
|
mod api;
|
||||||
pub mod crypto;
|
pub mod crypto;
|
||||||
|
|
||||||
|
pub(crate) mod utils;
|
||||||
|
|
||||||
#[cfg(feature = "locker_register_base")]
|
#[cfg(feature = "locker_register_base")]
|
||||||
mod register_base;
|
mod register_base;
|
||||||
#[cfg(feature = "locker_register_regtoken")]
|
#[cfg(feature = "locker_register_regtoken")]
|
||||||
|
|
93
libpaket/src/locker/utils.rs
Normal file
93
libpaket/src/locker/utils.rs
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
pub(crate) struct PrimitiveBuilder {
|
||||||
|
pub bin: Vec<u8>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PrimitiveBuilder {
|
||||||
|
pub(crate) fn new() -> Self {
|
||||||
|
PrimitiveBuilder { bin: Vec::new() }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn write_u8(self, number: u8) -> Self {
|
||||||
|
self.write_array(&[number])
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn write_u16(self, number: u16) -> Self {
|
||||||
|
self.write_array(&number.to_be_bytes())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn write_u32(self, number: u32) -> Self {
|
||||||
|
self.write_array(&number.to_be_bytes())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn write_array(mut self, new: &[u8]) -> Self {
|
||||||
|
for b in new {
|
||||||
|
self.bin.push(*b);
|
||||||
|
}
|
||||||
|
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn write_array_with_len(self, bin: &[u8]) -> Self {
|
||||||
|
self.write_u32(bin.len() as u32).write_array(bin)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn finish(self) -> Vec<u8> {
|
||||||
|
self.bin
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) struct PrimitiveReader<'a> {
|
||||||
|
pub offset: usize,
|
||||||
|
pub vec: &'a [u8],
|
||||||
|
}
|
||||||
|
|
||||||
|
// Yes, I know Cursor exists and eio exists. from_be_bytes should be a stdlib trait tho.
|
||||||
|
impl<'a> PrimitiveReader<'a> {
|
||||||
|
pub(crate) fn read_u8(&mut self) -> u8 {
|
||||||
|
let number = self.vec[self.offset];
|
||||||
|
self.offset += 1;
|
||||||
|
number
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn read_u16(&mut self) -> u16 {
|
||||||
|
let arr: [u8; 2] = self.read_arr_const();
|
||||||
|
u16::from_be_bytes(arr)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn read_u32(&mut self) -> u32 {
|
||||||
|
let arr: [u8; 4] = self.read_arr_const();
|
||||||
|
u32::from_be_bytes(arr)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn read_u64(&mut self) -> u64 {
|
||||||
|
let arr: [u8; 8] = self.read_arr_const();
|
||||||
|
u64::from_be_bytes(arr)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn read_arr_const<const N: usize>(&mut self) -> [u8; N] {
|
||||||
|
let mut arr = [0u8; N];
|
||||||
|
for n in 0..N {
|
||||||
|
arr[n] = self.read_u8();
|
||||||
|
}
|
||||||
|
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn read_arr(&mut self, n: usize) -> Vec<u8> {
|
||||||
|
let mut arr: Vec<u8> = vec![];
|
||||||
|
for _ in 0..n {
|
||||||
|
arr.push(self.read_u8());
|
||||||
|
}
|
||||||
|
|
||||||
|
arr
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn read_arr_from_len(&mut self) -> Vec<u8> {
|
||||||
|
let size = self.read_u32() as usize;
|
||||||
|
self.read_arr(size)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn left_to_process(&self) -> usize {
|
||||||
|
self.vec.len() - self.offset
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue