Skip to main content

dope_core/io/socket/
error.rs

1use dope_sys::io::socket::addr;
2
3/// Exact validation failure of a retained socket address.
4#[derive(Clone, Copy, Debug, PartialEq, Eq)]
5pub enum Error {
6    Storage {
7        actual: usize,
8        capacity: usize,
9    },
10    Header {
11        actual: usize,
12        required: usize,
13    },
14    Address {
15        family: i32,
16        actual: usize,
17        required: usize,
18    },
19    Unsupported {
20        family: i32,
21        actual: usize,
22    },
23    PathUnsupported,
24    PathEmpty,
25    PathLength {
26        actual: usize,
27        maximum: usize,
28    },
29    PathNul {
30        offset: usize,
31    },
32}
33
34impl Error {
35    pub(crate) fn from_path(error: addr::PathError) -> Self {
36        match error {
37            addr::PathError::Unsupported => Self::PathUnsupported,
38            addr::PathError::Empty => Self::PathEmpty,
39            addr::PathError::Length { actual, maximum } => Self::PathLength { actual, maximum },
40            addr::PathError::Nul { offset } => Self::PathNul { offset },
41        }
42    }
43}
44
45impl From<addr::Error> for Error {
46    fn from(error: addr::Error) -> Self {
47        match error {
48            addr::Error::Storage { actual, capacity } => Self::Storage { actual, capacity },
49            addr::Error::Header { actual, required } => Self::Header { actual, required },
50            addr::Error::Address {
51                family,
52                actual,
53                required,
54            } => Self::Address {
55                family,
56                actual,
57                required,
58            },
59            addr::Error::Unsupported { family, actual } => Self::Unsupported { family, actual },
60        }
61    }
62}