grapl_graph_descriptions_py/
graph.rs1use 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}