diff options
author | Simon THOBY <git@nightmared.fr> | 2022-12-03 21:47:52 +0100 |
---|---|---|
committer | Simon THOBY <git@nightmared.fr> | 2022-12-03 21:47:52 +0100 |
commit | 10bb4b01333aa44d913ca87a52389e685a441527 (patch) | |
tree | d5136b107f9d364291dcea0b668049960002ec4f /src | |
parent | 66de507d2d33c03203b996a0d1797543e84c4b3d (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.rs | 7 | ||||
-rw-r--r-- | src/table.rs | 50 |
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( |