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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
use grapl_graph_descriptions::graph_description::{Graph as InnerGraph, Node}; use pyo3::prelude::*; use crate::process_node::ProcessNode; use crate::file_node::FileNode; use crate::asset_node::AssetNode; use crate::network_connection_node::NetworkConnectionNode; use crate::process_inbound_connection_node::ProcessInboundConnectionNode; use crate::ip_port_node::IpPortNode; use crate::ip_address_node::IpAddressNode; #[pyclass] #[derive(Clone)] pub struct Graph { pub inner_graph: InnerGraph, } impl<'source> pyo3::FromPyObject<'source> for Graph { fn extract(ob: &'source pyo3::types::PyAny) -> pyo3::PyResult<Self> { Ok( pyo3::PyTryFrom::try_from(ob).map(|x: &Self| x.clone())? ) } } #[pymethods] impl Graph { #[new] fn new( obj: &PyRawObject, ) { obj.init( Self { inner_graph: InnerGraph::new(0) } ) } pub fn is_empty(&self) -> bool { self.inner_graph.is_empty() } pub fn merge(&mut self, other: &Self) { self.inner_graph.merge(&other.inner_graph); } pub fn add_process(&mut self, node: ProcessNode) { self.inner_graph.add_node(node.inner_node); } pub fn add_file(&mut self, node: FileNode) { self.inner_graph.add_node(node.inner_node); } pub fn add_asset(&mut self, node: AssetNode) { self.inner_graph.add_node(node.inner_node); } pub fn add_network_connection(&mut self, node: NetworkConnectionNode) { self.inner_graph.add_node(node.inner_node); } pub fn add_process_inbound_connection(&mut self, node: ProcessInboundConnectionNode) { self.inner_graph.add_node(node.inner_node); } pub fn add_process_outbound_connection(&mut self, node: ProcessInboundConnectionNode) { self.inner_graph.add_node(node.inner_node); } pub fn add_ip_port(&mut self, node: IpPortNode) { self.inner_graph.add_node(node.inner_node); } pub fn add_ip_address(&mut self, node: IpAddressNode) { self.inner_graph.add_node(node.inner_node); } pub fn add_edge( &mut self, edge_name: String, from: String, to: String, ) { self.inner_graph.add_edge( edge_name, from, to ) } }