Skip to main content

azalea_buf/
lib.rs

1#![doc = include_str!("../README.md")]
2#![feature(min_specialization)]
3// this is necessary for thiserror backtraces
4#![feature(error_generic_member_access)]
5
6mod definitions;
7pub mod impls;
8mod serializable_uuid;
9
10pub use azalea_buf_macros::*;
11pub use definitions::*;
12pub use impls::*;
13pub use serializable_uuid::*;
14
15// const DEFAULT_NBT_QUOTA: u32 = 2097152;
16const MAX_STRING_LENGTH: u32 = 32767;
17// const MAX_COMPONENT_STRING_LENGTH: u32 = 262144;
18
19#[cfg(test)]
20mod tests {
21    use std::{collections::HashMap, io::Cursor};
22
23    use super::*;
24
25    #[test]
26    fn test_write_varint() {
27        let mut buf = Vec::new();
28        0.azalea_write_var(&mut buf).unwrap();
29        assert_eq!(buf, vec![0]);
30
31        let mut buf = Vec::new();
32        1.azalea_write_var(&mut buf).unwrap();
33        assert_eq!(buf, vec![1]);
34
35        let mut buf = Vec::new();
36        2.azalea_write_var(&mut buf).unwrap();
37        assert_eq!(buf, vec![2]);
38
39        let mut buf = Vec::new();
40        127.azalea_write_var(&mut buf).unwrap();
41        assert_eq!(buf, vec![127]);
42
43        let mut buf = Vec::new();
44        128.azalea_write_var(&mut buf).unwrap();
45        assert_eq!(buf, vec![128, 1]);
46
47        let mut buf = Vec::new();
48        255.azalea_write_var(&mut buf).unwrap();
49        assert_eq!(buf, vec![255, 1]);
50
51        let mut buf = Vec::new();
52        25565.azalea_write_var(&mut buf).unwrap();
53        assert_eq!(buf, vec![221, 199, 1]);
54
55        let mut buf = Vec::new();
56        2097151.azalea_write_var(&mut buf).unwrap();
57        assert_eq!(buf, vec![255, 255, 127]);
58
59        let mut buf = Vec::new();
60        2147483647.azalea_write_var(&mut buf).unwrap();
61        assert_eq!(buf, vec![255, 255, 255, 255, 7]);
62
63        let mut buf = Vec::new();
64        (-1).azalea_write_var(&mut buf).unwrap();
65        assert_eq!(buf, vec![255, 255, 255, 255, 15]);
66
67        let mut buf = Vec::new();
68        (-2147483648).azalea_write_var(&mut buf).unwrap();
69        assert_eq!(buf, vec![128, 128, 128, 128, 8]);
70    }
71
72    #[test]
73    fn test_read_varint() {
74        // let buf = &mut &vec![0][..];
75        // assert_eq!(i32::azalea_read_var(buf).unwrap(), 0);
76        let buf = vec![0];
77        assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), 0);
78
79        // let buf = &mut &vec![1][..];
80        // assert_eq!(i32::azalea_read_var(buf).unwrap(), 1);
81        let buf = vec![1];
82        assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), 1);
83
84        // let buf = &mut &vec![2][..];
85        // assert_eq!(i32::azalea_read_var(buf).unwrap(), 2);
86        let buf = vec![2];
87        assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), 2);
88
89        // let buf = &mut &vec![127][..];
90        // assert_eq!(i32::azalea_read_var(buf).unwrap(), 127);
91        let buf = vec![127];
92        assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), 127);
93
94        // let buf = &mut &vec![128, 1][..];
95        // assert_eq!(i32::azalea_read_var(buf).unwrap(), 128);
96        let buf = vec![128, 1];
97        assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), 128);
98
99        // let buf = &mut &vec![255, 1][..];
100        // assert_eq!(i32::azalea_read_var(buf).unwrap(), 255);
101        let buf = vec![255, 1];
102        assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), 255);
103
104        // let buf = &mut &vec![221, 199, 1][..];
105        // assert_eq!(i32::azalea_read_var(buf).unwrap(), 25565);
106        let buf = vec![221, 199, 1];
107        assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), 25565);
108
109        // let buf = &mut &vec![255, 255, 127][..];
110        // assert_eq!(i32::azalea_read_var(buf).unwrap(), 2097151);
111        let buf = vec![255, 255, 127];
112        assert_eq!(
113            i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(),
114            2097151
115        );
116
117        // let buf = &mut &vec![255, 255, 255, 255, 7][..];
118        // assert_eq!(i32::azalea_read_var(buf).unwrap(), 2147483647);
119        let buf = vec![255, 255, 255, 255, 7];
120        assert_eq!(
121            i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(),
122            2147483647
123        );
124
125        // let buf = &mut &vec![255, 255, 255, 255, 15][..];
126        // assert_eq!(i32::azalea_read_var(buf).unwrap(), -1);
127        let buf = vec![255, 255, 255, 255, 15];
128        assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), -1);
129
130        // let buf = &mut &vec![128, 128, 128, 128, 8][..];
131        // assert_eq!(i32::azalea_read_var(buf).unwrap(), -2147483648);
132        let buf = vec![128, 128, 128, 128, 8];
133        assert_eq!(
134            i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(),
135            -2147483648
136        );
137    }
138
139    #[test]
140    fn test_read_varint_longer() {
141        let buf = vec![138, 56, 0, 135, 56, 123];
142        assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), 7178);
143    }
144
145    #[test]
146    fn test_write_varlong() {
147        let mut buf = Vec::new();
148        0u64.azalea_write_var(&mut buf).unwrap();
149        assert_eq!(buf, vec![0]);
150
151        let mut buf = Vec::new();
152        1u64.azalea_write_var(&mut buf).unwrap();
153        assert_eq!(buf, vec![1]);
154
155        let mut buf = Vec::new();
156        9223372036854775807u64.azalea_write_var(&mut buf).unwrap();
157        assert_eq!(buf, vec![255, 255, 255, 255, 255, 255, 255, 255, 127]);
158    }
159
160    #[test]
161    fn test_list() {
162        let original_vec = vec!["a".to_owned(), "bc".to_owned(), "def".to_owned()];
163
164        let mut buf = Vec::new();
165        original_vec.azalea_write(&mut buf).unwrap();
166
167        dbg!(&buf);
168
169        let result = Vec::<String>::azalea_read(&mut Cursor::new(&buf)).unwrap();
170        assert_eq!(result, original_vec);
171    }
172
173    #[test]
174    fn test_int_id_list() {
175        let mut buf = Vec::new();
176        vec![1, 2, 3].azalea_write_var(&mut buf).unwrap();
177
178        let result = Vec::<i32>::azalea_read_var(&mut Cursor::new(&buf)).unwrap();
179        assert_eq!(result, vec![1, 2, 3]);
180    }
181
182    #[test]
183    fn test_map() {
184        let original_map = HashMap::from([
185            ("a".to_owned(), 1),
186            ("bc".to_owned(), 23),
187            ("def".to_owned(), 456),
188        ]);
189        let mut buf = Vec::new();
190        original_map.azalea_write_var(&mut buf).unwrap();
191
192        let result = HashMap::<String, i32>::azalea_read_var(&mut Cursor::new(&buf)).unwrap();
193
194        assert_eq!(result, original_map);
195    }
196
197    #[test]
198    fn test_long() {
199        let mut buf: Vec<u8> = Vec::new();
200        123456u64.azalea_write(&mut buf).unwrap();
201
202        assert_eq!(u64::azalea_read(&mut Cursor::new(&buf)).unwrap(), 123456);
203    }
204}