use super::prelude::*;
merge_thin_wrapper! {
pub struct NoMerge;
}
impl<T> Merge for NoMerge<T> {
fn merge(self, _other: Self) -> Result<Self, Error> {
Err(Error::collision())
}
fn merge_ref(&mut self, _other: Self) -> Result<(), Error> {
Err(Error::collision())
}
}
#[cfg(feature = "serde")]
mod serde_impl {
use super::*;
use serde::de::{Deserialize, Deserializer};
impl<'de, T> Deserialize<'de> for NoMerge<T>
where
T: Deserialize<'de>,
{
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
<T as Deserialize>::deserialize(deserializer).map(Into::into)
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::test::*;
#[test]
fn test_merge() {
let a = NoMerge(42);
let b = NoMerge(43);
let err = a.merge(b).unwrap_err();
assert_eq!(err.kind, ErrorKind::Collision);
}
}
#[cfg(test)]
#[cfg(feature = "serde")]
mod serde_tests {
use super::*;
#[test]
fn test_deserialize() {
let x: NoMerge<i32> = serde_json::from_str("42").unwrap();
assert_eq!(*x, 42);
}
}