batch_mode_batch_metadata/
metadata.rs1crate::ix!();
3
4#[derive(Serialize, Deserialize)]
5pub struct BatchMetadata {
6 batch_id: String,
7 input_file_id: String,
8 output_file_id: Option<String>,
9 error_file_id: Option<String>,
10}
11
12impl BatchMetadata {
13
14 pub fn with_input_id_and_batch_id(input_id: &str, batch_id: &str) -> Self {
15 Self {
16 batch_id: batch_id.to_string(),
17 input_file_id: input_id.to_string(),
18 output_file_id: None,
19 error_file_id: None,
20 }
21 }
22
23 pub fn batch_id(&self) -> &str {
24 &self.batch_id
25 }
26
27 pub fn input_file_id(&self) -> &str {
28 self.input_file_id.as_ref()
29 }
30
31 pub fn output_file_id(&self) -> Result<&str,BatchMetadataError> {
32 let output_file_id = self.output_file_id.as_ref()
33 .ok_or(BatchMetadataError::MissingOutputFileId)?;
34 Ok(output_file_id)
35 }
36
37 pub fn error_file_id(&self) -> Result<&str,BatchMetadataError> {
38 let error_file_id = self.error_file_id.as_ref()
39 .ok_or(BatchMetadataError::MissingErrorFileId)?;
40 Ok(error_file_id)
41 }
42
43 pub fn set_output_file_id(&mut self, new_id: Option<String>) {
44 self.output_file_id = new_id;
45 }
46
47 pub fn set_error_file_id(&mut self, new_id: Option<String>) {
48 self.error_file_id = new_id;
49 }
50}
51
52#[async_trait]
53impl SaveToFile for BatchMetadata {
54
55 type Error = BatchMetadataError;
56
57 async fn save_to_file(
58 &self,
59 metadata_filename: impl AsRef<Path> + Send,
60
61 ) -> Result<(), Self::Error> {
62
63 info!("saving batch metadata to file {:?}", metadata_filename.as_ref());
64
65 let metadata_json = serde_json::to_string(&self)?;
66
67 std::fs::write(metadata_filename, metadata_json)?;
68
69 Ok(())
70 }
71}
72
73#[async_trait]
74impl LoadFromFile for BatchMetadata {
75
76 type Error = BatchMetadataError;
77
78 async fn load_from_file(metadata_filename: impl AsRef<Path> + Send)
79 -> Result<Self, Self::Error>
80 {
81 info!("loading batch metadata from file {:?}", metadata_filename.as_ref());
82
83 let metadata_json = std::fs::read_to_string(metadata_filename)?;
84 let metadata = serde_json::from_str(&metadata_json)?;
85
86 Ok(metadata)
87 }
88}