ble_data_struct/windows/
buffer.rs1#[cfg(target_os = "windows")]
2use windows::{
3 core::Error,
4 Storage::Streams::{DataReader, DataWriter, IBuffer},
5};
6
7#[cfg(target_os = "windows")]
25pub fn i_buffer_to_vec(i_buffer: IBuffer) -> Result<Vec<u8>, Error> {
26 let reader = match DataReader::FromBuffer(&i_buffer) {
27 Ok(reader) => reader,
28 Err(error) => return Err(error),
29 };
30
31 let length = match reader.UnconsumedBufferLength() {
32 Ok(length) => length as u8,
33 Err(error) => return Err(error),
34 };
35
36 let mut read_buffer = vec![0u8; length as usize];
37 match reader.ReadBytes(read_buffer.as_mut()) {
38 Ok(_) => Ok(read_buffer),
39 Err(error) => Err(error),
40 }
41}
42
43#[cfg(target_os = "windows")]
64pub fn vec_to_i_buffer(vec: &Vec<u8>) -> Result<IBuffer, Error> {
65 let data_writer = match DataWriter::new() {
66 Ok(writer) => writer,
67 Err(error) => return Err(error),
68 };
69
70 match data_writer.WriteBytes(&vec) {
71 Err(error) => return Err(error),
72 _ => {}
73 }
74
75 match data_writer.DetachBuffer() {
76 Ok(buffer) => Ok(buffer),
77 Err(error) => Err(error),
78 }
79}
80
81#[cfg(target_os = "windows")]
82#[cfg(test)]
83mod tests {
84 use windows::Storage::Streams::{DataReader, DataWriter};
85
86 use crate::windows::buffer::{i_buffer_to_vec, vec_to_i_buffer};
87
88 #[test]
89 fn test_i_buffer_to_vec() {
90 let data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].to_vec();
91 let data_writer = DataWriter::new().unwrap();
92 data_writer.WriteBytes(&data).unwrap();
93 let buffer = data_writer.DetachBuffer().unwrap();
94
95 let result = i_buffer_to_vec(buffer);
96 assert!(result.is_ok());
97 assert_eq!(data.to_vec(), result.unwrap());
98 }
99
100 #[test]
101 fn test_vec_to_i_buffer() {
102 let data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].to_vec();
103
104 let result = vec_to_i_buffer(&data);
105 assert!(result.is_ok());
106
107 let i_buffer = result.unwrap();
108 let reader = DataReader::FromBuffer(&i_buffer).unwrap();
109 let length = reader.UnconsumedBufferLength().unwrap();
110 let mut read_buffer = vec![0u8; length as usize];
111 reader.ReadBytes(read_buffer.as_mut()).unwrap();
112 assert_eq!(data.to_vec(), read_buffer);
113 }
114}