use super::{Error, String};
use rkyv::{
Archive, Deserialize, DeserializeUnsized, Place, Serialize, SerializeUnsized,
rancor::{Fallible, Source},
string::{ArchivedString, StringResolver},
};
impl<const L: usize> Archive for String<L> {
type Archived = ArchivedString;
type Resolver = StringResolver;
#[inline]
fn resolve(&self, resolver: Self::Resolver, out: Place<Self::Archived>) {
ArchivedString::resolve_from_str(self.as_str(), resolver, out);
}
}
impl<S: Fallible + ?Sized, const L: usize> Serialize<S> for String<L>
where
S::Error: Source,
str: SerializeUnsized<S>,
{
fn serialize(&self, serializer: &mut S) -> Result<Self::Resolver, S::Error> {
ArchivedString::serialize_from_str(self.as_str(), serializer)
}
}
impl<const L: usize> PartialEq<String<L>> for ArchivedString {
#[inline]
fn eq(&self, other: &String<L>) -> bool {
PartialEq::eq(self.as_str(), other.as_str())
}
}
impl<D: Fallible<Error = Error> + ?Sized, const L: usize> Deserialize<String<L>, D>
for ArchivedString
where
str: DeserializeUnsized<str, D>,
{
fn deserialize(&self, _: &mut D) -> Result<String<L>, D::Error> {
String::try_from(self.as_str())
}
}