batch_mode_batch_metadata/
metadata.rs

1// ---------------- [ File: src/metadata.rs ]
2crate::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}