esp32_nimble/server/
att_value.rs

1use alloc::vec::Vec;
2
3pub struct AttValue {
4    value: Vec<u8>,
5}
6
7impl AttValue {
8    pub(super) const fn new() -> Self {
9        Self { value: Vec::new() }
10    }
11
12    #[inline]
13    pub fn as_slice(&self) -> &[u8] {
14        &self.value
15    }
16
17    #[inline]
18    pub fn as_mut_slice(&mut self) -> &mut [u8] {
19        &mut self.value
20    }
21
22    #[deprecated(note = "Please use `as_slice` + zerocopy::FromBytes")]
23    #[inline]
24    pub fn as_ref<T: Sized>(&self) -> Option<&T> {
25        if self.len() == core::mem::size_of::<T>() {
26            unsafe { Some(&*(self.value.as_ptr() as *const T)) }
27        } else {
28            None
29        }
30    }
31
32    #[deprecated(note = "Please use `as_mut_slice` + zerocopy::FromBytes")]
33    #[inline]
34    pub fn as_mut<T: Sized>(&mut self) -> Option<&mut T> {
35        if self.len() == core::mem::size_of::<T>() {
36            unsafe { Some(&mut *(self.value.as_mut_ptr() as *mut T)) }
37        } else {
38            None
39        }
40    }
41
42    #[inline]
43    pub fn is_empty(&self) -> bool {
44        self.value.is_empty()
45    }
46
47    #[inline]
48    pub fn len(&self) -> usize {
49        self.value.len()
50    }
51
52    #[inline]
53    pub fn clear(&mut self) {
54        self.value.clear();
55    }
56
57    #[inline]
58    pub fn set_value(&mut self, value: &[u8]) {
59        self.value.clear();
60        self.value.extend_from_slice(value);
61    }
62
63    #[deprecated(note = "Please use `set_value` + zerocopy::IntoBytes")]
64    #[inline]
65    pub fn set_from<T: Sized>(&mut self, p: &T) {
66        let slice = unsafe {
67            ::core::slice::from_raw_parts((p as *const T) as *const u8, ::core::mem::size_of::<T>())
68        };
69        self.set_value(slice);
70    }
71
72    #[inline]
73    pub fn extend(&mut self, value: &[u8]) {
74        self.value.extend_from_slice(value);
75    }
76}