prusto_rs/types/
row.rs

1use serde::de::{Deserialize, DeserializeSeed, Deserializer};
2use serde_json::Value;
3
4use crate::{Context, Presto, PrestoTy};
5
6#[derive(Debug, Clone)]
7pub struct Row {
8    data: Vec<Value>,
9}
10
11impl Row {
12    pub fn into_json(self) -> Vec<Value> {
13        self.data
14    }
15}
16
17impl Presto for Row {
18    type ValueType<'a> = &'a [Value];
19    type Seed<'a, 'de> = RowSeed;
20
21    fn value(&self) -> Self::ValueType<'_> {
22        &self.data
23    }
24
25    fn ty() -> PrestoTy {
26        PrestoTy::Unknown
27    }
28
29    fn seed<'a, 'de>(_ctx: &'a Context) -> Self::Seed<'a, 'de> {
30        RowSeed
31    }
32
33    fn empty() -> Self {
34        Row { data: vec![] }
35    }
36}
37
38pub struct RowSeed;
39
40impl<'de> DeserializeSeed<'de> for RowSeed {
41    type Value = Row;
42    fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
43    where
44        D: Deserializer<'de>,
45    {
46        let data = <Vec<Value>>::deserialize(deserializer)?;
47        Ok(Row { data })
48    }
49}