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