adns_server/zone_provider/
mod.rs

1use adns_zone::{Zone, ZoneUpdate};
2use tokio::sync::{mpsc, oneshot};
3
4mod static_provider;
5pub use static_provider::StaticZoneProvider;
6
7#[cfg(feature = "file_zone")]
8mod file;
9#[cfg(feature = "file_zone")]
10pub use file::FileZoneProvider;
11#[cfg(feature = "file_zone")]
12mod dynfile;
13#[cfg(feature = "file_zone")]
14pub use dynfile::DynFileZoneProvider;
15mod merge;
16pub use merge::{MergeZoneProvider, SendUpdates};
17
18pub struct ZoneProviderUpdate {
19    pub update: ZoneUpdate,
20    // must be sent AFTER the zone is updated and sent back upstream
21    pub response: oneshot::Sender<()>,
22}
23
24#[async_trait::async_trait]
25pub trait ZoneProvider: Send + Sync + 'static {
26    async fn run(
27        &mut self,
28        sender: mpsc::Sender<Zone>,
29        updates: mpsc::Receiver<ZoneProviderUpdate>,
30    );
31}
32
33#[async_trait::async_trait]
34impl ZoneProvider for Box<dyn ZoneProvider> {
35    async fn run(
36        &mut self,
37        sender: mpsc::Sender<Zone>,
38        updates: mpsc::Receiver<ZoneProviderUpdate>,
39    ) {
40        (**self).run(sender, updates).await
41    }
42}