use std::fmt::Display;
use serde::Deserialize;
use uuid::Uuid;
use crate::data::meta::VultrMeta;
#[derive(Deserialize, Debug)]
pub struct VultrFirewallGroupRoot {
pub firewall_group: VultrFirewallGroup,
}
#[derive(Deserialize, Debug)]
pub struct VultrFirewallGroupsRoot {
pub firewall_groups: Vec<VultrFirewallGroup>,
pub meta: VultrMeta,
}
#[derive(Deserialize, Debug)]
pub struct VultrFirewallGroup {
id: Uuid,
description: String,
date_created: String,
date_modified: String,
instance_count: Option<u32>,
rule_count: Option<u32>,
max_rule_count: Option<u32>,
}
impl VultrFirewallGroup {
pub fn id(&self) -> Uuid {
self.id
}
pub fn description(&self) -> &String {
&self.description
}
pub fn date_created(&self) -> &String {
&self.date_created
}
pub fn date_modified(&self) -> &String {
&self.date_modified
}
}
#[derive(Deserialize, Debug)]
pub struct VultrFirewallGroupRulesRoot {
pub firewall_rules: Vec<VultrFirewallGroupRule>,
pub meta: VultrMeta,
}
#[derive(Deserialize, Debug)]
pub struct VultrFirewallGroupRuleRoot {
pub firewall_rule: VultrFirewallGroupRule,
}
#[derive(Deserialize, Debug)]
pub struct VultrFirewallGroupRule {
id: u32,
ip_type: VultrFirewallGroupRuleIpType,
action: String,
protocol: VultrFirewallGroupRuleProtocol,
port: String,
subnet: String,
subnet_size: u32,
source: String,
notes: String,
}
impl VultrFirewallGroupRule {
pub fn id(&self) -> u32 {
self.id
}
pub fn ip_type(&self) -> &VultrFirewallGroupRuleIpType {
&self.ip_type
}
pub fn protocol(&self) -> &VultrFirewallGroupRuleProtocol {
&self.protocol
}
pub fn port(&self) -> &String {
&self.port
}
pub fn subnet(&self) -> &String {
&self.subnet
}
pub fn subnet_size(&self) -> u32 {
self.subnet_size
}
pub fn source(&self) -> &String {
&self.source
}
pub fn notes(&self) -> &String {
&self.notes
}
}
#[derive(Deserialize, Debug)]
pub enum VultrFirewallGroupRuleIpType {
#[serde(rename = "v4")]
V4,
#[serde(rename = "v6")]
V6,
}
impl Display for VultrFirewallGroupRuleIpType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
VultrFirewallGroupRuleIpType::V4 => write!(f, "v4"),
VultrFirewallGroupRuleIpType::V6 => write!(f, "v6"),
}
}
}
#[derive(Deserialize, Debug)]
pub enum VultrFirewallGroupRuleProtocol {
#[serde(rename = "icmp")]
ICMP,
#[serde(rename = "tcp")]
TCP,
#[serde(rename = "udp")]
UDP,
#[serde(rename = "gre")]
GRE,
#[serde(rename = "esp")]
ESP,
#[serde(rename = "eh")]
EH,
}
impl Display for VultrFirewallGroupRuleProtocol {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
VultrFirewallGroupRuleProtocol::ICMP => write!(f, "icmp"),
VultrFirewallGroupRuleProtocol::TCP => write!(f, "tcp"),
VultrFirewallGroupRuleProtocol::UDP => write!(f, "udp"),
VultrFirewallGroupRuleProtocol::GRE => write!(f, "gre"),
VultrFirewallGroupRuleProtocol::ESP => write!(f, "esp"),
VultrFirewallGroupRuleProtocol::EH => write!(f, "eh"),
}
}
}