openssh_sftp_protocol/
handle.rs

1use std::{
2    borrow::{Borrow, ToOwned},
3    convert::AsRef,
4    ops::Deref,
5};
6
7use vec_strings::SmallArrayBox;
8
9#[derive(Debug, Clone)]
10#[repr(transparent)]
11pub struct HandleOwned(pub(crate) SmallArrayBox<u8, 4>);
12
13impl Deref for HandleOwned {
14    type Target = Handle;
15
16    fn deref(&self) -> &Self::Target {
17        unsafe { &*(self.0.deref() as *const [u8] as *const Handle) }
18    }
19}
20
21impl Borrow<Handle> for HandleOwned {
22    fn borrow(&self) -> &Handle {
23        self.deref()
24    }
25}
26
27impl AsRef<Handle> for HandleOwned {
28    fn as_ref(&self) -> &Handle {
29        self.deref()
30    }
31}
32
33#[derive(Debug, Eq, PartialEq, serde::Serialize)]
34#[repr(transparent)]
35pub struct Handle([u8]);
36
37impl Handle {
38    pub const fn into_inner(&self) -> &[u8] {
39        &self.0
40    }
41}
42
43impl ToOwned for Handle {
44    type Owned = HandleOwned;
45
46    fn to_owned(&self) -> Self::Owned {
47        HandleOwned(SmallArrayBox::new(self.into_inner().iter().copied()))
48    }
49}