use crate::SerializeWith;
use core::marker::PhantomData;
use serde::Serializer;
pub struct AddRef<F>(PhantomData<F>);
impl<F> AddRef<F> {
pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
where
T: ?Sized,
S: Serializer,
Self: SerializeWith<T>,
{
Self::serialize_with(value, serializer)
}
}
impl<F, T> SerializeWith<T> for AddRef<F>
where
F: for<'a> SerializeWith<&'a T>,
T: ?Sized,
{
fn serialize_with<S: Serializer>(value: &T, serializer: S) -> Result<S::Ok, S::Error> {
F::serialize_with(&value, serializer)
}
}