1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
11pub enum MemoryRecord {
12 Item {
14 id: String,
15 kind: String,
16 body: Vec<u8>,
17 },
18 Forget { target: String },
20 Feedback { target: String, weight: f32 },
22}
23
24#[cfg(all(test, feature = "cbor"))]
25mod tests {
26 use super::*;
27 use crate::framing::{decode_named, encode_named};
28
29 #[test]
30 fn given_each_variant_when_round_tripped_then_should_preserve_fields() {
31 for record in [
32 MemoryRecord::Item {
33 id: "01KWM3K3XEP3NP5TN850J17YBP".to_owned(),
34 kind: "fact".to_owned(),
35 body: b"auth is slow".to_vec(),
36 },
37 MemoryRecord::Forget {
38 target: "01KWM3K3XEP3NP5TN850J17YBP".to_owned(),
39 },
40 MemoryRecord::Feedback {
41 target: "01KWM3K3XEP3NP5TN850J17YBP".to_owned(),
42 weight: 1.5,
43 },
44 ] {
45 let bytes = encode_named(&record).expect("encodes");
46 let back: MemoryRecord = decode_named(&bytes).expect("decodes");
47 assert_eq!(back, record);
48 }
49 }
50}