alibi_core/store/contracts/
hooks.rs1use super::*;
2
3#[derive(Clone, Default)]
6pub struct UserCreationDefaults(pub(crate) Vec<UserCreateTransform>);
7impl UserCreationDefaults {
8 pub fn apply(self, data: CreateUser) -> AuthResult<CreateUser> {
9 create_data(data, &self.0)
10 }
11}
12
13#[async_trait]
17pub trait SessionCreatedHook<S: AuthSchema>: Send + Sync {
18 async fn after_create(
19 &self,
20 session: &S::Session,
21 database: &dyn AuthStore<S>,
22 ) -> AuthResult<()>;
23}
24
25pub enum AdapterEvent<S: AuthSchema> {
28 UserCreated(crate::AdapterRecord<S::User>),
29 UserUpdated(crate::AdapterRecord<S::User>),
30 SessionCreated(crate::AdapterRecord<S::Session>),
31 SessionUpdated(crate::AdapterRecord<S::Session>),
32 AccountCreated(crate::AdapterRecord<S::Account>),
33 AccountUpdated(crate::AdapterRecord<S::Account>),
34}
35
36#[async_trait]
40pub trait AdapterAfterHook<S: AuthSchema>: Send + Sync {
41 async fn after_write(
42 &self,
43 event: &AdapterEvent<S>,
44 database: &dyn AuthStore<S>,
45 ) -> AuthResult<()>;
46}
47
48use std::sync::Arc;
49
50pub(crate) type UserCreateTransform =
51 Arc<dyn Fn(CreateUser) -> AuthResult<CreateUser> + Send + Sync>;
52
53pub(in crate::store) fn create_data(
54 mut data: CreateUser,
55 transforms: &[UserCreateTransform],
56) -> AuthResult<CreateUser> {
57 for transform in transforms {
58 data = transform(data)?;
59 }
60 Ok(data)
61}