use std::fmt;
use std::fmt::Formatter;
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "json", derive(serde::Serialize))]
pub struct IpPort {
pub ip: std::net::IpAddr,
pub port: u16,
}
impl IpPort {
pub fn new(ip: std::net::IpAddr, port: u16) -> Self {
Self { ip, port }
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "json", derive(serde::Serialize))]
pub enum OsKind {
Specified,
Generic,
}
impl fmt::Display for OsKind {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.write_str(match self {
OsKind::Specified => "Specified",
OsKind::Generic => "Generic",
})
}
}
#[derive(Clone, Debug)]
#[cfg_attr(feature = "json", derive(serde::Serialize))]
pub enum MatchQuality {
Matched(f32),
NotMatched,
Disabled,
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "json", derive(serde::Serialize))]
pub struct Browser {
pub name: String,
pub family: Option<String>,
pub variant: Option<String>,
pub kind: OsKind,
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "json", derive(serde::Serialize))]
pub struct WebServer {
pub name: String,
pub family: Option<String>,
pub variant: Option<String>,
pub kind: OsKind,
}