1#![doc = include_str!("../README.md")]
2#![feature(min_specialization)]
3#![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
15const MAX_STRING_LENGTH: u32 = 32767;
17#[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 = vec![0];
77 assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), 0);
78
79 let buf = vec![1];
82 assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), 1);
83
84 let buf = vec![2];
87 assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), 2);
88
89 let buf = vec![127];
92 assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), 127);
93
94 let buf = vec![128, 1];
97 assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), 128);
98
99 let buf = vec![255, 1];
102 assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), 255);
103
104 let buf = vec![221, 199, 1];
107 assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), 25565);
108
109 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 = 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 = vec![255, 255, 255, 255, 15];
128 assert_eq!(i32::azalea_read_var(&mut Cursor::new(&buf)).unwrap(), -1);
129
130 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}