@@ -10,33 +10,45 @@ pub type AuditProvider =
10
10
11
11
type AuditProviders = Vec < AuditProvider > ;
12
12
13
- static PROVIDERS : OnceLock < AuditProviders > = OnceLock :: new ( ) ;
13
+ static mut PROVIDERS : OnceLock < AuditProviders > = OnceLock :: new ( ) ;
14
14
15
15
/// Initialize audit trail providers.
16
16
pub fn init_providers ( providers : AuditProviders ) {
17
- PROVIDERS . get_or_init ( || providers) ;
17
+ unsafe {
18
+ PROVIDERS . get_or_init ( || providers) ;
19
+ }
20
+ }
21
+
22
+ /// Update audit trail providers.
23
+ ///
24
+ /// # Panics
25
+ ///
26
+ /// If the audit trail providers have not already been set.
27
+ pub fn update_providers ( providers : AuditProviders ) {
28
+ unsafe {
29
+ let audit_providers = PROVIDERS . get_mut ( ) . unwrap ( ) ;
30
+ * audit_providers = providers;
31
+ }
18
32
}
19
33
20
34
/// Configured audit providers.
21
35
pub fn providers < ' a > ( ) -> Option < & ' a AuditProviders > {
22
- PROVIDERS . get ( )
36
+ unsafe { PROVIDERS . get ( ) }
23
37
}
24
38
25
39
/// Append audit events to all configured providers.
26
40
pub async fn append_audit_events ( events : & [ AuditEvent ] ) -> Result < ( ) > {
27
41
#[ cfg( not( debug_assertions) ) ]
28
42
{
29
- let providers = PROVIDERS
30
- . get ( )
31
- . ok_or_else ( || Error :: AuditProvidersNotConfigured ) ?;
43
+ let providers =
44
+ providers ( ) . ok_or_else ( || Error :: AuditProvidersNotConfigured ) ?;
32
45
for provider in providers {
33
46
provider. append_audit_events ( events) . await ?;
34
47
}
35
48
}
36
49
#[ cfg( debug_assertions) ]
37
50
{
38
- let providers = PROVIDERS . get ( ) ;
39
- if let Some ( providers) = providers {
51
+ if let Some ( providers) = providers ( ) {
40
52
for provider in providers {
41
53
provider. append_audit_events ( events) . await ?;
42
54
}
0 commit comments