batch_mode_batch_schema/
batch_output_data.rs1crate::ix!();
3
4#[derive(Debug, Serialize, Deserialize)]
5pub struct BatchOutputData {
6 responses: Vec<BatchResponseRecord>,
7}
8
9unsafe impl Send for BatchOutputData {}
10unsafe impl Sync for BatchOutputData {}
11
12impl BatchOutputData {
13
14 pub fn len(&self) -> usize {
15 self.responses.len()
16 }
17
18 pub fn new(responses: Vec<BatchResponseRecord>) -> Self {
19 Self { responses }
20 }
21
22 pub fn responses(&self) -> &Vec<BatchResponseRecord> {
23 &self.responses
24 }
25
26 pub fn request_ids(&self) -> Vec<CustomRequestId> {
27 self.responses.iter().map(|r| r.custom_id().clone()).collect()
28 }
29
30 pub fn iter(&self) -> std::slice::Iter<BatchResponseRecord> {
32 self.responses.iter()
33 }
34}
35
36#[async_trait]
37impl LoadFromFile for BatchOutputData {
38
39 type Error = JsonParseError;
40
41 async fn load_from_file(
42 file_path: impl AsRef<Path> + Send,
43 ) -> Result<Self, Self::Error> {
44
45 let file = File::open(file_path).await?;
46 let reader = BufReader::new(file);
47
48 let mut lines = reader.lines();
49 let mut responses = Vec::new();
50
51 while let Some(line) = lines.next_line().await? {
52 let response_record: BatchResponseRecord = serde_json::from_str(&line)?;
53 responses.push(response_record);
54 }
55
56 Ok(BatchOutputData::new(responses))
57 }
58}
59
60impl From<Vec<BatchOutputData>> for BatchOutputData {
61 fn from(batch_outputs: Vec<BatchOutputData>) -> Self {
62 let aggregated_responses = batch_outputs
64 .into_iter()
65 .flat_map(|output_data| output_data.responses)
66 .collect();
67 BatchOutputData::new(aggregated_responses)
68 }
69}
70
71impl<'a> IntoIterator for &'a BatchOutputData {
72 type Item = &'a BatchResponseRecord;
73 type IntoIter = std::slice::Iter<'a, BatchResponseRecord>;
74
75 fn into_iter(self) -> Self::IntoIter {
76 self.responses.iter()
77 }
78}
79
80impl IntoIterator for BatchOutputData {
81 type Item = BatchResponseRecord;
82 type IntoIter = std::vec::IntoIter<BatchResponseRecord>;
83
84 fn into_iter(self) -> Self::IntoIter {
85 self.responses.into_iter()
86 }
87}