baildon/
command.rs

1//! Command Functions
2//!
3//! Used in the WAL (Write Ahead Log)
4
5use anyhow::Result;
6use bincode::Options;
7use serde::{Deserialize, Serialize};
8
9use crate::btree::baildon::BaildonKey;
10use crate::btree::baildon::BaildonValue;
11use crate::BINCODER;
12
13#[derive(Debug, PartialEq, Serialize, Deserialize)]
14pub(crate) enum Command<K, V> {
15    Upsert(K, V),
16    Delete(K),
17}
18
19impl<K, V> Command<K, V>
20where
21    K: BaildonKey,
22    V: BaildonValue,
23{
24    pub(crate) fn serialize(&self) -> Result<Vec<u8>> {
25        let s_cmd = BINCODER.serialize(&self)?;
26        Ok(s_cmd)
27    }
28
29    pub(crate) fn deserialize(buf: &[u8]) -> Result<Self> {
30        BINCODER.deserialize(buf).map_err(|e| e.into())
31    }
32}
33
34#[cfg(test)]
35mod tests {
36    use super::*;
37
38    #[test]
39    fn it_serializes_upsert_command() {
40        let upsert = Command::Upsert("this".to_string(), "that".to_string());
41        let s_upsert = upsert.serialize().expect("serializes");
42        let new_upsert = Command::deserialize(&s_upsert).expect("deserializes");
43        assert_eq!(upsert, new_upsert);
44    }
45
46    #[test]
47    fn it_serializes_delete_command() {
48        let delete_: Command<String, usize> = Command::Delete("this".to_string());
49        let s_delete = delete_.serialize().expect("serializes");
50        let new_delete = Command::deserialize(&s_delete).expect("deserializes");
51        assert_eq!(delete_, new_delete);
52    }
53}