prusto_rs/types/
string.rs

1use serde::de::{Deserialize, DeserializeSeed, Deserializer};
2
3use super::{Context, Presto, PrestoMapKey, PrestoTy};
4
5impl Presto for String {
6    type ValueType<'a> = &'a String;
7    type Seed<'a, 'de> = StringSeed;
8
9    fn value(&self) -> Self::ValueType<'_> {
10        self
11    }
12    fn ty() -> PrestoTy {
13        PrestoTy::Varchar
14    }
15    fn seed<'a, 'de>(_ctx: &'a Context) -> Self::Seed<'a, 'de> {
16        StringSeed
17    }
18
19    fn empty() -> Self {
20        Default::default()
21    }
22}
23
24impl PrestoMapKey for String {}
25
26pub struct StringSeed;
27
28impl<'de> DeserializeSeed<'de> for StringSeed {
29    type Value = String;
30    fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
31    where
32        D: Deserializer<'de>,
33    {
34        Self::Value::deserialize(deserializer)
35    }
36}