Skip to main content

tuwunel_core/utils/string/
de.rs

1//! Serde deserializers for normalized strings.
2//!
3//! The module currently exposes a helper that lowercases a deserialized string.
4//! It is intended for use with Serde field attributes.
5
6use std::fmt;
7
8use serde::de::{Deserializer, Error, Visitor};
9
10struct ToLowercase;
11
12/// Deserializes a string and converts it to Unicode lowercase.
13///
14/// The adapter applies [`str::to_lowercase`] to the deserialized value. This is
15/// ordinary lowercasing rather than full Unicode case folding.
16#[inline]
17pub fn to_lowercase<'de, D>(deserializer: D) -> Result<String, D::Error>
18where
19	D: Deserializer<'de>,
20{
21	deserializer.deserialize_string(ToLowercase)
22}
23
24impl Visitor<'_> for ToLowercase {
25	type Value = String;
26
27	#[inline]
28	fn visit_str<E: Error>(self, v: &str) -> Result<Self::Value, E> { Ok(v.to_lowercase()) }
29
30	fn expecting(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.write_str("String") }
31}