rustauth_core/plugin/db/
handler.rs1use std::fmt;
2use std::future::Future;
3use std::pin::Pin;
4use std::sync::Arc;
5
6use crate::db::DbAdapter;
7use crate::env::logger::Logger;
8use crate::error::RustAuthError;
9use crate::plugin::{
10 PluginDatabaseAfterInput, PluginDatabaseBeforeAction, PluginDatabaseBeforeInput,
11};
12
13use super::PluginDatabaseOperation;
14
15pub struct PluginDatabaseHookContext<'a> {
17 pub plugin_id: String,
18 pub hook_name: String,
19 pub operation: PluginDatabaseOperation,
20 pub model: String,
21 pub adapter: &'a dyn DbAdapter,
22 pub request_path: Option<String>,
23 pub logger: &'a Logger,
25}
26
27impl fmt::Debug for PluginDatabaseHookContext<'_> {
28 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
29 formatter
30 .debug_struct("PluginDatabaseHookContext")
31 .field("plugin_id", &self.plugin_id)
32 .field("hook_name", &self.hook_name)
33 .field("operation", &self.operation)
34 .field("model", &self.model)
35 .field("adapter", &self.adapter.id())
36 .field("request_path", &self.request_path)
37 .finish()
38 }
39}
40
41pub type PluginDatabaseBeforeHookFuture<'a> =
42 Pin<Box<dyn Future<Output = Result<PluginDatabaseBeforeAction, RustAuthError>> + Send + 'a>>;
43pub type PluginDatabaseAfterHookFuture<'a> =
44 Pin<Box<dyn Future<Output = Result<(), RustAuthError>> + Send + 'a>>;
45
46pub type PluginDatabaseBeforeHookHandler = Arc<
47 dyn for<'a> Fn(
48 PluginDatabaseHookContext<'a>,
49 PluginDatabaseBeforeInput,
50 ) -> PluginDatabaseBeforeHookFuture<'a>
51 + Send
52 + Sync,
53>;
54
55pub type PluginDatabaseAfterHookHandler = Arc<
56 dyn for<'a> Fn(
57 PluginDatabaseHookContext<'a>,
58 PluginDatabaseAfterInput,
59 ) -> PluginDatabaseAfterHookFuture<'a>
60 + Send
61 + Sync,
62>;