azalea_core/
filterable.rs

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