rsa_msg_packets/util/
tools.rs

1use 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}