rsa_msg_packets/util/
tools.rs1use anyhow::anyhow;
2use uuid::Uuid;
3
4use crate::consts::{U64_SIZE, UUID_SIZE};
5
6pub fn bytes_to_uuid(v: &Vec<u8>) -> anyhow::Result<Uuid> {
7 if v.len() != UUID_SIZE {
8 return Err(anyhow!(format!(
9 "Invalid length of uuid. Length is {}",
10 v.len()
11 )));
12 }
13
14 let mut buff: [u8; UUID_SIZE] = [0; UUID_SIZE];
15 for i in 0..UUID_SIZE {
16 buff[i] = v.get(i).unwrap().to_owned();
17 }
18
19 let uuid = Uuid::from_bytes(buff);
20 return Ok(uuid);
21}
22
23pub fn uuid_from_vec(v: &mut Vec<u8>) -> anyhow::Result<Uuid> {
24 if v.len() < UUID_SIZE {
25 return Err(anyhow!("Could not get uuid from packet."));
26 }
27
28 let uuid = v.splice(0..UUID_SIZE, vec![]);
29 let uuid = Vec::from_iter(uuid);
30
31 let uuid = bytes_to_uuid(&uuid)?;
32 return Ok(uuid);
33}
34
35pub fn u64_from_vec(v: &mut Vec<u8>) -> anyhow::Result<u64> {
36 if v.len() < U64_SIZE {
37 return Err(anyhow!(format!(
38 "Cannot parse u64 as vector is not long enough ({} items)",
39 v.len()
40 )));
41 }
42
43 let temp = v.splice(0..U64_SIZE, vec![]);
44 let temp = Vec::from_iter(temp);
45
46 let mut buff: [u8; U64_SIZE] = [0; U64_SIZE];
47 for i in 0..U64_SIZE {
48 buff[i] = temp.get(i).unwrap().to_owned();
49 }
50
51 let numb = u64::from_le_bytes(buff);
52 Ok(numb)
53}
54
55pub fn usize_to_vec(size: usize) -> anyhow::Result<Vec<u8>> {
56 let raw: u64 = u64::try_from(size)?;
57
58 return Ok(raw.to_le_bytes().to_vec());
59}
60
61pub fn vec_to_usize(v: &mut Vec<u8>) -> anyhow::Result<usize> {
62 let raw_numb = u64_from_vec(v)?;
63 let numb = usize::try_from(raw_numb);
64
65 if numb.is_err() {
66 eprintln!("Err: {}", numb.unwrap_err());
67 return Err(anyhow!("Usize could not be parsed. Number exceeds usize max."));
68 }
69
70 Ok(numb.unwrap())
71}