use futures::executor::block_on; use serde_derive::{Deserialize, Serialize}; use sqlx::pool::PoolConnection; use sqlx::Sqlite; use crate::db::DbMacro; use crate::errors::DatabaseError; use crate::models::{convert_db_list, FromDbModel, MacroAction}; #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Macro { #[serde(flatten)] pub m: DbMacro, pub actions: Vec<MacroAction>, } impl FromDbModel for Macro { type DbModel = DbMacro; type DbModelCache = (); fn from_db_model( conn: &mut PoolConnection<Sqlite>, db_model: Self::DbModel, ) -> Result<Self, DatabaseError> { Self::from_db_model_cache(conn, db_model, ()) } fn from_db_model_cache( conn: &mut PoolConnection<Sqlite>, db_model: Self::DbModel, _cache: Self::DbModelCache, ) -> Result<Self, DatabaseError> { let actions_db = block_on(db_model.get_actions(conn))?; let actions: Vec<MacroAction> = convert_db_list(conn, actions_db)?; Ok(Macro { m: db_model, actions, }) } }