constant_string/serde.rs
1//! Serde integration.
2
3use std::fmt;
4
5use serde::de::{Error, Unexpected, Visitor};
6
7/// Serde visitor for a static string.
8///
9/// Based on `MustBeStrVisitor` from [`monostate`](https://crates.io/crates/monostate).
10pub struct MustBeStrVisitor(pub &'static str);
11
12impl<'de> Visitor<'de> for MustBeStrVisitor {
13 type Value = ();
14
15 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
16 write!(formatter, "{:?}", self.0)
17 }
18
19 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
20 where
21 E: Error,
22 {
23 if v == self.0 {
24 Ok(())
25 } else {
26 Err(E::invalid_value(Unexpected::Str(v), &self))
27 }
28 }
29}