use crate::set::Peer;
use crate::DeviceInterface;
use std::borrow::Cow;
#[derive(Clone, Debug, PartialEq, Eq)]
#[repr(u32)]
pub enum WgDeviceF {
ReplacePeers = 1,
}
#[derive(Debug)]
pub struct Device<'a> {
pub interface: DeviceInterface<'a>,
pub flags: Vec<WgDeviceF>,
pub private_key: Option<&'a [u8; 32]>,
pub listen_port: Option<u16>,
pub fwmark: Option<u32>,
pub peers: Vec<Peer<'a>>,
}
impl<'a> Device<'a> {
pub fn from_ifname<T: Into<Cow<'a, str>>>(ifname: T) -> Self {
Self {
interface: DeviceInterface::Name(ifname.into()),
flags: vec![],
private_key: None,
listen_port: None,
fwmark: None,
peers: vec![],
}
}
pub fn from_ifindex(ifindex: u32) -> Self {
Self {
interface: DeviceInterface::Index(ifindex),
flags: vec![],
private_key: None,
listen_port: None,
fwmark: None,
peers: vec![],
}
}
pub fn flags(mut self, flags: Vec<WgDeviceF>) -> Self {
self.flags = flags;
self
}
pub fn private_key(mut self, private_key: &'a [u8; 32]) -> Self {
self.private_key = Some(private_key);
self
}
pub fn listen_port(mut self, listen_port: u16) -> Self {
self.listen_port = Some(listen_port);
self
}
pub fn fwmark(mut self, fwmark: u32) -> Self {
self.fwmark = Some(fwmark);
self
}
pub fn peers(mut self, peers: Vec<Peer<'a>>) -> Self {
self.peers = peers;
self
}
}