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}