Skip to main content

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}