1
0
mirror of https://github.com/jht5945/rust_util.git synced 2026-01-12 23:30:05 +08:00

Compare commits

..

3 Commits

Author SHA1 Message Date
68e889c542 feat: add ip address mask group 2020-09-13 02:57:44 +08:00
3e5292105b chore: !!->^ 2020-09-13 00:37:04 +08:00
745e577c7b feat: add logger level *,?,!,!! 2020-09-13 00:34:05 +08:00
3 changed files with 54 additions and 6 deletions

View File

@@ -1,6 +1,6 @@
[package]
name = "rust_util"
version = "0.6.11"
version = "0.6.13"
authors = ["Hatter Jiang <jht5945@gmail.com>"]
edition = "2018"
description = "Hatter's Rust Util"

View File

@@ -28,11 +28,11 @@ impl MessageType {
pub fn get_logger_level() -> MessageType {
if let Some(logger_level) = env::var("LOGGER_LEVEL").ok().or(env::var("LOGGER").ok()).or(env::var("LEVEL").ok()) {
match logger_level.trim().to_lowercase().as_str() {
"debug" => MessageType::DEBUG,
"info" => MessageType::INFO,
"ok" => MessageType::OK,
"warn" => MessageType::WARN,
"error" => MessageType::ERROR,
"debug" | "*" => MessageType::DEBUG,
"info" | "?" => MessageType::INFO,
"ok" => MessageType::OK,
"warn" | "!" => MessageType::WARN,
"error" | "^" => MessageType::ERROR,
_ => {
print_message_ex(Some(term::color::YELLOW), "[WARN ]", &format!("Unknown logger level: {}, set to default INFO", logger_level));
MessageType::INFO

View File

@@ -88,6 +88,41 @@ impl Display for IpAddressMask {
}
}
#[derive(Debug, Clone)]
pub struct IpAddressMaskGroup {
pub ip_address_mask_group: Vec<IpAddressMask>,
}
impl IpAddressMaskGroup {
pub fn parse(ip_mask_group: &[String]) -> Self {
let mut ret = vec![];
for ip_mask_addr in ip_mask_group {
if let Some(ip_mask) = IpAddressMask::parse_ipv4(ip_mask_addr) {
ret.push(ip_mask);
}
}
Self { ip_address_mask_group: ret }
}
pub fn is_empty(&self) -> bool {
self.ip_address_mask_group.is_empty()
}
pub fn is_matches(&self, socket_addr: &SocketAddr) -> bool {
self.ip_address_mask_group.iter().any(|ip_address_mask| ip_address_mask.is_matches(socket_addr))
}
pub fn is_empty_or_matches(&self, socket_addr: &SocketAddr) -> bool {
self.is_empty() || self.is_matches(socket_addr)
}
}
impl Display for IpAddressMaskGroup {
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> {
write!(f, "[{}]", self.ip_address_mask_group.iter().map(|i| format!("{}", i)).collect::<Vec<_>>().join(", "))
}
}
#[derive(Debug, Clone)]
pub struct IpAddressAndPort {
pub ip: IpAddress,
@@ -196,3 +231,16 @@ fn test_ip_address_port() {
let ip_address_and_port = IpAddressAndPort::parse("1.1.1.1:80");
assert_eq!("1.1.1.1:80", format!("{}", ip_address_and_port.unwrap()));
}
#[test]
fn test_ip_address_mask_group_is_matches() {
let group = IpAddressMaskGroup::parse(&vec!["127.0.0.1".to_owned(), "10.0.0.0/24".to_owned()]);
let addr = SocketAddr::new(std::net::IpAddr::V4(std::net::Ipv4Addr::new(127, 0, 0, 1)), 123);
assert_eq!(true, group.is_matches(&addr));
let addr = SocketAddr::new(std::net::IpAddr::V4(std::net::Ipv4Addr::new(127, 0, 0, 2)), 123);
assert_eq!(false, group.is_matches(&addr));
let addr = SocketAddr::new(std::net::IpAddr::V4(std::net::Ipv4Addr::new(10, 0, 0, 2)), 123);
assert_eq!(true, group.is_matches(&addr));
let addr = SocketAddr::new(std::net::IpAddr::V4(std::net::Ipv4Addr::new(10, 0, 1, 2)), 123);
assert_eq!(false, group.is_matches(&addr));
}