trino-rust-client 0.7.3

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

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

#[derive(Debug, Default, Eq, PartialEq, Clone)]
pub struct FixedChar<const P: usize> {
    inner: String,
}

impl<const P: usize> FixedChar<P> {
    pub fn into_string(self) -> String {
        self.inner
    }
}

impl<const P: usize> Trino for FixedChar<P> {
    type ValueType<'a> = &'a str;
    type Seed<'a, 'de> = FixedCharSeed<P>;

    fn value(&self) -> Self::ValueType<'_> {
        &self.inner
    }
    fn ty() -> TrinoTy {
        TrinoTy::Char(P)
    }
    fn seed<'a, 'de>(_ctx: &'a Context) -> Self::Seed<'a, 'de> {
        FixedCharSeed
    }

    fn empty() -> Self {
        Default::default()
    }
}

pub struct FixedCharSeed<const P: usize>;

impl<'de, const P: usize> DeserializeSeed<'de> for FixedCharSeed<P> {
    type Value = FixedChar<P>;
    fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
    where
        D: Deserializer<'de>,
    {
        let s = String::deserialize(deserializer)?;
        Ok(FixedChar { inner: s })
    }
}