grapl_graph_descriptions_py/
graph.rs

1use grapl_graph_descriptions::graph_description::{Graph as InnerGraph, Node};
2
3use pyo3::prelude::*;
4use crate::process_node::ProcessNode;
5use crate::file_node::FileNode;
6use crate::asset_node::AssetNode;
7use crate::network_connection_node::NetworkConnectionNode;
8use crate::process_inbound_connection_node::ProcessInboundConnectionNode;
9use crate::ip_port_node::IpPortNode;
10use crate::ip_address_node::IpAddressNode;
11
12#[pyclass]
13#[derive(Clone)]
14pub struct Graph {
15    pub inner_graph: InnerGraph,
16}
17
18impl<'source> pyo3::FromPyObject<'source> for Graph {
19    fn extract(ob: &'source pyo3::types::PyAny) -> pyo3::PyResult<Self> {
20        Ok(
21            pyo3::PyTryFrom::try_from(ob).map(|x: &Self| x.clone())?
22        )
23    }
24}
25
26
27#[pymethods]
28impl Graph {
29    #[new]
30    fn new(
31        obj: &PyRawObject,
32    ) {
33        obj.init(
34            Self {
35                inner_graph: InnerGraph::new(0)
36            }
37        )
38    }
39
40    pub fn is_empty(&self) -> bool {
41        self.inner_graph.is_empty()
42    }
43
44    pub fn merge(&mut self, other: &Self) {
45        self.inner_graph.merge(&other.inner_graph);
46    }
47
48    pub fn add_process(&mut self, node: ProcessNode) {
49        self.inner_graph.add_node(node.inner_node);
50    }
51
52    pub fn add_file(&mut self, node: FileNode) {
53        self.inner_graph.add_node(node.inner_node);
54    }
55
56    pub fn add_asset(&mut self, node: AssetNode) {
57        self.inner_graph.add_node(node.inner_node);
58    }
59
60    pub fn add_network_connection(&mut self, node: NetworkConnectionNode) {
61        self.inner_graph.add_node(node.inner_node);
62    }
63
64    pub fn add_process_inbound_connection(&mut self, node: ProcessInboundConnectionNode) {
65        self.inner_graph.add_node(node.inner_node);
66    }
67
68    pub fn add_process_outbound_connection(&mut self, node: ProcessInboundConnectionNode) {
69        self.inner_graph.add_node(node.inner_node);
70    }
71
72    pub fn add_ip_port(&mut self, node: IpPortNode) {
73        self.inner_graph.add_node(node.inner_node);
74    }
75
76    pub fn add_ip_address(&mut self, node: IpAddressNode) {
77        self.inner_graph.add_node(node.inner_node);
78    }
79
80    pub fn add_edge(
81        &mut self,
82        edge_name: String,
83        from: String,
84        to: String,
85    ) {
86        self.inner_graph.add_edge(
87            edge_name,
88            from,
89            to
90        )
91    }
92}