aboutsummaryrefslogtreecommitdiff
path: root/src/parser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.rs')
-rw-r--r--src/parser.rs190
1 files changed, 0 insertions, 190 deletions
diff --git a/src/parser.rs b/src/parser.rs
index 834874c..7d89a1e 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -400,81 +400,6 @@ pub trait InnerFormat {
) -> Result<DebugStruct<'a, 'b>, std::fmt::Error>;
}
-#[macro_export]
-macro_rules! impl_attr_getters_and_setters {
- (without_deser $struct:ident, [$(($getter_name:ident, $setter_name:ident, $in_place_edit_name:ident, $attr_name:expr, $internal_name:ident, $type:ty)),+]) => {
- impl $struct {
- $(
- #[allow(dead_code)]
- pub fn $getter_name(&self) -> Option<&$type> {
- self.$internal_name.as_ref()
- }
-
- #[allow(dead_code)]
- pub fn $setter_name(&mut self, val: impl Into<$type>) {
- self.$internal_name = Some(val.into());
- }
-
- #[allow(dead_code)]
- pub fn $in_place_edit_name(mut self, val: impl Into<$type>) -> Self {
- self.$internal_name = Some(val.into());
- self
- }
-
- )+
- }
-
- impl $crate::parser::InnerFormat for $struct {
- fn inner_format_struct<'a, 'b: 'a>(&'a self, mut s: std::fmt::DebugStruct<'a, 'b>) -> Result<std::fmt::DebugStruct<'a, 'b>, std::fmt::Error> {
- $(
- // Rewrite attributes names to be readable: 'sys::NFTA_CHAIN_NAME' -> 'name'
- // Performance must be terrible, but this is the Debug impl anyway, so that
- // must mean we can afford to be slow, right? ;)
- if let Some(val) = self.$getter_name() {
- let mut attr = stringify!($attr_name);
- if let Some((nfta_idx, _match )) = attr.rmatch_indices("NFTA_").next() {
- if let Some(underscore_idx) = &attr[nfta_idx+5..].find('_') {
- attr = &attr[nfta_idx+underscore_idx+6..];
- }
- }
- let attr = attr.to_lowercase();
- s.field(&attr, val);
- }
- )+
- Ok(s)
- }
- }
-
- };
- (deser $struct:ident, [$(($getter_name:ident, $setter_name:ident, $in_place_edit_name:ident, $attr_name:expr, $internal_name:ident, $type:ty)),+]) => {
- impl $crate::nlmsg::AttributeDecoder for $struct {
- #[allow(dead_code)]
- fn decode_attribute(&mut self, attr_type: u16, buf: &[u8]) -> Result<(), $crate::parser::DecodeError> {
- use $crate::nlmsg::NfNetlinkDeserializable;
- debug!("Decoding attribute {} in type {}", attr_type, std::any::type_name::<$struct>());
- match attr_type {
- $(
- x if x == $attr_name => {
- debug!("Calling {}::deserialize()", std::any::type_name::<$type>());
- let (val, remaining) = <$type>::deserialize(buf)?;
- if remaining.len() != 0 {
- return Err($crate::parser::DecodeError::InvalidDataSize);
- }
- self.$setter_name(val);
- Ok(())
- },
- )+
- _ => Err($crate::parser::DecodeError::UnsupportedAttributeType(attr_type)),
- }
- }
- }
- };
- ($struct:ident, [$(($getter_name:ident, $setter_name:ident, $in_place_edit_name:ident, $attr_name:expr, $internal_name:ident, $type:ty)),+]) => {
- $crate::impl_attr_getters_and_setters!(without_deser $struct, [$(($getter_name, $setter_name, $in_place_edit_name, $attr_name, $internal_name, $type)),+]);
- $crate::impl_attr_getters_and_setters!(deser $struct, [$(($getter_name, $setter_name, $in_place_edit_name, $attr_name, $internal_name, $type)),+]);
- };
-}
-
pub trait Parsable
where
Self: Sized,
@@ -520,118 +445,3 @@ where
Ok((res, nfgenmsg, remaining_data))
}
}
-
-#[macro_export]
-macro_rules! impl_nfnetlinkattribute {
- (__inner : $struct:ident, [$(($attr_name:expr, $internal_name:ident)),+]) => {
- impl $struct {
- fn inner_get_size(&self) -> usize {
- use $crate::nlmsg::NfNetlinkAttribute;
- use $crate::parser::{pad_netlink_object, pad_netlink_object_with_variable_size};
- use $crate::sys::nlattr;
- let mut size = 0;
-
- $(
- if let Some(val) = &self.$internal_name {
- // Attribute header + attribute value
- size += pad_netlink_object::<nlattr>()
- + pad_netlink_object_with_variable_size(val.get_size());
- }
- )+
-
- size
- }
-
- unsafe fn inner_write_payload(&self, mut addr: *mut u8) {
- use $crate::nlmsg::NfNetlinkAttribute;
- use $crate::parser::{pad_netlink_object, pad_netlink_object_with_variable_size};
- use $crate::sys::nlattr;
- $(
- if let Some(val) = &self.$internal_name {
- debug!("writing attribute {} - {:?}", $attr_name, val);
-
- unsafe {
- $crate::parser::write_attribute($attr_name, val, addr);
- }
- let size = pad_netlink_object::<nlattr>()
- + pad_netlink_object_with_variable_size(val.get_size());
- #[allow(unused)]
- {
- addr = addr.offset(size as isize);
- }
- }
- )+
- }
- }
- };
- (inline : $struct:ident, [$(($attr_name:expr, $internal_name:ident)),+]) => {
- $crate::impl_nfnetlinkattribute!(__inner : $struct, [$(($attr_name, $internal_name)),+]);
-
- impl $crate::nlmsg::NfNetlinkAttribute for $struct {
- fn get_size(&self) -> usize {
- self.inner_get_size()
- }
-
- unsafe fn write_payload(&self, addr: *mut u8) {
- self.inner_write_payload(addr);
- }
- }
- };
- (nested : $struct:ident, [$(($attr_name:expr, $internal_name:ident)),+]) => {
- $crate::impl_nfnetlinkattribute!(__inner : $struct, [$(($attr_name, $internal_name)),+]);
-
- impl $crate::nlmsg::NfNetlinkAttribute for $struct {
- fn is_nested(&self) -> bool {
- true
- }
-
- fn get_size(&self) -> usize {
- self.inner_get_size()
- }
-
- unsafe fn write_payload(&self, addr: *mut u8) {
- self.inner_write_payload(addr);
- }
- }
- };
-}
-
-#[macro_export]
-macro_rules! create_wrapper_type {
- (without_deser : $struct:ident, [$(($getter_name:ident, $setter_name:ident, $in_place_edit_name:ident, $attr_name:expr, $internal_name:ident, $type:ty)),+]) => {
- #[derive(Clone, PartialEq, Eq, Default)]
- pub struct $struct {
- $(
- $internal_name: Option<$type>
- ),+
- }
-
- $crate::impl_attr_getters_and_setters!(without_deser $struct, [$(($getter_name, $setter_name, $in_place_edit_name, $attr_name, $internal_name, $type)),+]);
-
- impl std::fmt::Debug for $struct {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- use $crate::parser::InnerFormat;
- self.inner_format_struct(f.debug_struct(stringify!($struct)))?
- .finish()
- }
- }
-
- impl $crate::nlmsg::NfNetlinkDeserializable for $struct {
- fn deserialize(buf: &[u8]) -> Result<(Self, &[u8]), $crate::parser::DecodeError> {
- Ok(($crate::parser::read_attributes(buf)?, &[]))
- }
- }
- };
- ($struct:ident, [$(($getter_name:ident, $setter_name:ident, $in_place_edit_name:ident, $attr_name:expr, $internal_name:ident, $type:ty)),+]) => {
- create_wrapper_type!(without_deser : $struct, [$(($getter_name, $setter_name, $in_place_edit_name, $attr_name, $internal_name, $type)),+]);
- $crate::impl_attr_getters_and_setters!(deser $struct, [$(($getter_name, $setter_name, $in_place_edit_name, $attr_name, $internal_name, $type)),+]);
- };
- (inline $($($attrs:ident) +)? : $struct:ident, [$(($getter_name:ident, $setter_name:ident, $in_place_edit_name:ident, $attr_name:expr, $internal_name:ident, $type:ty)),+]) => {
- create_wrapper_type!($($($attrs) + :)? $struct, [$(($getter_name, $setter_name, $in_place_edit_name, $attr_name, $internal_name, $type)),+]);
- $crate::impl_nfnetlinkattribute!(inline : $struct, [$(($attr_name, $internal_name)),+]);
- };
- (nested $($($attrs:ident) +)? : $struct:ident, [$(($getter_name:ident, $setter_name:ident, $in_place_edit_name:ident, $attr_name:expr, $internal_name:ident, $type:ty)),+]) => {
- create_wrapper_type!($($($attrs) + :)? $struct, [$(($getter_name, $setter_name, $in_place_edit_name, $attr_name, $internal_name, $type)),+]);
- $crate::impl_nfnetlinkattribute!(nested : $struct, [$(($attr_name, $internal_name)),+]);
- };
-}