use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use sqlx::FromRow;
use crate::custom_traits::CustomSerializer;
#[derive(Debug, Ord, PartialOrd, Eq, PartialEq, Clone, Serialize, Deserialize, FromRow)]
pub struct DiscoveredHost {
pub id: Option<i32>,
pub ip: String,
pub mac_address: String,
pub vendor_name: String,
pub discovered_at: DateTime<Utc>,
pub open_ports: Vec<ServicePort>,
}
impl DiscoveredHost {
pub fn new(
ip: String,
mac_address: String,
vendor_name: String,
open_ports: Vec<ServicePort>,
) -> Self {
let discovered_at = Utc::now();
DiscoveredHost {
id: None,
ip,
mac_address,
vendor_name,
discovered_at,
open_ports,
}
}
}
#[derive(Debug, Ord, PartialOrd, Eq, PartialEq, Clone, Serialize, Deserialize, FromRow)]
pub struct ServicePort {
pub id: Option<i32>,
pub port: i32,
pub name: String,
}
impl ServicePort {
pub fn new(port: i32, name: String) -> Self {
ServicePort {
id: None,
port,
name,
}
}
pub fn new_with_id(id: i32, port: i32, name: String) -> Self {
ServicePort {
id: Some(id),
port,
name,
}
}
}
#[derive(Debug, Ord, PartialOrd, Eq, PartialEq, Clone, Serialize, Deserialize, FromRow)]
pub struct ServiceDiscoveredHost {
pub service_port_id: Option<i32>,
pub discovered_host_id: Option<i32>,
}
impl ServiceDiscoveredHost {
pub fn new(service_port_id: Option<i32>, discovered_host_id: Option<i32>) -> Self {
ServiceDiscoveredHost {
service_port_id,
discovered_host_id,
}
}
}
impl CustomSerializer<ServiceDiscoveredHost> for ServiceDiscoveredHost {}
impl CustomSerializer<ServicePort> for ServicePort {}
impl CustomSerializer<DiscoveredHost> for DiscoveredHost {}