aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon THOBY <git@nightmared.fr>2022-12-03 21:47:52 +0100
committerSimon THOBY <git@nightmared.fr>2022-12-03 21:47:52 +0100
commit10bb4b01333aa44d913ca87a52389e685a441527 (patch)
treed5136b107f9d364291dcea0b668049960002ec4f /src
parent66de507d2d33c03203b996a0d1797543e84c4b3d (diff)
introduce a new procedural macro to replace the current mess of 'old-school' macros
Diffstat (limited to 'src')
-rw-r--r--src/expr/mod.rs7
-rw-r--r--src/table.rs50
2 files changed, 12 insertions, 45 deletions
diff --git a/src/expr/mod.rs b/src/expr/mod.rs
index 4dc8ba1..e5c2729 100644
--- a/src/expr/mod.rs
+++ b/src/expr/mod.rs
@@ -3,24 +3,17 @@
//!
//! [`Rule`]: struct.Rule.html
-use std::borrow::Cow;
use std::fmt::Debug;
use std::mem::transmute;
-use std::net::IpAddr;
-use std::net::Ipv4Addr;
-use std::net::Ipv6Addr;
-use std::slice::Iter;
use super::rule::Rule;
use crate::create_wrapper_type;
-use crate::nlmsg::AttributeDecoder;
use crate::nlmsg::NfNetlinkAttribute;
use crate::nlmsg::NfNetlinkDeserializable;
use crate::parser::pad_netlink_object;
use crate::parser::pad_netlink_object_with_variable_size;
use crate::parser::write_attribute;
use crate::parser::DecodeError;
-use crate::parser::InnerFormat;
use crate::sys::{self, nlattr};
use libc::NLA_TYPE_MASK;
use thiserror::Error;
diff --git a/src/table.rs b/src/table.rs
index 96a4964..820d765 100644
--- a/src/table.rs
+++ b/src/table.rs
@@ -1,11 +1,14 @@
use std::convert::TryFrom;
use std::fmt::Debug;
+use rustables_macros::nfnetlink_struct;
+
use crate::nlmsg::{NfNetlinkAttribute, NfNetlinkDeserializable, NfNetlinkObject, NfNetlinkWriter};
use crate::parser::Parsable;
use crate::parser::{DecodeError, InnerFormat};
use crate::sys::{
- self, NFT_MSG_DELTABLE, NFT_MSG_GETTABLE, NFT_MSG_NEWTABLE, NLM_F_ACK, NLM_F_CREATE,
+ self, NFTA_TABLE_FLAGS, NFTA_TABLE_NAME, NFTA_TABLE_USERDATA, NFT_MSG_DELTABLE,
+ NFT_MSG_GETTABLE, NFT_MSG_NEWTABLE, NLM_F_ACK, NLM_F_CREATE,
};
use crate::{impl_attr_getters_and_setters, impl_nfnetlinkattribute, MsgType, ProtocolFamily};
@@ -13,11 +16,15 @@ use crate::{impl_attr_getters_and_setters, impl_nfnetlinkattribute, MsgType, Pro
/// family and contains [`Chain`]s that in turn hold the rules.
///
/// [`Chain`]: struct.Chain.html
-#[derive(Default, PartialEq, Eq)]
+#[derive(Default, PartialEq, Eq, Debug)]
+#[nfnetlink_struct]
pub struct Table {
- flags: Option<u32>,
- name: Option<String>,
- userdata: Option<Vec<u8>>,
+ #[field(NFTA_TABLE_NAME)]
+ name: String,
+ #[field(NFTA_TABLE_FLAGS)]
+ flags: u32,
+ #[field(NFTA_TABLE_USERDATA)]
+ userdata: Vec<u8>,
pub family: ProtocolFamily,
}
@@ -29,14 +36,6 @@ impl Table {
}
}
-impl Debug for Table {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- let mut res = f.debug_struct("Table");
- res.field("family", &self.family);
- self.inner_format_struct(res)?.finish()
- }
-}
-
impl NfNetlinkObject for Table {
fn add_or_remove<'a>(&self, writer: &mut NfNetlinkWriter<'a>, msg_type: MsgType, seq: u32) {
let raw_msg_type = match msg_type {
@@ -72,31 +71,6 @@ impl NfNetlinkDeserializable for Table {
}
}
-impl_attr_getters_and_setters!(
- Table,
- [
- (get_name, set_name, with_name, sys::NFTA_TABLE_NAME, name, String),
- (get_flags, set_flags, with_flags, sys::NFTA_TABLE_FLAGS, flags, u32),
- (
- get_userdata,
- set_userdata,
- with_userdata,
- sys::NFTA_TABLE_USERDATA,
- userdata,
- Vec<u8>
- )
- ]
-);
-
-impl_nfnetlinkattribute!(
- inline : Table,
- [
- (sys::NFTA_TABLE_NAME, name),
- (sys::NFTA_TABLE_FLAGS, flags),
- (sys::NFTA_TABLE_USERDATA, userdata)
- ]
-);
-
pub fn list_tables() -> Result<Vec<Table>, crate::query::Error> {
let mut result = Vec::new();
crate::query::list_objects_with_data(