Skip to main content

gluesql_core/data/
row.rs

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}