fusio_log/serdes/
boolean.rs1use std::mem::size_of;
2
3use fusio::{Error, SeqRead, Write};
4
5use crate::serdes::{Decode, Encode};
6
7impl Encode for bool {
8 async fn encode<W: Write>(&self, writer: &mut W) -> Result<(), Error> {
9 if *self { 1u8 } else { 0u8 }.encode(writer).await
10 }
11
12 fn size(&self) -> usize {
13 size_of::<u8>()
14 }
15}
16
17impl Decode for bool {
18 async fn decode<R: SeqRead>(reader: &mut R) -> Result<Self, Error> {
19 Ok(u8::decode(reader).await? == 1u8)
20 }
21}
22
23#[cfg(test)]
24mod tests {
25 use std::io::Cursor;
26
27 use tokio::io::AsyncSeekExt;
28
29 use crate::serdes::{Decode, Encode};
30
31 #[tokio::test]
32 async fn test_encode_decode() {
33 let source_0 = true;
34 let source_1 = false;
35 let source_2 = true;
36
37 let mut bytes = Vec::new();
38 let mut cursor = Cursor::new(&mut bytes);
39
40 source_0.encode(&mut cursor).await.unwrap();
41 source_1.encode(&mut cursor).await.unwrap();
42 source_2.encode(&mut cursor).await.unwrap();
43
44 cursor.seek(std::io::SeekFrom::Start(0)).await.unwrap();
45
46 let decoded_0 = bool::decode(&mut cursor).await.unwrap();
47 let decoded_1 = bool::decode(&mut cursor).await.unwrap();
48 let decoded_2 = bool::decode(&mut cursor).await.unwrap();
49
50 assert_eq!(source_0, decoded_0);
51 assert_eq!(source_1, decoded_1);
52 assert_eq!(source_2, decoded_2);
53 }
54}