Skip to main content

rustorm_core/
hooks.rs

1use crate::error::OrmResult;
2use async_trait::async_trait;
3use sqlx::PgPool;
4
5/// Хуки жизненного цикла модели.
6///
7/// Реализуйте только те методы, которые нужны.
8/// Все методы по умолчанию — no-op (возвращают `Ok(())`).
9#[async_trait]
10pub trait Hooks: Sized + Send + Sync + 'static {
11    /// Перед любым сохранением (INSERT или UPDATE).
12    async fn before_save(&mut self, _pool: &PgPool) -> OrmResult<()> {
13        Ok(())
14    }
15    /// После любого сохранения.
16    async fn after_save(&self, _pool: &PgPool) -> OrmResult<()> {
17        Ok(())
18    }
19    /// Перед INSERT.
20    async fn before_create(&mut self, _pool: &PgPool) -> OrmResult<()> {
21        Ok(())
22    }
23    /// После INSERT.
24    async fn after_create(&self, _pool: &PgPool) -> OrmResult<()> {
25        Ok(())
26    }
27    /// Перед UPDATE.
28    async fn before_update(&mut self, _pool: &PgPool) -> OrmResult<()> {
29        Ok(())
30    }
31    /// После UPDATE.
32    async fn after_update(&self, _pool: &PgPool) -> OrmResult<()> {
33        Ok(())
34    }
35    /// Перед DELETE.
36    async fn before_delete(&self, _pool: &PgPool) -> OrmResult<()> {
37        Ok(())
38    }
39    /// После DELETE.
40    async fn after_delete(&self, _pool: &PgPool) -> OrmResult<()> {
41        Ok(())
42    }
43}