rxqlite_notification/
lib.rs

1//this avoids dependency on sqlx-sqlite-cipher in rxqlite-client amo.
2#![deny(warnings)]
3#![allow(non_camel_case_types)]
4use serde::{Serialize, Deserialize};
5
6//https://github.com/rusqlite/rusqlite/blob/b41bd805710149ebfaed577dfedb464338e2ca97/src/hooks.rs#L17
7
8pub mod ffi_3_14_0 {
9  //https://github.com/rusqlite/rusqlite/blob/master/libsqlite3-sys/bindgen-bindings/bindgen_3.14.0.rs
10  pub const SQLITE_DELETE: i32 = 9;
11  pub const SQLITE_INSERT: i32 = 18;
12  pub const SQLITE_UPDATE: i32 = 23;
13}
14use ffi_3_14_0 as ffi;
15
16/// Action Codes
17#[derive(Serialize, Deserialize, Clone, Copy, Debug, Eq, PartialEq)]
18#[repr(i32)]
19#[non_exhaustive]
20#[allow(clippy::upper_case_acronyms)]
21pub enum Action {
22    /// Unsupported / unexpected action
23    UNKNOWN = -1,
24    /// DELETE command
25    SQLITE_DELETE = ffi::SQLITE_DELETE,
26    /// INSERT command
27    SQLITE_INSERT = ffi::SQLITE_INSERT,
28    /// UPDATE command
29    SQLITE_UPDATE = ffi::SQLITE_UPDATE,
30}
31
32impl From<i32> for Action {
33    #[inline]
34    fn from(code: i32) -> Action {
35        match code {
36            ffi::SQLITE_DELETE => Action::SQLITE_DELETE,
37            ffi::SQLITE_INSERT => Action::SQLITE_INSERT,
38            ffi::SQLITE_UPDATE => Action::SQLITE_UPDATE,
39            _ => Action::UNKNOWN,
40        }
41    }
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize)]
45pub enum Notification {
46    Update {
47        action: Action,
48        database: String,
49        table: String,
50        row_id: i64,
51    },
52}
53
54impl Notification {
55  pub fn table(&self)->Option<&String> {
56    match self {
57      Self::Update {
58        table,
59        ..
60      }=>Some(table),
61      //_=>None,
62    }
63  }
64}
65