Skip to main content

ave_core/external_db/
mod.rs

1use 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}