use actix::{Actor, Context, Handler, Message}; use emgauwa_lib::errors::EmgauwaError; use emgauwa_lib::models::Controller; use futures::executor::block_on; use sqlx::{Pool, Sqlite}; #[derive(Message)] #[rtype(result = "Result<(), EmgauwaError>")] pub struct Reload {} #[derive(Message)] #[rtype(result = "Controller")] pub struct GetThis {} pub struct AppState { pub pool: Pool, pub this: Controller, } impl AppState { pub fn new(pool: Pool, this: Controller) -> AppState { AppState { pool, this } } } impl Actor for AppState { type Context = Context; } impl Handler for AppState { type Result = Result<(), EmgauwaError>; fn handle(&mut self, _msg: Reload, _ctx: &mut Self::Context) -> Self::Result { let mut pool_conn = block_on(self.pool.acquire())?; self.this.reload(&mut pool_conn)?; Ok(()) } } impl Handler for AppState { type Result = Controller; fn handle(&mut self, _msg: GetThis, _ctx: &mut Self::Context) -> Self::Result { self.this.clone() } }