1#[cfg(not(feature = "serde"))]
4compile_error!("expected `serde` to be enabled");
5
6use serde::{Deserialize, Deserializer, Serialize, Serializer, de::Error};
7
8use crate::{
9 predicate::Predicate,
10 refinement::{Refine, Refinement},
11 types::TypeStr,
12};
13
14impl<T: Serialize + ?Sized, P: Predicate<T> + ?Sized, C: TypeStr + ?Sized> Serialize
15 for Refinement<T, P, C>
16{
17 fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18 self.get_ref().serialize(serializer)
19 }
20}
21
22impl<'de, T: Deserialize<'de>, P: Predicate<T> + ?Sized, C: TypeStr + ?Sized> Deserialize<'de>
23 for Refinement<T, P, C>
24{
25 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26 let value = T::deserialize(deserializer)?;
27
28 let refined = value.refine().map_err(D::Error::custom)?;
29
30 Ok(refined)
31 }
32}