Decode a column file using the codec pipeline.
(
data: &[u8],
col_type: ColumnType,
codec: ResolvedColumnCodec,
)
| 92 | |
| 93 | /// Decode a column file using the codec pipeline. |
| 94 | pub(super) fn decode_column( |
| 95 | data: &[u8], |
| 96 | col_type: ColumnType, |
| 97 | codec: ResolvedColumnCodec, |
| 98 | ) -> Result<ColumnData, SegmentError> { |
| 99 | let map_err = |e: nodedb_codec::CodecError| SegmentError::Corrupt(format!("{codec}: {e}")); |
| 100 | |
| 101 | match col_type { |
| 102 | ColumnType::Timestamp => { |
| 103 | let values = nodedb_codec::decode_i64_pipeline(data, codec.into_column_codec()) |
| 104 | .map_err(map_err)?; |
| 105 | Ok(ColumnData::Timestamp(values)) |
| 106 | } |
| 107 | ColumnType::Float64 => { |
| 108 | let values = nodedb_codec::decode_f64_pipeline(data, codec.into_column_codec()) |
| 109 | .map_err(map_err)?; |
| 110 | Ok(ColumnData::Float64(values)) |
| 111 | } |
| 112 | ColumnType::Int64 => { |
| 113 | let values = nodedb_codec::decode_i64_pipeline(data, codec.into_column_codec()) |
| 114 | .map_err(map_err)?; |
| 115 | Ok(ColumnData::Int64(values)) |
| 116 | } |
| 117 | ColumnType::Symbol => { |
| 118 | let raw = nodedb_codec::decode_bytes_pipeline(data, codec.into_column_codec()) |
| 119 | .map_err(map_err)?; |
| 120 | let ids: Vec<u32> = raw |
| 121 | .chunks_exact(4) |
| 122 | .map(|c| u32::from_le_bytes([c[0], c[1], c[2], c[3]])) |
| 123 | .collect(); |
| 124 | Ok(ColumnData::Symbol(ids)) |
| 125 | } |
| 126 | } |
| 127 | } |
no test coverage detected