esp32_nimble/server/
att_value.rs1use 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}