fastnbt 2.0.2

Serde deserializer for Minecraft's NBT format
Documentation
use std::convert::TryInto;
use std::io::Write;

use byteorder::{BigEndian, WriteBytesExt};

use crate::error::{Error, Result};
use crate::Tag;

pub(crate) trait WriteNbt: Write {
    fn write_tag(&mut self, tag: Tag) -> Result<()> {
        self.write_u8(tag as u8)?;
        Ok(())
    }

    fn write_size_prefixed_str(&mut self, key: &str) -> Result<()> {
        let key = cesu8::to_java_cesu8(key);
        let len_bytes = key.len() as u16;
        self.write_u16::<BigEndian>(len_bytes)?;
        self.write_all(&key)?;
        Ok(())
    }

    fn write_len(&mut self, len: usize) -> Result<()> {
        self.write_u32::<BigEndian>(
            len.try_into()
                .map_err(|_| Error::bespoke("len too large".to_owned()))?,
        )?;

        Ok(())
    }
}

impl<T> WriteNbt for T where T: Write {}