trino-rust-client 0.0.1

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

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

impl Trino for Uuid {
    type ValueType<'a> = &'a Uuid;
    type Seed<'a, 'de> = UuidSeed;

    fn value(&self) -> Self::ValueType<'_> {
        self
    }
    fn ty() -> TrinoTy {
        TrinoTy::Uuid
    }
    fn seed<'a, 'de>(_ctx: &'a Context) -> Self::Seed<'a, 'de> {
        UuidSeed
    }

    fn empty() -> Self {
        Uuid::new_v4()
    }
}

pub struct UuidSeed;

impl<'de> DeserializeSeed<'de> for UuidSeed {
    type Value = Uuid;
    fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
    where
        D: Deserializer<'de>,
    {
        <Uuid as Deserialize<'de>>::deserialize(deserializer)
    }
}