fastsnbt 0.2.1

Serde deserializer for Minecraft's stringified NBT format
Documentation
use std::collections::HashMap;

use crate::to_string;
use serde::Serialize;
use fastnbt::{ByteArray, IntArray, LongArray};

#[test]
fn test_true() {
    let snbt = to_string(&true).unwrap();
    assert_eq!("true", snbt);
    let snbt = to_string(&false).unwrap();
    assert_eq!("false", snbt);
}

#[test]
fn test_string_escape() {
    let string = "this str \" contains \" quotes";
    let snbt = to_string(string).unwrap();
    assert_eq!("\"this str \\\" contains \\\" quotes\"", snbt);
    let string = "str \\\" with \" quotes \\ & backslashes";
    let snbt = to_string(string).unwrap();
    assert_eq!("\"str \\\\\\\" with \\\" quotes \\\\ & backslashes\"", snbt);
}

#[test]
fn test_byte() {
    let byte = 10u8;
    let snbt = to_string(&byte).unwrap();
    assert_eq!("10b", snbt);
}

#[test]
fn test_short() {
    let byte = 10u16;
    let snbt = to_string(&byte).unwrap();
    assert_eq!("10s", snbt);
}

#[test]
fn test_int() {
    let byte = -10;
    let snbt = to_string(&byte).unwrap();
    assert_eq!("-10", snbt);
}

#[test]
fn test_long() {
    let byte = 10u64;
    let snbt = to_string(&byte).unwrap();
    assert_eq!("10l", snbt);
}

#[test]
fn test_float() {
    let byte = 10.4f32;
    let snbt = to_string(&byte).unwrap();
    assert_eq!("10.4f", snbt);
}

#[test]
fn test_double() {
    let byte = 10.4f64;
    let snbt = to_string(&byte).unwrap();
    assert_eq!("10.4", snbt);
}

#[test]
fn test_char() {
    let char = '"';
    let snbt = to_string(&char).unwrap();
    assert_eq!("\"\\\"\"", snbt);
}

#[test]
fn test_struct() {
    #[derive(Serialize)]
    struct SimpleStruct<'a> {
        x: u8,
        y: &'a str,
    }

    let data = SimpleStruct { x: 10, y: "test" };
    let snbt = to_string(&data).unwrap();
    assert_eq!("{\"x\":10b,\"y\":\"test\"}", snbt);
}

#[test]
fn test_empty_map() {
    let data: HashMap<String, String> = HashMap::new();
    let snbt = to_string(&data).unwrap();
    assert_eq!("{}", snbt);
}

#[test]
fn test_normal_array() {
    #[derive(Serialize)]
    struct ByteStruct {
        bytes: Vec<u8>,
    }

    let data = ByteStruct { bytes: vec![0, 1, 2, 3] };
    let snbt = to_string(&data).unwrap();
    assert_eq!("{\"bytes\":[0b,1b,2b,3b]}", snbt);
}

#[test]
fn test_bytearray() {
    let data = ByteArray::new(vec![-1, 2, -3, 4]);
    let snbt = to_string(&data).unwrap();
    assert_eq!("[B;-1b,2b,-3b,4b]", snbt);
}

#[test]
fn test_intarray() {
    let data = IntArray::new(vec![-1, 2, -3, 4]);
    let snbt = to_string(&data).unwrap();
    assert_eq!("[I;-1,2,-3,4]", snbt);
}

#[test]
fn test_longarray() {
    let data = LongArray::new(vec![-1, 2, -3, 4]);
    let snbt = to_string(&data).unwrap();
    assert_eq!("[L;-1l,2l,-3l,4l]", snbt);
}

#[test]
fn test_struct_arrays() {
    #[derive(Serialize)]
    struct ArrayStruct {
        bytes: ByteArray,
        longs: LongArray,
    }

    let data = ArrayStruct { bytes: ByteArray::new(vec![-20,10]), longs: LongArray::new(vec![-40, 10_000]) };
    let snbt = to_string(&data).unwrap();
    assert_eq!("{\"bytes\":[B;-20b,10b],\"longs\":[L;-40l,10000l]}", snbt);
}