pve/nodes/node/firewall/rules/
pos.rs

1#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, Default)]
2pub struct DeleteParameters {
3    #[doc = "Prevent changes if current configuration file has different SHA1 digest. This can be used to prevent concurrent modifications."]
4    #[serde(skip_serializing_if = "Option::is_none", default)]
5    pub digest: Option<String>,
6}
7
8#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
9pub struct GetResponseItem {
10    pub action: String,
11    #[serde(skip_serializing_if = "Option::is_none", default)]
12    pub comment: Option<String>,
13    #[serde(skip_serializing_if = "Option::is_none", default)]
14    pub dest: Option<String>,
15    #[serde(skip_serializing_if = "Option::is_none", default)]
16    pub dport: Option<String>,
17    #[serde(skip_serializing_if = "Option::is_none", default)]
18    pub enable: Option<u64>,
19    #[serde(rename = "icmp-type", skip_serializing_if = "Option::is_none", default)]
20    pub icmp_type: Option<String>,
21    #[serde(skip_serializing_if = "Option::is_none", default)]
22    pub iface: Option<String>,
23    #[serde(skip_serializing_if = "Option::is_none", default)]
24    pub ipversion: Option<u64>,
25    #[doc = "Log level for firewall rule"]
26    #[serde(skip_serializing_if = "Option::is_none", default)]
27    pub log: Option<String>,
28    #[serde(skip_serializing_if = "Option::is_none", default)]
29    pub r#macro: Option<String>,
30    pub pos: u64,
31    #[serde(skip_serializing_if = "Option::is_none", default)]
32    pub proto: Option<String>,
33    #[serde(skip_serializing_if = "Option::is_none", default)]
34    pub source: Option<String>,
35    #[serde(skip_serializing_if = "Option::is_none", default)]
36    pub sport: Option<String>,
37    pub r#type: String,
38}
39
40#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, Default)]
41pub struct PutParameters {
42    #[doc = "Rule action ('ACCEPT', 'DROP', 'REJECT') or security group name."]
43    #[serde(skip_serializing_if = "Option::is_none", default)]
44    pub action: Option<String>,
45    #[doc = "Descriptive comment."]
46    #[serde(skip_serializing_if = "Option::is_none", default)]
47    pub comment: Option<String>,
48    #[doc = "A list of settings you want to delete."]
49    #[serde(skip_serializing_if = "Option::is_none", default)]
50    pub delete: Option<String>,
51    #[doc = "Restrict packet destination address. This can refer to a single IP address, an IP set ('+ipsetname') or an IP alias definition. You can also specify an address range like '20.34.101.207-201.3.9.99', or a list of IP addresses and networks (entries are separated by comma). Please do not mix IPv4 and IPv6 addresses inside such lists."]
52    #[serde(skip_serializing_if = "Option::is_none", default)]
53    pub dest: Option<String>,
54    #[doc = "Prevent changes if current configuration file has different SHA1 digest. This can be used to prevent concurrent modifications."]
55    #[serde(skip_serializing_if = "Option::is_none", default)]
56    pub digest: Option<String>,
57    #[doc = "Restrict TCP/UDP destination port. You can use service names or simple numbers (0-65535), as defined in '/etc/services'. Port ranges can be specified with '\\d+:\\d+', for example '80:85', and you can use comma separated list to match several ports or ranges."]
58    #[serde(skip_serializing_if = "Option::is_none", default)]
59    pub dport: Option<String>,
60    #[doc = "Flag to enable/disable a rule."]
61    #[serde(skip_serializing_if = "Option::is_none", default)]
62    pub enable: Option<u64>,
63    #[doc = "Specify icmp-type. Only valid if proto equals 'icmp' or 'icmpv6'/'ipv6-icmp'."]
64    #[serde(rename = "icmp-type", skip_serializing_if = "Option::is_none", default)]
65    pub icmp_type: Option<String>,
66    #[doc = "Network interface name. You have to use network configuration key names for VMs and containers ('net\\d+'). Host related rules can use arbitrary strings."]
67    #[serde(skip_serializing_if = "Option::is_none", default)]
68    pub iface: Option<String>,
69    #[doc = "Log level for firewall rule."]
70    #[serde(skip_serializing_if = "Option::is_none", default)]
71    pub log: Option<String>,
72    #[doc = "Use predefined standard macro."]
73    #[serde(skip_serializing_if = "Option::is_none", default)]
74    pub r#macro: Option<String>,
75    #[doc = "Move rule to new position <moveto>. Other arguments are ignored."]
76    #[serde(skip_serializing_if = "Option::is_none", default)]
77    pub moveto: Option<u64>,
78    #[doc = "IP protocol. You can use protocol names ('tcp'/'udp') or simple numbers, as defined in '/etc/protocols'."]
79    #[serde(skip_serializing_if = "Option::is_none", default)]
80    pub proto: Option<String>,
81    #[doc = "Restrict packet source address. This can refer to a single IP address, an IP set ('+ipsetname') or an IP alias definition. You can also specify an address range like '20.34.101.207-201.3.9.99', or a list of IP addresses and networks (entries are separated by comma). Please do not mix IPv4 and IPv6 addresses inside such lists."]
82    #[serde(skip_serializing_if = "Option::is_none", default)]
83    pub source: Option<String>,
84    #[doc = "Restrict TCP/UDP source port. You can use service names or simple numbers (0-65535), as defined in '/etc/services'. Port ranges can be specified with '\\d+:\\d+', for example '80:85', and you can use comma separated list to match several ports or ranges."]
85    #[serde(skip_serializing_if = "Option::is_none", default)]
86    pub sport: Option<String>,
87    #[doc = "Rule type."]
88    #[serde(skip_serializing_if = "Option::is_none", default)]
89    pub r#type: Option<String>,
90}
91
92#[derive(Debug, Clone)]
93pub struct PosClient<T> {
94    client: T,
95    path: String,
96}
97
98impl<T> PosClient<T>
99where
100    T: Clone,
101{
102    pub fn new(client: T, parent_path: &str, pos: &str) -> Self {
103        Self {
104            client,
105            path: format!("{}/{}", parent_path, pos),
106        }
107    }
108}
109impl<T> PosClient<T>
110where
111    T: crate::client::HttpClient,
112{
113    #[doc = "Delete rule."]
114    pub fn delete(&self, parameters: DeleteParameters) -> Result<(), T::Error> {
115        self.client.delete(&self.path, &parameters)
116    }
117
118    #[doc = "Get single rule data."]
119    pub fn get(&self) -> Result<GetResponseItem, T::Error> {
120        self.client.get(&self.path, &())
121    }
122
123    #[doc = "Modify rule data."]
124    pub fn put(&self, parameters: PutParameters) -> Result<(), T::Error> {
125        self.client.put(&self.path, &parameters)
126    }
127}
128#[derive(Debug, Clone)]
129pub struct AsyncPosClient<T> {
130    client: T,
131    path: String,
132}
133
134impl<T> AsyncPosClient<T>
135where
136    T: Clone,
137{
138    pub fn new(client: T, parent_path: &str, pos: &str) -> Self {
139        Self {
140            client,
141            path: format!("{}/{}", parent_path, pos),
142        }
143    }
144}
145impl<T> AsyncPosClient<T>
146where
147    T: crate::client::AsyncHttpClient,
148{
149    #[doc = "Delete rule."]
150    pub async fn delete(&self, parameters: DeleteParameters) -> Result<(), T::Error> {
151        self.client.delete(&self.path, &parameters).await
152    }
153
154    #[doc = "Get single rule data."]
155    pub async fn get(&self) -> Result<GetResponseItem, T::Error> {
156        self.client.get(&self.path, &()).await
157    }
158
159    #[doc = "Modify rule data."]
160    pub async fn put(&self, parameters: PutParameters) -> Result<(), T::Error> {
161        self.client.put(&self.path, &parameters).await
162    }
163}