1use crate::error::InputBuildError;
2use pnet::util::MacAddr;
3use std::net::Ipv4Addr;
4
5#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
6pub struct ProbeInput {
7 pub sender_mac: MacAddr,
8 pub target_ip: Ipv4Addr,
9}
10
11#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)]
12pub struct ProbeInputBuilder {
13 sender_mac: Option<MacAddr>,
14 target_ip: Option<Ipv4Addr>,
15}
16
17impl ProbeInputBuilder {
18 pub fn new() -> Self {
19 Self::default()
20 }
21
22 pub fn with_sender_mac(mut self, sender_mac: MacAddr) -> Self {
23 self.sender_mac = Some(sender_mac);
24 self
25 }
26
27 pub fn with_target_ip(mut self, target_ip: Ipv4Addr) -> Self {
28 self.target_ip = Some(target_ip);
29 self
30 }
31
32 pub fn build(&self) -> std::result::Result<ProbeInput, InputBuildError> {
33 Ok(ProbeInput {
34 target_ip: self.target_ip.ok_or(InputBuildError::MissingTargetIp)?,
35 sender_mac: self.sender_mac.ok_or(InputBuildError::MissingSenderMac)?,
36 })
37 }
38}
39
40#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
41pub enum ProbeStatus {
42 Free,
43 Occupied,
44}
45
46#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
47pub struct ProbeOutcome {
48 pub status: ProbeStatus,
49 pub target_ip: Ipv4Addr,
50}
51
52impl ProbeOutcome {
53 pub fn new(status: ProbeStatus, target_ip: Ipv4Addr) -> Self {
54 Self { status, target_ip }
55 }
56}