adns_server/zone_provider/
mod.rs1use 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 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}