Skip to main content

trino_rust_client/types/
row.rs

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