feat(t-rules::OrderedPair): get rid of unnecessary Clone bound on T for Serialize

This commit is contained in:
Ellen Emilia Anna Zscheile 2025-02-07 14:15:05 +01:00
parent c5a87d9bdf
commit 522355b16c
1 changed files with 30 additions and 3 deletions

View File

@ -12,13 +12,12 @@ use alloc::borrow::Cow;
use core::ops;
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "serde", serde(from = "(T, T)", into = "(T, T)"))]
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(from = "(T, T)", into = "&(T, T)"))]
#[cfg_attr(
feature = "serde",
serde(bound(
deserialize = "T: serde::Deserialize<'de> + Ord",
serialize = "T: serde::Serialize + Clone"
))
)]
pub struct OrderedPair<T>(T, T);
@ -49,6 +48,34 @@ impl<T> From<OrderedPair<T>> for (T, T) {
}
}
impl<'a, T> From<&'a OrderedPair<T>> for (&'a T, &'a T) {
#[inline(always)]
fn from(OrderedPair(a, b): &'a OrderedPair<T>) -> (&'a T, &'a T) {
(a, b)
}
}
#[cfg(feature = "serde")]
impl<T: serde::Serialize> serde::Serialize for OrderedPair<T> {
#[inline]
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
use serde::ser::SerializeTuple;
let mut tuple = match serializer.serialize_tuple(2) {
Ok(x) => x,
Err(e) => return Err(e),
};
match tuple.serialize_element(&self.0) {
Ok(x) => x,
Err(e) => return Err(e),
}
match tuple.serialize_element(&self.1) {
Ok(x) => x,
Err(e) => return Err(e),
}
tuple.end()
}
}
#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
pub struct Conditions<'a, K> {