1use std::fmt::{Debug, Error, Formatter};
4
5#[derive(PartialOrd, PartialEq)]
11pub struct Buffer {
12 inner: Vec<u8>,
13}
14
15impl Buffer {
16 pub fn new(size: usize) -> Self {
26 Buffer {
27 inner: vec![0; size],
28 }
29 }
30
31 pub fn from(data: &[u8]) -> Self {
42 Buffer {
43 inner: data.to_vec(),
44 }
45 }
46
47 pub fn from_vec(data: Vec<u8>) -> Self {
48 Buffer { inner: data }
49 }
50
51 pub fn len(&self) -> usize {
52 self.inner.len()
53 }
54
55 pub fn is_empty(&self) -> bool {
56 self.inner.is_empty()
57 }
58
59 pub fn as_ptr(&self) -> *const u8 {
60 self.inner.as_ptr()
61 }
62
63 pub fn as_mut_ptr(&mut self) -> *mut u8 {
64 self.inner.as_mut_ptr()
65 }
66
67 pub fn as_slice(&self) -> &[u8] {
68 self.inner.as_slice()
69 }
70
71 pub fn as_mut_slice(&mut self) -> &mut [u8] {
72 self.inner.as_mut_slice()
73 }
74
75 pub fn into_inner(mut self) -> Vec<u8> {
76 std::mem::take(&mut self.inner)
77 }
78}
79
80impl Drop for Buffer {
81 fn drop(&mut self) {
82 #[cfg(feature = "zeroize")]
83 zeroize::Zeroize::zeroize(&mut self.inner);
84 }
85}
86
87impl Debug for Buffer {
88 fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
89 write!(f, "{:02X?}", self.inner)
90 }
91}