42 lines
976 B
Rust
42 lines
976 B
Rust
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,
|
|
})
|
|
}
|
|
}
|