azalea_core/
filterable.rs1use std::io::Cursor;
2
3use azalea_buf::{AzaleaRead, AzaleaReadLimited, AzaleaReadVar, AzaleaWrite};
4
5pub struct Filterable<T> {
7 pub raw: T,
8 pub filtered: Option<T>,
9}
10
11impl<T: AzaleaWrite> azalea_buf::AzaleaWrite for Filterable<T> {
12 fn azalea_write(&self, buf: &mut impl std::io::Write) -> Result<(), std::io::Error> {
13 self.raw.azalea_write(buf)?;
14 self.filtered.azalea_write(buf)?;
15 Ok(())
16 }
17}
18impl<T: AzaleaRead> azalea_buf::AzaleaRead for Filterable<T> {
19 fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, azalea_buf::BufReadError> {
20 let raw = AzaleaRead::azalea_read(buf)?;
21 let filtered = AzaleaRead::azalea_read(buf)?;
22 Ok(Self { raw, filtered })
23 }
24}
25impl<T: AzaleaReadLimited> azalea_buf::AzaleaReadLimited for Filterable<T> {
26 fn azalea_read_limited(
27 buf: &mut Cursor<&[u8]>,
28 limit: usize,
29 ) -> Result<Self, azalea_buf::BufReadError> {
30 let raw = AzaleaReadLimited::azalea_read_limited(buf, limit)?;
31 let filtered = AzaleaReadLimited::azalea_read_limited(buf, limit)?;
32 Ok(Self { raw, filtered })
33 }
34}
35impl<T: AzaleaReadVar> azalea_buf::AzaleaReadVar for Filterable<T> {
36 fn azalea_read_var(buf: &mut Cursor<&[u8]>) -> Result<Self, azalea_buf::BufReadError> {
37 let raw = AzaleaReadVar::azalea_read_var(buf)?;
38 let filtered = AzaleaReadVar::azalea_read_var(buf)?;
39 Ok(Self { raw, filtered })
40 }
41}
42
43impl<T: Clone> Clone for Filterable<T> {
44 fn clone(&self) -> Self {
45 Self {
46 raw: self.raw.clone(),
47 filtered: self.filtered.clone(),
48 }
49 }
50}
51impl<T: PartialEq> PartialEq for Filterable<T> {
52 fn eq(&self, other: &Self) -> bool {
53 self.raw == other.raw && self.filtered == other.filtered
54 }
55}