1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
use crate::{conversion::TryCopyTo, Result};
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct InterfaceName(String);
impl AsRef<str> for InterfaceName {
fn as_ref(&self) -> &str {
self.0.as_ref()
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum Interface {
Any,
Name(InterfaceName),
}
impl Default for Interface {
fn default() -> Self {
Interface::Any
}
}
impl<T: AsRef<str>> From<T> for Interface {
fn from(name: T) -> Self {
Interface::Name(InterfaceName(name.as_ref().to_owned()))
}
}
impl TryCopyTo<[i8]> for Interface {
fn try_copy_to(&self, dst: &mut [i8]) -> Result<()> {
match *self {
Interface::Any => "",
Interface::Name(InterfaceName(ref name)) => &name[..],
}
.try_copy_to(dst)
}
}