//! A library for encoding and decoding Minecraft's [Named Binary Tag] (NBT)
//! format.
//!
//! [Named Binary Tag]: https://minecraft.fandom.com/wiki/NBT_format
//!
//! # Examples
//!
//! Encode NBT data to its binary form. We are using the [`compound!`] macro to
//! conveniently construct [`Compound`] values.
//!
//! ```rust
//! use valence_nbt::{compound, to_binary_writer, List};
//!
//! let c = compound! {
//! "byte" => 5_i8,
//! "string" => "hello",
//! "list_of_float" => List::Float(vec![
//! 3.1415,
//! 2.7182,
//! 1.4142
//! ]),
//! };
//!
//! let mut buf = Vec::new();
//!
//! to_binary_writer(&mut buf, &c, "").unwrap();
//! ```
//!
//! Decode NBT data from its binary form.
//!
//! ```rust
//! use valence_nbt::{compound, from_binary_slice};
//!
//! let some_bytes = [10, 0, 0, 3, 0, 3, 105, 110, 116, 0, 0, 222, 173, 0];
//!
//! let expected_value = compound! {
//! "int" => 0xdead
//! };
//!
//! let (nbt, root_name) = from_binary_slice(&mut some_bytes.as_slice()).unwrap();
//!
//! assert_eq!(nbt, expected_value);
//! assert_eq!(root_name, "");
//! ```
//!
//! # Features
//!
//! - `preserve_order`: Causes the order of fields in [`Compound`]s to be
//! preserved during insertion and deletion at a slight cost to performance.
//! The iterators on `Compound` can then implement [`DoubleEndedIterator`].
pub use Compound;
pub use Error;
pub use from_binary_slice;
pub use to_binary_writer;
pub use ;
type Result<T> = Result;
/// A convenience macro for constructing [`Compound`]s.
///
/// Key expressions must implement `Into<String>` while value expressions must
/// implement `Into<Value>`.
///
/// # Examples
///
/// ```
/// use valence_nbt::{compound, List};
///
/// let c = compound! {
/// "byte" => 123_i8,
/// "list_of_int" => List::Int(vec![3, -7, 5]),
/// "list_of_string" => List::String(vec![
/// "foo".to_owned(),
/// "bar".to_owned(),
/// "baz".to_owned()
/// ]),
/// "string" => "aé日",
/// "compound" => compound! {
/// "foo" => 1,
/// "bar" => 2,
/// "baz" => 3,
/// },
/// "int_array" => vec![5, -9, i32::MIN, 0, i32::MAX],
/// "byte_array" => vec![0_i8, 2, 3],
/// "long_array" => vec![123_i64, 456, 789],
/// };
///
/// println!("{c:?}");
/// ```