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