#[allow(unused)]
macro_rules! forward_specialized_to_generic {
    () => {
        fn accept_start_sequence(&mut self) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::StartSequence)
        }
        fn accept_end_sequence(&mut self) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::EndSequence)
        }
        fn accept_start_tuple(&mut self) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::StartTuple)
        }
        fn accept_end_tuple(&mut self) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::EndTuple)
        }
        fn accept_start_struct(&mut self) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::StartStruct)
        }
        fn accept_end_struct(&mut self) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::EndStruct)
        }
        fn accept_start_map(&mut self) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::StartMap)
        }
        fn accept_end_map(&mut self) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::EndMap)
        }
        fn accept_item(&mut self) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::Item)
        }
        fn accept_some(&mut self) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::Some)
        }
        fn accept_null(&mut self) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::Null)
        }
        fn accept_default(&mut self) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::Default)
        }
        fn accept_str(&mut self, val: &str) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::Str(val))
        }
        fn accept_variant(
            &mut self,
            name: &str,
            idx: usize,
        ) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::Variant(name, idx))
        }
        fn accept_bool(&mut self, val: bool) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::Bool(val))
        }
        fn accept_i8(&mut self, val: i8) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::I8(val))
        }
        fn accept_i16(&mut self, val: i16) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::I16(val))
        }
        fn accept_i32(&mut self, val: i32) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::I32(val))
        }
        fn accept_i64(&mut self, val: i64) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::I64(val))
        }
        fn accept_u8(&mut self, val: u8) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::U8(val))
        }
        fn accept_u16(&mut self, val: u16) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::U16(val))
        }
        fn accept_u32(&mut self, val: u32) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::U32(val))
        }
        fn accept_u64(&mut self, val: u64) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::U64(val))
        }
        fn accept_f32(&mut self, val: f32) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::F32(val))
        }
        fn accept_f64(&mut self, val: f64) -> $crate::internal::error::Result<()> {
            self.accept($crate::internal::event::Event::F64(val))
        }
    };
}
#[allow(unused)]
pub(crate) use forward_specialized_to_generic;
#[allow(unused)]
macro_rules! accept_start {
    (($this:ident, $ev:ident, $val:ident, $next:ident) $block:block) => {
        fn accept_start_sequence(&mut self) -> Result<()> {
            let $this = self;
            let $ev = Event::StartSequence;
            let $val = ();
            fn $next<E: EventSink + ?Sized>(next: &mut E, _: ()) -> Result<()> {
                next.accept_start_sequence()
            }
            $block
        }
        fn accept_start_tuple(&mut self) -> Result<()> {
            let $this = self;
            let $ev = Event::StartTuple;
            let $val = ();
            fn $next<E: EventSink + ?Sized>(next: &mut E, _: ()) -> Result<()> {
                next.accept_start_tuple()
            }
            $block
        }
        fn accept_start_struct(&mut self) -> Result<()> {
            let $this = self;
            let $ev = Event::StartStruct;
            let $val = ();
            fn $next<E: EventSink + ?Sized>(next: &mut E, _: ()) -> Result<()> {
                next.accept_start_struct()
            }
            $block
        }
        fn accept_start_map(&mut self) -> Result<()> {
            let $this = self;
            let $ev = Event::StartMap;
            let $val = ();
            fn $next<E: EventSink + ?Sized>(next: &mut E, _: ()) -> Result<()> {
                next.accept_start_map()
            }
            $block
        }
    };
}
#[allow(unused)]
pub(crate) use accept_start;
#[allow(unused)]
macro_rules! accept_end {
    (($this:ident, $ev:ident, $val:ident, $next:ident) $block:block) => {
        fn accept_end_sequence(&mut self) -> Result<()> {
            let $this = self;
            let $ev = Event::EndSequence;
            let $val = ();
            fn $next<E: EventSink + ?Sized>(next: &mut E, _: ()) -> Result<()> {
                next.accept_end_sequence()
            }
            $block
        }
        fn accept_end_tuple(&mut self) -> Result<()> {
            let $this = self;
            let $ev = Event::EndTuple;
            let $val = ();
            fn $next<E: EventSink + ?Sized>(next: &mut E, _: ()) -> Result<()> {
                next.accept_end_tuple()
            }
            $block
        }
        fn accept_end_struct(&mut self) -> Result<()> {
            let $this = self;
            let $ev = Event::EndStruct;
            let $val = ();
            fn $next<E: EventSink + ?Sized>(next: &mut E, _: ()) -> Result<()> {
                next.accept_end_struct()
            }
            $block
        }
        fn accept_end_map(&mut self) -> Result<()> {
            let $this = self;
            let $ev = Event::EndMap;
            let $val = ();
            fn $next<E: EventSink + ?Sized>(next: &mut E, _: ()) -> Result<()> {
                next.accept_end_map()
            }
            $block
        }
    };
}
#[allow(unused)]
pub(crate) use accept_end;
#[allow(unused)]
macro_rules! accept_value {
    (($this:ident, $ev:ident, $val:ident, $next:ident) $block:block) => {
        fn accept_str(&mut self, val: &str) -> Result<()> {
            let $this = self;
            let $ev = Event::Str(val);
            let $val = val;
            fn $next<E: EventSink + ?Sized>(next: &mut E, val: &str) -> Result<()> {
                next.accept_str(val)
            }
            $block
        }
        fn accept_bool(&mut self, val: bool) -> Result<()> {
            let $this = self;
            let $ev = Event::Bool(val);
            let $val = val;
            fn $next<E: EventSink + ?Sized>(next: &mut E, val: bool) -> Result<()> {
                next.accept_bool(val)
            }
            $block
        }
        fn accept_i8(&mut self, val: i8) -> Result<()> {
            let $this = self;
            let $ev = Event::I8(val);
            let $val = val;
            fn $next<E: EventSink + ?Sized>(next: &mut E, val: i8) -> Result<()> {
                next.accept_i8(val)
            }
            $block
        }
        fn accept_i16(&mut self, val: i16) -> Result<()> {
            let $this = self;
            let $ev = Event::I16(val);
            let $val = val;
            fn $next<E: EventSink + ?Sized>(next: &mut E, val: i16) -> Result<()> {
                next.accept_i16(val)
            }
            $block
        }
        fn accept_i32(&mut self, val: i32) -> Result<()> {
            let $this = self;
            let $ev = Event::I32(val);
            let $val = val;
            fn $next<E: EventSink + ?Sized>(next: &mut E, val: i32) -> Result<()> {
                next.accept_i32(val)
            }
            $block
        }
        fn accept_i64(&mut self, val: i64) -> Result<()> {
            let $this = self;
            let $ev = Event::I64(val);
            let $val = val;
            fn $next<E: EventSink + ?Sized>(next: &mut E, val: i64) -> Result<()> {
                next.accept_i64(val)
            }
            $block
        }
        fn accept_u8(&mut self, val: u8) -> Result<()> {
            let $this = self;
            let $ev = Event::U8(val);
            let $val = val;
            fn $next<E: EventSink + ?Sized>(next: &mut E, val: u8) -> Result<()> {
                next.accept_u8(val)
            }
            $block
        }
        fn accept_u16(&mut self, val: u16) -> Result<()> {
            let $this = self;
            let $ev = Event::U16(val);
            let $val = val;
            fn $next<E: EventSink + ?Sized>(next: &mut E, val: u16) -> Result<()> {
                next.accept_u16(val)
            }
            $block
        }
        fn accept_u32(&mut self, val: u32) -> Result<()> {
            let $this = self;
            let $ev = Event::U32(val);
            let $val = val;
            fn $next<E: EventSink + ?Sized>(next: &mut E, val: u32) -> Result<()> {
                next.accept_u32(val)
            }
            $block
        }
        fn accept_u64(&mut self, val: u64) -> Result<()> {
            let $this = self;
            let $ev = Event::U64(val);
            let $val = val;
            fn $next<E: EventSink + ?Sized>(next: &mut E, val: u64) -> Result<()> {
                next.accept_u64(val)
            }
            $block
        }
        fn accept_f32(&mut self, val: f32) -> Result<()> {
            let $this = self;
            let $ev = Event::F32(val);
            let $val = val;
            fn $next<E: EventSink + ?Sized>(next: &mut E, val: f32) -> Result<()> {
                next.accept_f32(val)
            }
            $block
        }
        fn accept_f64(&mut self, val: f64) -> Result<()> {
            let $this = self;
            let $ev = Event::F64(val);
            let $val = val;
            fn $next<E: EventSink + ?Sized>(next: &mut E, val: f64) -> Result<()> {
                next.accept_f64(val)
            }
            $block
        }
        fn accept_null(&mut self) -> Result<()> {
            let $this = self;
            let $ev = Event::Null;
            let $val = ();
            fn $next<E: EventSink + ?Sized>(next: &mut E, _: ()) -> Result<()> {
                next.accept_null()
            }
            $block
        }
        fn accept_default(&mut self) -> Result<()> {
            let $this = self;
            let $ev = Event::Default;
            let $val = ();
            fn $next<E: EventSink + ?Sized>(next: &mut E, _: ()) -> Result<()> {
                next.accept_default()
            }
            $block
        }
    };
}
#[allow(unused)]
pub(crate) use accept_value;
#[allow(unused)]
macro_rules! accept_marker {
    (($this:ident, $ev:ident, $val:ident, $next:ident) $block:block) => {
        fn accept_item(&mut self) -> Result<()> {
            let $this = self;
            let $ev = Event::Item;
            let $val = ();
            fn $next<E: EventSink + ?Sized>(next: &mut E, _val: ()) -> Result<()> {
                next.accept_item()
            }
            $block
        }
        fn accept_some(&mut self) -> Result<()> {
            let $this = self;
            let $ev = Event::Some;
            let $val = ();
            fn $next<E: EventSink + ?Sized>(next: &mut E, _val: ()) -> Result<()> {
                next.accept_some()
            }
            $block
        }
        fn accept_variant(&mut self, name: &str, idx: usize) -> Result<()> {
            let $this = self;
            let $ev = Event::Variant(name, idx);
            let $val = (name, idx);
            fn $next<E: EventSink + ?Sized>(next: &mut E, val: (&str, usize)) -> Result<()> {
                next.accept_variant(val.0, val.1)
            }
            $block
        }
    };
}
#[allow(unused)]
pub(crate) use accept_marker;
#[allow(unused)]
macro_rules! fail_on_non_string_primitive {
    ($context:literal) => {
        fn accept_bool(&mut self, _val: bool) -> Result<()> {
            fail!(
                "{} cannot accept Event::Bool [{path}]",
                $context,
                path = self.path
            )
        }
        fn accept_i8(&mut self, _val: i8) -> Result<()> {
            fail!(
                "{} cannot accept Event::I8 [{path}]",
                $context,
                path = self.path
            )
        }
        fn accept_i16(&mut self, _val: i16) -> Result<()> {
            fail!(
                "{} cannot accept Event::I16 [{path}]",
                $context,
                path = self.path
            )
        }
        fn accept_i32(&mut self, _val: i32) -> Result<()> {
            fail!(
                "{} cannot accept Event::I32 [{path}]",
                $context,
                path = self.path
            )
        }
        fn accept_i64(&mut self, _val: i64) -> Result<()> {
            fail!(
                "{} cannot accept Event::I64 [{path}]",
                $context,
                path = self.path
            )
        }
        fn accept_u8(&mut self, _val: u8) -> Result<()> {
            fail!(
                "{} cannot accept Event::U8 [{path}]",
                $context,
                path = self.path
            )
        }
        fn accept_u16(&mut self, _val: u16) -> Result<()> {
            fail!(
                "{} cannot accept Event::U16 [{path}]",
                $context,
                path = self.path
            )
        }
        fn accept_u32(&mut self, _val: u32) -> Result<()> {
            fail!(
                "{} cannot accept Event::U32 [{path}]",
                $context,
                path = self.path
            )
        }
        fn accept_u64(&mut self, _val: u64) -> Result<()> {
            fail!(
                "{} cannot accept Event::U64 [{path}]",
                $context,
                path = self.path
            )
        }
        fn accept_f32(&mut self, _val: f32) -> Result<()> {
            fail!(
                "{} cannot accept Event::F32 [{path}]",
                $context,
                path = self.path
            )
        }
        fn accept_f64(&mut self, _val: f64) -> Result<()> {
            fail!(
                "{} cannot accept Event::F64 [{path}]",
                $context,
                path = self.path
            )
        }
    };
}
#[allow(unused)]
pub(crate) use fail_on_non_string_primitive;