grapl_graph_descriptions_py/
file_node.rs1
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}