cands_presentation/cyphal/digitalservo/
string.rs

1const STRQTY_SIZE: usize = 1;
2
3#[derive(Debug)]
4pub struct Str {
5    pub value: String
6}
7
8impl Str {
9    pub fn serialize(value: &str) -> Vec<u8> {
10
11        /* No. of str length */
12        let str_size: usize = value.len();
13
14        //TODO: error (length > 255)
15
16        let buffer_size: usize = STRQTY_SIZE + str_size;
17        let mut buffer: Vec<u8> = Vec::with_capacity(buffer_size);
18
19        let str_qty: u8 = str_size as u8;
20        buffer.push(str_qty);
21
22        let str_buffer: Vec<u8> = value.as_bytes().to_vec();
23        buffer.extend(str_buffer);
24
25        buffer
26    }
27
28
29    pub fn deserialize(bytearray: &[u8]) -> Result<Str, Box<dyn std::error::Error>>{
30
31        let str_qty: usize = bytearray[0] as usize;
32
33        //TODO: error (length > 255)
34
35        let str_tail_pos: usize = STRQTY_SIZE + str_qty;
36        let string: String = String::from_utf8_lossy(&bytearray[STRQTY_SIZE..str_tail_pos]).to_string();
37
38        Ok( Str { value: string } )
39    }
40}