surrealdb/key/database/
ts.rs1use crate::key::error::KeyCategory;
3use crate::key::key_req::KeyRequirements;
4use derive::Key;
5use serde::{Deserialize, Serialize};
6
7#[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Serialize, Deserialize, Key)]
11pub struct Ts<'a> {
12 __: u8,
13 _a: u8,
14 pub ns: &'a str,
15 _b: u8,
16 pub db: &'a str,
17 _c: u8,
18 _d: u8,
19 _e: u8,
20 pub ts: u64,
21}
22
23pub fn new<'a>(ns: &'a str, db: &'a str, ts: u64) -> Ts<'a> {
24 Ts::new(ns, db, ts)
25}
26
27pub fn prefix(ns: &str, db: &str) -> Vec<u8> {
29 let mut k = crate::key::database::all::new(ns, db).encode().unwrap();
30 k.extend_from_slice(&[b'!', b't', b's']);
31 k
32}
33
34pub fn suffix(ns: &str, db: &str) -> Vec<u8> {
36 let mut k = prefix(ns, db);
37 k.extend_from_slice(&[0xff]);
38 k
39}
40
41impl KeyRequirements for Ts<'_> {
42 fn key_category(&self) -> KeyCategory {
43 KeyCategory::DatabaseTimestamp
44 }
45}
46
47impl<'a> Ts<'a> {
48 pub fn new(ns: &'a str, db: &'a str, ts: u64) -> Self {
49 Ts {
50 __: b'/',
51 _a: b'*',
52 ns,
53 _b: b'*',
54 db,
55 _c: b'!',
56 _d: b't',
57 _e: b's',
58 ts,
59 }
60 }
61}
62
63#[cfg(test)]
64mod tests {
65 #[test]
66 fn key() {
67 use super::*;
68 #[rustfmt::skip]
69 let val = Ts::new(
70 "test",
71 "test",
72 123,
73 );
74 let enc = Ts::encode(&val).unwrap();
75 let dec = Ts::decode(&enc).unwrap();
76 assert_eq!(val, dec);
77 }
78}