use thiserror::Error;
#[derive(Error, Debug, PartialEq, Eq)]
pub enum WindowsFirewallError {
#[error("CoInitializeEx failed: {0}")]
CoInitializeExFailed(String),
#[error(transparent)]
WindowsError(#[from] windows_result::Error),
#[error(transparent)]
SetRuleError(#[from] SetRuleError),
#[error("The firewall rule already exists")]
RuleAlreadyExists,
#[error("Invalid NET_FW_ACTION value")]
InvalidNetFwAction,
#[error("Invalid NET_FW_PROFILE value")]
InvalidNetFwProfile,
#[error("Invalid NET_FW_RULE_DIRECTION value")]
InvalidNetFwRuleDirection,
#[error("Invalid NET_FW_IP_PROTOCOL value")]
InvalidNetFwIpProtocol,
#[error("Empty or None HashSet")]
EmptyHashSet,
}
#[derive(Error, Debug, PartialEq, Eq)]
pub enum SetRuleError {
#[error("Failed to set name: {0}")]
Name(#[source] windows_result::Error),
#[error("Failed to set direction: {0}")]
Direction(#[source] windows_result::Error),
#[error("Failed to set enabled: {0}")]
Enabled(#[source] windows_result::Error),
#[error("Failed to set action: {0}")]
Action(#[source] windows_result::Error),
#[error("Failed to set description: {0}")]
Description(#[source] windows_result::Error),
#[error("Failed to set application name: {0}")]
ApplicationName(#[source] windows_result::Error),
#[error("Failed to set service name: {0}")]
ServiceName(#[source] windows_result::Error),
#[error("Failed to set protocol: {0}")]
Protocol(#[source] windows_result::Error),
#[error("Failed to set local ports: {0}")]
LocalPorts(#[source] windows_result::Error),
#[error("Failed to set remote ports: {0}")]
RemotePorts(#[source] windows_result::Error),
#[error("Failed to set local addresses: {0}")]
LocalAddresses(#[source] windows_result::Error),
#[error("Failed to set remote addresses: {0}")]
RemoteAddresses(#[source] windows_result::Error),
#[error("Failed to set ICMP types and codes: {0}")]
IcmpTypesAndCodes(#[source] windows_result::Error),
#[error("Failed to set edge traversal: {0}")]
EdgeTraversal(#[source] windows_result::Error),
#[error("Failed to set grouping: {0}")]
Grouping(#[source] windows_result::Error),
#[error("Failed to set interfaces: {0}")]
Interfaces(#[source] windows_result::Error),
#[error("Failed to set interface types: {0}")]
InterfaceTypes(#[source] windows_result::Error),
#[error("Failed to set profiles: {0}")]
Profiles(#[source] windows_result::Error),
}