bus.rs 689 Bytes
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

use super::handle::AuditRecord;
use std::sync::{Arc, OnceLock};
use tokio::sync::broadcast;

static BUS: OnceLock<broadcast::Sender<Arc<AuditRecord>>> = OnceLock::new();

pub fn init(capacity: usize) {
    let (tx, _rx) = broadcast::channel::<Arc<AuditRecord>>(capacity);
    let _ = BUS.set(tx);
}

pub fn subscribe() -> broadcast::Receiver<Arc<AuditRecord>> {
    BUS.get().expect("audit bus not initialized").subscribe()
}

pub fn publish(rec: AuditRecord) {
    if let Some(tx) = BUS.get() {
        let _ = tx.send(Arc::new(rec));
    }
}