#[derive(Debug, PartialEq)]
pub enum Strategy {
Single(u16),
Multiple(Vec<u16>),
Dynamic(Option<std::ops::Range<u16>>),
}
impl Strategy {
pub fn contains_port(&self, port: u16) -> bool {
match self {
Self::Single(tmp) => *tmp == port,
Self::Multiple(tmp) => tmp.contains(&port),
Self::Dynamic(tmp) => match tmp {
Some(range) => range.contains(&port),
None => true,
},
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn single_valid() {
let strat = Strategy::Single(13);
assert_eq!(true, strat.contains_port(13));
}
#[test]
fn single_invalid() {
let strat = Strategy::Single(13);
assert_eq!(false, strat.contains_port(52));
}
#[test]
fn multiple_valid() {
let strat = Strategy::Multiple(vec![10, 13, 52]);
assert_eq!(true, strat.contains_port(13));
}
#[test]
fn multiple_invalid() {
let strat = Strategy::Multiple(vec![13, 53]);
assert_eq!(false, strat.contains_port(52));
}
#[test]
fn dynamic_valid() {
let strat = Strategy::Dynamic(None);
assert_eq!(true, strat.contains_port(13));
}
#[test]
fn dynamic_range_valid() {
let strat = Strategy::Dynamic(Some(10..15));
assert_eq!(true, strat.contains_port(13));
}
#[test]
fn dynamic_range_invalid() {
let strat = Strategy::Dynamic(Some(10..51));
assert_eq!(false, strat.contains_port(52));
}
}