grapl_graph_descriptions_py/
ip_address_node.rs1use grapl_graph_descriptions::graph_description::IpAddress as InnerIpAddress;
2use grapl_graph_descriptions::graph_description::IpAddressBuilder;
3use pyo3::create_exception;
4use pyo3::prelude::*;
5
6create_exception!(ip_address_node, IpAddressBuilderError, pyo3::exceptions::ValueError);
7
8#[pyclass]
9#[derive(Clone)]
10pub struct IpAddressNode {
11 pub(crate) inner_node: InnerIpAddress,
12}
13
14impl<'source> pyo3::FromPyObject<'source> for IpAddressNode {
15 fn extract(ob: &'source pyo3::types::PyAny) -> pyo3::PyResult<Self> {
16 Ok(
17 pyo3::PyTryFrom::try_from(ob).map(|x: &Self| x.clone())?
18 )
19 }
20}
21
22#[pyclass]
23#[derive(Clone, Default)]
24pub struct IpAddressNodeBuilder {
25 builder: IpAddressBuilder,
26}
27
28#[pymethods]
29impl IpAddressNodeBuilder {
30 #[new]
31 fn new(
32 obj: &PyRawObject,
33 ) {
34 obj.init(
35 Self::default()
36 )
37 }
38
39 pub fn with_ip_address(&mut self, ip_address_id: String) -> Self {
40 self.builder.ip_address(ip_address_id);
41 self.clone()
42 }
43
44 pub fn with_first_timestamp_ms(&mut self, timestamp: u64) -> Self {
45 self.builder.first_seen_timestamp(timestamp);
46 self.clone()
47 }
48
49 pub fn with_last_seen_timestamp_ms(&mut self, timestamp: u64) -> Self {
50 self.builder.last_seen_timestamp(timestamp);
51 self.clone()
52 }
53
54 pub fn build(&self) -> PyResult<IpAddressNode> {
55
56 let built_node = match self.builder.build() {
57 Ok(built_node) => built_node,
58 Err(e) => {
59 return Err(
60 PyErr::new::<IpAddressBuilderError, _>(format!("{}", e))
61 )
62 }
63 };
64
65 Ok(
66 IpAddressNode {
67 inner_node: built_node
68 }
69 )
70 }
71}