trino-rust-client 0.7.3

A trino client library
Documentation
use serde::de::{Deserialize, DeserializeSeed, Deserializer};
use serde_json::Value;

use crate::{Context, Trino, TrinoTy};

#[derive(Debug, Clone)]
pub struct Row {
    data: Vec<Value>,
}

impl Row {
    pub fn into_json(self) -> Vec<Value> {
        self.data
    }
}

impl Trino for Row {
    type ValueType<'a> = &'a [Value];
    type Seed<'a, 'de> = RowSeed;

    fn value(&self) -> Self::ValueType<'_> {
        &self.data
    }

    fn ty() -> TrinoTy {
        TrinoTy::Unknown
    }

    fn seed<'a, 'de>(_ctx: &'a Context) -> Self::Seed<'a, 'de> {
        RowSeed
    }

    fn empty() -> Self {
        Row { data: vec![] }
    }
}

pub struct RowSeed;

impl<'de> DeserializeSeed<'de> for RowSeed {
    type Value = Row;
    fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
    where
        D: Deserializer<'de>,
    {
        let data = <Vec<Value>>::deserialize(deserializer)?;
        Ok(Row { data })
    }
}