use serde::{Deserialize, Serialize};
use crate::schema::{NfCmd, NfListObject, NfObject, Nftables};
#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
pub struct Batch<'a> {
data: Vec<NfObject<'a>>,
}
impl Default for Batch<'_> {
fn default() -> Self {
Self::new()
}
}
impl<'a> Batch<'a> {
pub fn new() -> Batch<'a> {
Batch { data: Vec::new() }
}
pub fn add(&mut self, obj: NfListObject<'a>) {
self.data.push(NfObject::CmdObject(NfCmd::Add(obj)))
}
pub fn delete(&mut self, obj: NfListObject<'a>) {
self.data.push(NfObject::CmdObject(NfCmd::Delete(obj)))
}
pub fn add_cmd(&mut self, cmd: NfCmd<'a>) {
self.data.push(NfObject::CmdObject(cmd))
}
pub fn add_obj(&mut self, obj: NfListObject<'a>) {
self.data.push(NfObject::ListObject(obj))
}
pub fn add_all<I: IntoIterator<Item = NfObject<'a>>>(&mut self, objs: I) {
self.data.extend(objs)
}
pub fn to_nftables(self) -> Nftables<'a> {
Nftables {
objects: self.data.into(),
}
}
}