trino_rust_client/types/
row.rs1use 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}