grapl_graph_descriptions_py/
file_node.rs

1
2use grapl_graph_descriptions::graph_description::File as InnerFile;
3use grapl_graph_descriptions::graph_description::FileBuilder;
4use pyo3::create_exception;
5use pyo3::prelude::*;
6
7create_exception!(file_node, FileBuilderError, pyo3::exceptions::ValueError);
8
9#[pyclass]
10#[derive(Clone)]
11pub struct FileNode {
12    pub(crate) inner_node: InnerFile,
13}
14
15impl<'source> pyo3::FromPyObject<'source> for FileNode {
16    fn extract(ob: &'source pyo3::types::PyAny) -> pyo3::PyResult<Self> {
17        Ok(
18            pyo3::PyTryFrom::try_from(ob).map(|x: &Self| x.clone())?
19        )
20    }
21}
22
23#[pyclass]
24#[derive(Clone, Default)]
25pub struct FileNodeBuilder {
26    builder: FileBuilder,
27}
28
29#[pymethods]
30impl FileNodeBuilder {
31    #[new]
32    fn new(
33        obj: &PyRawObject,
34    ) {
35        obj.init(
36            Self::default()
37        )
38    }
39
40    pub fn asset_id(&mut self, asset_id: Option<String>) -> Self {
41        self.builder.asset_id(asset_id);
42        self.clone()
43    }
44
45    pub fn hostname(&mut self, hostname: Option<String>) -> Self {
46        self.builder.hostname(hostname);
47        self.clone()
48    }
49
50    pub fn state(&mut self, state: u32) -> Self {
51        self.builder.state(state);
52        self.clone()
53    }
54
55    pub fn with_created_timestamp_ms(&mut self, timestamp: u64) -> Self {
56        self.builder.created_timestamp(timestamp);
57        self.clone()
58    }
59
60    pub fn with_last_seen_timestamp_ms(&mut self, timestamp: u64) -> Self {
61        self.builder.last_seen_timestamp(timestamp);
62        self.clone()
63    }
64
65    pub fn with_deleted_timestamp_ms(&mut self, timestamp: u64) -> Self {
66        self.builder.deleted_timestamp(timestamp);
67        self.clone()
68    }
69
70    pub fn file_name(&mut self, file_name: String) -> Self {
71        self.builder.file_name(file_name);
72        self.clone()
73    }
74
75    pub fn file_path(&mut self, file_path: String) -> Self {
76        self.builder.file_path(file_path);
77        self.clone()
78    }
79
80    pub fn file_extension(&mut self, file_extension: String) -> Self {
81        self.builder.file_extension(file_extension);
82        self.clone()
83    }
84
85    pub fn file_mime_type(&mut self, file_mime_type: String) -> Self {
86        self.builder.file_mime_type(file_mime_type);
87        self.clone()
88    }
89
90    pub fn file_size(&mut self, file_size: u64) -> Self {
91        self.builder.file_size(file_size);
92        self.clone()
93    }
94
95    pub fn file_version(&mut self, file_version: String) -> Self {
96        self.builder.file_version(file_version);
97        self.clone()
98    }
99
100    pub fn file_description(&mut self, file_description: String) -> Self {
101        self.builder.file_description(file_description);
102        self.clone()
103    }
104
105    pub fn file_product(&mut self, file_product: String) -> Self {
106        self.builder.file_product(file_product);
107        self.clone()
108    }
109
110    pub fn file_company(&mut self, file_company: String) -> Self {
111        self.builder.file_company(file_company);
112        self.clone()
113    }
114
115    pub fn file_directory(&mut self, file_directory: String) -> Self {
116        self.builder.file_directory(file_directory);
117        self.clone()
118    }
119
120    pub fn file_inode(&mut self, file_inode: u64) -> Self {
121        self.builder.file_inode(file_inode);
122        self.clone()
123    }
124
125    pub fn file_hard_links(&mut self, file_hard_links: u64) -> Self {
126        self.builder.file_hard_links(file_hard_links);
127        self.clone()
128    }
129
130    pub fn md5_hash(&mut self, md5_hash: String) -> Self {
131        self.builder.md5_hash(md5_hash);
132        self.clone()
133    }
134
135    pub fn sha1_hash(&mut self, sha1_hash: String) -> Self {
136        self.builder.sha1_hash(sha1_hash);
137        self.clone()
138    }
139
140    pub fn sha256_hash(&mut self, sha256_hash: String) -> Self {
141        self.builder.sha256_hash(sha256_hash);
142        self.clone()
143    }
144
145
146
147    pub fn build(&self) -> PyResult<FileNode> {
148
149        let built_node = match self.builder.build() {
150            Ok(built_node) => built_node,
151            Err(e) => {
152                return Err(
153                    PyErr::new::<FileBuilderError, _>(format!("{}", e))
154                )
155            }
156        };
157
158        Ok(
159            FileNode {
160                inner_node: built_node
161            }
162        )
163    }
164}