use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "lowercase")]
pub enum SecurityGroupPolicy {
Accept,
Drop,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum SecurityGroupRuleProtocol {
#[serde(rename = "TCP")]
Tcp,
#[serde(rename = "UDP")]
Udp,
#[serde(rename = "ICMP")]
Icmp,
#[serde(rename = "ANY")]
Any,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "lowercase")]
pub enum SecurityGroupRuleDirection {
Inbound,
Outbound,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "lowercase")]
pub enum SecurityGroupRuleAction {
Accept,
Drop,
}
#[derive(Deserialize, Debug)]
pub struct ScalewaySecurityGroupDetailsListRoot {
pub security_groups: Vec<ScalewaySecurityGroupDetails>,
}
#[derive(Deserialize, Debug)]
pub struct ScalewaySecurityGroupDetailsRoot {
pub security_group: ScalewaySecurityGroupDetails,
}
#[derive(Deserialize, Debug)]
pub struct ScalewaySecurityGroupDetails {
pub id: String,
pub name: String,
pub description: String,
pub organization: String,
pub project: String,
pub tags: Vec<String>,
pub enable_default_security: bool,
pub inbound_default_policy: SecurityGroupPolicy,
pub outbound_default_policy: SecurityGroupPolicy,
pub organization_default: bool,
pub project_default: bool,
#[serde(with = "time::serde::rfc3339::option")]
pub creation_date: Option<time::OffsetDateTime>,
#[serde(with = "time::serde::rfc3339::option")]
pub modification_date: Option<time::OffsetDateTime>,
pub servers: Vec<ScalewaySecurityGroupServerRef>,
pub stateful: bool,
pub zone: String,
}
#[derive(Deserialize, Debug)]
pub struct ScalewaySecurityGroupServerRef {
pub id: String,
pub name: String,
}
#[derive(Deserialize, Debug)]
pub struct ScalewaySecurityGroupRulesRoot {
pub rules: Vec<ScalewaySecurityGroupRule>,
}
#[derive(Deserialize, Debug)]
pub struct ScalewaySecurityGroupRuleRoot {
pub rule: ScalewaySecurityGroupRule,
}
#[derive(Deserialize, Debug)]
pub struct ScalewaySecurityGroupRule {
pub id: String,
pub protocol: SecurityGroupRuleProtocol,
pub direction: SecurityGroupRuleDirection,
pub action: SecurityGroupRuleAction,
pub ip_range: String,
pub dest_port_from: Option<u32>,
pub dest_port_to: Option<u32>,
pub position: u32,
pub editable: bool,
pub zone: Option<String>,
}