ave-core 0.9.0

Averiun Ledger core runtime and node API
Documentation
use async_trait::async_trait;
use ave_actors::{
    Actor, ActorError, ActorPath, Handler, Message, NotPersistentActor,
};
use serde::{Deserialize, Serialize};
use tracing::{Span, error, info_span};

use crate::helpers::db::DatabaseError;

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DBManager;

impl NotPersistentActor for DBManager {}

#[derive(Clone, Debug)]
pub enum DBManagerMessage {
    Error(DatabaseError),
}

impl Message for DBManagerMessage {}

#[async_trait]
impl Actor for DBManager {
    type Message = DBManagerMessage;
    type Event = ();
    type Response = ();

    fn get_span(_id: &str, parent_span: Option<Span>) -> tracing::Span {
        parent_span.map_or_else(
            || info_span!("DBManager"),
            |parent_span| info_span!(parent: parent_span, "DBManager"),
        )
    }
}

#[async_trait]
impl Handler<Self> for DBManager {
    async fn handle_message(
        &mut self,
        _sender: ActorPath,
        msg: DBManagerMessage,
        ctx: &mut ave_actors::ActorContext<Self>,
    ) -> Result<(), ActorError> {
        match msg {
            DBManagerMessage::Error(error) => {
                error!(
                    msg_type = "Error",
                    error = %error,
                    "Critical database error in subscriber"
                );
                ctx.system().crash_system();
                Ok(())
            }
        }
    }
}