use erased_serde::Serializer as ErasedSerializer;
use serde::ser::Serializer;
pub trait OwnedSerializer: Sized {
fn with_erased(
self,
f: &mut dyn FnMut(&mut dyn ErasedSerializer) -> erased_serde::Result<()>,
) -> erased_serde::Result<()>;
}
impl<S> OwnedSerializer for S
where
for<'a> &'a mut S: Serializer,
{
fn with_erased(
mut self,
f: &mut dyn FnMut(&mut dyn ErasedSerializer) -> erased_serde::Result<()>,
) -> erased_serde::Result<()> {
let mut erased = <dyn ErasedSerializer>::erase(&mut self);
f(&mut erased)
}
}