1use {
2 crate::{data::Value, executor::RowContext},
3 std::rc::Rc,
4};
5
6#[derive(Clone, Debug, PartialEq)]
7pub struct Row {
8 pub columns: Rc<[String]>,
9 pub values: Vec<Value>,
10}
11
12impl Row {
13 pub fn get_value(&self, ident: &str) -> Option<&Value> {
14 self.columns
15 .iter()
16 .position(|column| column == ident)
17 .and_then(|index| self.values.get(index))
18 }
19
20 pub fn iter(&self) -> impl Iterator<Item = (&String, &Value)> {
21 self.columns.iter().zip(self.values.iter())
22 }
23
24 pub fn into_values(self) -> Vec<Value> {
25 self.values
26 }
27
28 pub fn as_context(&self) -> RowContext<'_> {
29 RowContext::RefVecData {
30 columns: &self.columns,
31 values: &self.values,
32 }
33 }
34}