macro_rules! begin_without_finish {
() => {
begin_without_finish!(Self);
};
($ty:ty) => {
#[inline]
fn __private_begin<'a>(
value: &'a $ty,
state: &mut crate::State,
) -> Result<crate::ser::Begin<'a>, crate::Error> {
let shape = Self::container_shape(value);
Ok(crate::ser::Begin::emit(
Self::serialize(value, state)?,
shape,
false,
))
}
};
}
macro_rules! slot_atom_into {
() => {
slot_atom_into!(Self);
};
($ty:ty) => {
#[inline]
fn __private_atom_into(
out: &mut Option<$ty>,
atom: Atom,
state: &mut State,
) -> Result<(), Error> {
Self::deserialize_atom(crate::de::Slot::wrap(out), atom, state)
}
#[inline]
fn __private_borrowed_atom_into(
out: &mut Option<$ty>,
atom: Atom<'de>,
state: &mut State,
) -> Result<(), Error> {
Self::deserialize_borrowed_atom(crate::de::Slot::wrap(out), atom, state)
}
};
}
macro_rules! forward_to_owned {
($field:ident) => {
fn next_key(
&mut self,
state: &mut crate::State,
) -> Result<crate::de::SinkHandle<'_, 'de>, crate::Error> {
self.$field.get_mut().next_key(state)
}
fn next_value(
&mut self,
state: &mut crate::State,
) -> Result<crate::de::SinkHandle<'_, 'de>, crate::Error> {
self.$field.get_mut().next_value(state)
}
fn __private_key_atom(
&mut self,
atom: crate::Atom,
state: &mut crate::State,
) -> Result<(), crate::Error> {
self.$field.get_mut().__private_key_atom(atom, state)
}
fn __private_value_atom(
&mut self,
atom: crate::Atom,
state: &mut crate::State,
) -> Result<(), crate::Error> {
self.$field.get_mut().__private_value_atom(atom, state)
}
fn __private_borrowed_key_atom(
&mut self,
atom: crate::Atom<'de>,
state: &mut crate::State,
) -> Result<(), crate::Error> {
self.$field
.get_mut()
.__private_borrowed_key_atom(atom, state)
}
fn __private_borrowed_value_atom(
&mut self,
atom: crate::Atom<'de>,
state: &mut crate::State,
) -> Result<(), crate::Error> {
self.$field
.get_mut()
.__private_borrowed_value_atom(atom, state)
}
fn value_for_key(
&mut self,
key: &str,
state: &mut crate::State,
) -> Result<Option<crate::de::SinkHandle<'_, 'de>>, crate::Error> {
self.$field.get_mut().value_for_key(key, state)
}
fn recover(
&mut self,
err: crate::Error,
state: &mut crate::State,
) -> Result<(), crate::Error> {
self.$field.get_mut().recover(err, state)
}
fn expecting(&self) -> alloc::borrow::Cow<'_, str> {
self.$field.get().expecting()
}
};
}
macro_rules! forward_to_optional {
($sink:ident) => {
fn next_key(
&mut self,
state: &mut crate::State,
) -> Result<crate::de::SinkHandle<'_, 'de>, crate::Error> {
match self.$sink() {
Some(sink) => sink.next_key(state),
None => Ok(crate::de::SinkHandle::null()),
}
}
fn next_value(
&mut self,
state: &mut crate::State,
) -> Result<crate::de::SinkHandle<'_, 'de>, crate::Error> {
match self.$sink() {
Some(sink) => sink.next_value(state),
None => Ok(crate::de::SinkHandle::null()),
}
}
fn __private_key_atom(
&mut self,
atom: crate::Atom,
state: &mut crate::State,
) -> Result<(), crate::Error> {
match self.$sink() {
Some(sink) => sink.__private_key_atom(atom, state),
None => Ok(()),
}
}
fn __private_value_atom(
&mut self,
atom: crate::Atom,
state: &mut crate::State,
) -> Result<(), crate::Error> {
match self.$sink() {
Some(sink) => sink.__private_value_atom(atom, state),
None => Ok(()),
}
}
fn __private_borrowed_key_atom(
&mut self,
atom: crate::Atom<'de>,
state: &mut crate::State,
) -> Result<(), crate::Error> {
match self.$sink() {
Some(sink) => sink.__private_borrowed_key_atom(atom, state),
None => Ok(()),
}
}
fn __private_borrowed_value_atom(
&mut self,
atom: crate::Atom<'de>,
state: &mut crate::State,
) -> Result<(), crate::Error> {
match self.$sink() {
Some(sink) => sink.__private_borrowed_value_atom(atom, state),
None => Ok(()),
}
}
fn value_for_key(
&mut self,
key: &str,
state: &mut crate::State,
) -> Result<Option<crate::de::SinkHandle<'_, 'de>>, crate::Error> {
match self.$sink() {
Some(sink) => sink.value_for_key(key, state),
None => Ok(None),
}
}
};
}