macro_rules! impl_ser_real { ($f:ident, $t:ident) => { fn $f(self, v: $t) -> Result<()> { self.write_real::<$t>(v) } } } macro_rules! tag_start { ($s:expr, $opt_enabled:expr, $name:expr) => { if $opt_enabled { if $name.is_empty() { $s.tag_stack.push(false); } else { $s.write_bytes($name.as_bytes())?; $s.write_delim(syntax::TAG_START_CHAR)?; $s.tag_stack.push(true); } } } } macro_rules! tag_end { ($s:expr, $opt_enabled:expr) => { if $opt_enabled { if $s.tag_stack.pop().expect("stack tag value") { $s.write_delim(syntax::TAG_END_CHAR) } else { Ok(()) } } else { Ok(()) } } }