ave_core/external_db/
mod.rs1use async_trait::async_trait;
2use ave_actors::{
3 Actor, ActorError, ActorPath, Handler, Message, NotPersistentActor,
4};
5use serde::{Deserialize, Serialize};
6use tracing::{Span, error, info_span};
7
8use crate::helpers::db::DatabaseError;
9
10#[derive(Clone, Debug, Serialize, Deserialize)]
11pub struct DBManager;
12
13impl NotPersistentActor for DBManager {}
14
15#[derive(Clone, Debug)]
16pub enum DBManagerMessage {
17 Error(DatabaseError),
18}
19
20impl Message for DBManagerMessage {}
21
22#[async_trait]
23impl Actor for DBManager {
24 type Message = DBManagerMessage;
25 type Event = ();
26 type Response = ();
27
28 fn get_span(_id: &str, parent_span: Option<Span>) -> tracing::Span {
29 parent_span.map_or_else(
30 || info_span!("DBManager"),
31 |parent_span| info_span!(parent: parent_span, "DBManager"),
32 )
33 }
34}
35
36#[async_trait]
37impl Handler<Self> for DBManager {
38 async fn handle_message(
39 &mut self,
40 _sender: ActorPath,
41 msg: DBManagerMessage,
42 ctx: &mut ave_actors::ActorContext<Self>,
43 ) -> Result<(), ActorError> {
44 match msg {
45 DBManagerMessage::Error(error) => {
46 error!(
47 msg_type = "Error",
48 error = %error,
49 "Critical database error in subscriber"
50 );
51 ctx.system().crash_system();
52 Ok(())
53 }
54 }
55 }
56}