Skip to main content

dope_core/io/socket/
addr.rs

1use std::{io, net, path};
2
3use crate::io::socket;
4
5#[derive(Clone, Copy, Debug)]
6#[repr(transparent)]
7pub struct Addr(socket::raw::Addr);
8
9impl Addr {
10    pub fn from_std(addr: net::SocketAddr) -> Self {
11        Self(socket::raw::Addr::from_std(addr))
12    }
13
14    pub fn from_unix_path(path: &path::Path) -> io::Result<Self> {
15        socket::raw::Addr::from_unix_path(path).map(Self)
16    }
17
18    pub fn into_std(self) -> io::Result<net::SocketAddr> {
19        self.0.into_std()
20    }
21
22    pub(crate) const STORAGE_CAPACITY: usize = socket::raw::Addr::STORAGE_CAPACITY;
23
24    pub(crate) fn from_raw(addr: socket::raw::Addr) -> Self {
25        Self(addr)
26    }
27
28    pub(crate) const fn raw(&self) -> &socket::raw::Addr {
29        &self.0
30    }
31
32    pub(crate) fn parse_msg_name(name: &[u8]) -> Option<net::SocketAddr> {
33        if name.len() > Self::STORAGE_CAPACITY {
34            return None;
35        }
36        socket::raw::Addr::parse_msg_name(name)
37    }
38}