serde_nbt 0.1.1

A Serde library for Minecraft's Named Binary Tag (NBT) format.
Documentation
use std::io::Write;

use byteorder::WriteBytesExt;
use serde::{ser, Serialize};

use crate::binary::ser::payload::PayloadSerializer;
use crate::{Error, Tag};

pub struct SerializeStruct<'w, W: ?Sized> {
    pub(super) writer: &'w mut W,
}

impl<W: Write + ?Sized> ser::SerializeStruct for SerializeStruct<'_, W> {
    type Ok = ();
    type Error = Error;

    fn serialize_field<T: ?Sized>(
        &mut self,
        key: &'static str,
        value: &T,
    ) -> Result<(), Self::Error>
    where
        T: Serialize,
    {
        value
            .serialize(&mut PayloadSerializer::named(self.writer, key))
            .map_err(|e| e.field(key))
    }

    fn end(self) -> Result<Self::Ok, Self::Error> {
        Ok(self.writer.write_u8(Tag::End as u8)?)
    }
}