File: serialize.rs

package info (click to toggle)
rust-nftables 0.6.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 564 kB
  • sloc: sh: 11; makefile: 2
file content (55 lines) | stat: -rw-r--r-- 2,049 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
use nftables::{expr::*, schema::*, stmt::*, types::*};
use std::borrow::Cow;

#[test]
fn test_serialize() {
    let _a: Nftables = Nftables {
        objects: Cow::Owned(vec![
            NfObject::CmdObject(NfCmd::Add(NfListObject::Table(Table {
                family: NfFamily::INet,
                name: Cow::Borrowed("namib"),
                handle: None,
            }))),
            NfObject::CmdObject(NfCmd::Add(NfListObject::Chain(Chain {
                family: NfFamily::INet,
                table: Cow::Borrowed("namib"),
                name: Cow::Borrowed("one_chain"),
                newname: None,
                handle: None,
                _type: Some(NfChainType::Filter),
                hook: Some(NfHook::Forward),
                prio: None,
                dev: None,
                policy: Some(NfChainPolicy::Accept),
            }))),
            NfObject::CmdObject(NfCmd::Add(NfListObject::Rule(Rule {
                family: NfFamily::INet,
                table: Cow::Borrowed("namib"),
                chain: Cow::Borrowed("one_chain"),
                expr: Cow::Owned(vec![
                    Statement::Match(Match {
                        left: Expression::List(vec![
                            Expression::Number(123),
                            Expression::String(Cow::Borrowed("asd")),
                        ]),
                        right: Expression::Named(NamedExpression::CT(CT {
                            key: Cow::Borrowed("state"),
                            family: None,
                            dir: None,
                        })),
                        op: Operator::EQ,
                    }),
                    Statement::Drop(Some(Drop {})),
                ]),
                handle: None,
                index: None,
                comment: None,
            }))),
        ]),
    };

    let j = serde_json::to_string(&_a).unwrap();
    let result: Nftables = serde_json::from_str(&j).unwrap();
    println!("JSON: {j}");
    println!("Parsed: {result:?}");
}