Skip to main content

dope_core/io/socket/addr/
unix.rs

1use std::{os::unix, path};
2
3use dope_sys::io::socket::{Domain, addr};
4
5use crate::io::socket::{Addr, Error, Prepared, StreamSpec, addr::prepared};
6
7/// A compact, validated Unix-domain socket address.
8#[derive(Clone, Copy)]
9pub struct Unix {
10    native: addr::Unix,
11}
12
13impl Unix {
14    pub fn from_path(path: &path::Path) -> Result<Self, Error> {
15        let bytes = unix::ffi::OsStrExt::as_bytes(path.as_os_str());
16        Ok(Self {
17            native: addr::Unix::from_path::<crate::Backend>(bytes).map_err(Error::from_path)?,
18        })
19    }
20}
21
22impl prepared::Sealed for Unix {}
23
24impl Prepared for Unix {
25    fn view(&self) -> prepared::View<'_> {
26        prepared::View(self.native.as_addr())
27    }
28
29    fn stream_spec(&self) -> StreamSpec {
30        StreamSpec(Domain::Unix)
31    }
32}
33
34const _: () = {
35    assert!(size_of::<addr::Unix>() == size_of::<Unix>());
36    assert!(size_of::<Unix>() < size_of::<Addr>());
37};