(&self, ordered_columns: &[String])
| 45 | } |
| 46 | |
| 47 | fn align_columns(&self, ordered_columns: &[String]) -> Result<Self, String> { |
| 48 | let mut col_to_idx = HashMap::new(); |
| 49 | for (i, c) in self.columns.iter().enumerate() { |
| 50 | col_to_idx.insert(c.as_str(), i); |
| 51 | } |
| 52 | |
| 53 | let mut aligned_values = Vec::with_capacity(self.values.len()); |
| 54 | for row in &self.values { |
| 55 | let mut out_row = Vec::with_capacity(ordered_columns.len()); |
| 56 | for c in ordered_columns { |
| 57 | let idx = col_to_idx |
| 58 | .get(c.as_str()) |
| 59 | .ok_or_else(|| format!("missing column '{c}' in table"))?; |
| 60 | out_row.push(row[*idx]); |
| 61 | } |
| 62 | aligned_values.push(out_row); |
| 63 | } |
| 64 | |
| 65 | Ok(Self { |
| 66 | index: self.index.clone(), |
| 67 | columns: ordered_columns.to_vec(), |
| 68 | values: aligned_values, |
| 69 | }) |
| 70 | } |
| 71 | } |
| 72 | |
| 73 | #[derive(Clone, Debug)] |
no test coverage detected