openssh_sftp_client_lowlevel/
buffer.rs1#![forbid(unsafe_code)]
2
3use bytes::BytesMut;
4
5pub trait ToBuffer {
7 fn get_buffer(&mut self) -> Buffer<'_>;
9}
10
11#[derive(Debug)]
13pub enum Buffer<'a> {
14 Vector(&'a mut Vec<u8>),
16
17 Slice(&'a mut [u8]),
19
20 Bytes(&'a mut BytesMut),
22}
23
24impl ToBuffer for Vec<u8> {
25 #[inline(always)]
26 fn get_buffer(&mut self) -> Buffer<'_> {
27 Buffer::Vector(self)
28 }
29}
30
31impl ToBuffer for BytesMut {
32 #[inline(always)]
33 fn get_buffer(&mut self) -> Buffer<'_> {
34 Buffer::Bytes(self)
35 }
36}
37
38impl ToBuffer for Box<[u8]> {
39 #[inline(always)]
40 fn get_buffer(&mut self) -> Buffer<'_> {
41 Buffer::Slice(&mut *self)
42 }
43}
44
45impl<const LEN: usize> ToBuffer for [u8; LEN] {
46 #[inline(always)]
47 fn get_buffer(&mut self) -> Buffer<'_> {
48 Buffer::Slice(self)
49 }
50}