surrealdb_types/
notification.rs1use std::fmt::{self, Debug, Display};
2use std::str::FromStr;
3
4use serde::{Deserialize, Serialize};
5
6#[allow(unused_imports)]
7use crate as surrealdb_types;
8use crate::{SurrealValue, Uuid, Value};
9
10#[derive(
13 Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize, SurrealValue,
14)]
15#[surreal(crate = "crate")]
16#[surreal(untagged, uppercase)]
17#[serde(rename_all = "UPPERCASE")]
18pub enum Action {
19 Create,
21 Update,
23 Delete,
25 Killed,
27 Error,
34}
35
36impl Display for Action {
37 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
38 match *self {
39 Action::Create => write!(f, "CREATE"),
40 Action::Update => write!(f, "UPDATE"),
41 Action::Delete => write!(f, "DELETE"),
42 Action::Killed => write!(f, "KILLED"),
43 Action::Error => write!(f, "ERROR"),
44 }
45 }
46}
47
48impl FromStr for Action {
49 type Err = crate::Error;
50
51 fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
52 match s {
53 "CREATE" => Ok(Action::Create),
54 "UPDATE" => Ok(Action::Update),
55 "DELETE" => Ok(Action::Delete),
56 "KILLED" => Ok(Action::Killed),
57 "ERROR" => Ok(Action::Error),
58 _ => Err(crate::Error::validation(format!("Invalid action: {s}"), None)),
59 }
60 }
61}
62
63#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, SurrealValue)]
65#[surreal(crate = "crate")]
66#[non_exhaustive]
67pub struct Notification {
68 pub id: Uuid,
70 pub session: Option<Uuid>,
72 pub action: Action,
74 pub record: Value,
76 pub result: Value,
78}
79
80impl Notification {
81 pub fn new(
83 id: Uuid,
84 session: Option<Uuid>,
85 action: Action,
86 record: Value,
87 result: Value,
88 ) -> Self {
89 Self {
90 id,
91 session,
92 action,
93 record,
94 result,
95 }
96 }
97}