use ipnet::IpNet; use serde::{Deserialize, Serialize}; use std::net::IpAddr; use validator::Validate; #[derive(Serialize, Deserialize, Clone, Validate, Default, Debug)] pub struct Object { pub addresses: Vec
, pub services: Vec, } #[derive(Serialize, Deserialize, Clone, Validate, Debug)] pub struct Address { pub name: String, pub address_type: AddressType, pub comment: String, } #[derive(Serialize, Deserialize, Clone, Debug)] #[serde(rename_all = "snake_case")] pub enum AddressType { Host { address: IpAddr }, Range { range: IpAddr }, Network { network: IpNet }, Group { members: Vec }, } #[derive(Serialize, Deserialize, Clone, Validate, Debug)] pub struct Service { pub name: String, pub service_type: ServiceType, pub comment: String, } #[derive(Serialize, Deserialize, Clone, Debug)] #[serde(rename_all = "lowercase")] pub enum ServiceType { TCP { source: PortDefinition, destination: PortDefinition, }, UDP { source: PortDefinition, destination: PortDefinition, }, ICMP { code: u8, }, Group { members: Vec, }, } #[derive(Serialize, Deserialize, Clone, Debug)] #[serde(rename_all = "snake_case")] pub enum PortDefinition { Any, Single { port: u64 }, Range { start_port: u64, end_port: u64 }, }