1#[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
13use crate::providers::oraclecloud::{OracleCloudConfig, OracleCloudProvider};
14#[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
15use crate::providers::ovh::{OvhEndpoint, OvhProvider};
16
17#[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
18use crate::providers::transip::TransipProvider;
19
20#[cfg(feature = "test_provider")]
21use crate::providers::{in_memory::InMemoryProvider, pebble::PebbleProvider};
22
23#[cfg(feature = "test_provider")]
24use crate::NamedDnsRecord;
25
26#[cfg(feature = "test_provider")]
27use std::sync::{Arc, Mutex};
28
29use crate::{
30 DnsRecord, DnsRecordType, DnsUpdater, IntoFqdn, TsigAlgorithm,
31 providers::{
32 alidns::AlidnsProvider,
33 arvancloud::ArvanCloudProvider,
34 autodns::AutodnsProvider,
35 azuredns::{AzureDnsConfig, AzureDnsProvider},
36 baiducloud::BaiduCloudProvider,
37 bluecatv2::{BluecatV2Config, BluecatV2Provider},
38 bunny::BunnyProvider,
39 cloudflare::CloudflareProvider,
40 cloudns::ClouDnsProvider,
41 constellix::ConstellixProvider,
42 cpanel::CpanelProvider,
43 ddnss::DdnssProvider,
44 desec::DesecProvider,
45 digitalocean::DigitalOceanProvider,
46 dnsimple::DNSimpleProvider,
47 dnsmadeeasy::DnsMadeEasyProvider,
48 domeneshop::DomeneshopProvider,
49 dreamhost::DreamhostProvider,
50 duckdns::DuckDnsProvider,
51 dynu::DynuProvider,
52 easydns::EasyDnsProvider,
53 edgedns::{EdgeDnsConfig, EdgeDnsProvider},
54 exoscale::ExoscaleProvider,
55 freemyip::FreeMyIpProvider,
56 gandiv5::GandiV5Provider,
57 gcore::GcoreProvider,
58 glesys::GlesysProvider,
59 godaddy::GodaddyProvider,
60 hetzner::HetznerProvider,
61 hostingde::HostingDeProvider,
62 hostinger::HostingerProvider,
63 huaweicloud::HuaweiCloudProvider,
64 hurricane::HurricaneProvider,
65 ibmcloud::IbmCloudProvider,
66 infoblox::{InfobloxConfig, InfobloxProvider},
67 infomaniak::InfomaniakProvider,
68 inwx::InwxProvider,
69 ionos::IonosProvider,
70 ipv64::Ipv64Provider,
71 joker::{JokerAuth, JokerProvider},
72 lightsail::{LightsailConfig, LightsailProvider},
73 linode::LinodeProvider,
74 luadns::LuaDnsProvider,
75 mythicbeasts::MythicBeastsProvider,
76 namecheap::NamecheapProvider,
77 namedotcom::NameDotComProvider,
78 namesilo::NameSiloProvider,
79 netcup::NetcupProvider,
80 netlify::NetlifyProvider,
81 nifcloud::NifcloudProvider,
82 ns1::Ns1Provider,
83 plesk::PleskProvider,
84 porkbun::PorkBunProvider,
85 rfc2136::{DnsAddress, Rfc2136Provider},
86 route53::Route53Provider,
87 safedns::SafeDnsProvider,
88 scaleway::ScalewayProvider,
89 spaceship::SpaceshipProvider,
90 tencentcloud::TencentCloudProvider,
91 ultradns::UltraDnsProvider,
92 vercel::VercelProvider,
93 vultr::VultrProvider,
94 websupport::WebSupportProvider,
95 },
96};
97use std::collections::HashMap;
98use std::time::Duration;
99
100impl DnsUpdater {
101 pub fn new_rfc2136_tsig(
103 addr: impl TryInto<DnsAddress>,
104 key_name: impl AsRef<str>,
105 key: impl Into<Vec<u8>>,
106 algorithm: TsigAlgorithm,
107 ) -> crate::Result<Self> {
108 Ok(DnsUpdater::Rfc2136(Rfc2136Provider::new_tsig(
109 addr,
110 key_name,
111 key,
112 algorithm.into(),
113 )?))
114 }
115
116 pub fn new_cloudflare(
118 secret: impl AsRef<str>,
119 timeout: Option<Duration>,
120 ) -> crate::Result<Self> {
121 Ok(DnsUpdater::Cloudflare(CloudflareProvider::new(
122 secret, timeout,
123 )?))
124 }
125
126 pub fn new_digitalocean(
128 auth_token: impl AsRef<str>,
129 timeout: Option<Duration>,
130 ) -> crate::Result<Self> {
131 Ok(DnsUpdater::DigitalOcean(DigitalOceanProvider::new(
132 auth_token, timeout,
133 )))
134 }
135
136 pub fn new_desec(
138 auth_token: impl AsRef<str>,
139 timeout: Option<Duration>,
140 ) -> crate::Result<Self> {
141 Ok(DnsUpdater::Desec(DesecProvider::new(auth_token, timeout)))
142 }
143
144 pub fn new_constellix(
146 api_key: impl AsRef<str>,
147 secret_key: impl AsRef<str>,
148 timeout: Option<Duration>,
149 ) -> crate::Result<Self> {
150 Ok(DnsUpdater::Constellix(ConstellixProvider::new(
151 api_key, secret_key, timeout,
152 )?))
153 }
154
155 pub fn new_dnsmadeeasy(
157 api_key: impl AsRef<str>,
158 api_secret: impl AsRef<str>,
159 timeout: Option<Duration>,
160 ) -> crate::Result<Self> {
161 Ok(DnsUpdater::DnsMadeEasy(DnsMadeEasyProvider::new(
162 api_key, api_secret, timeout,
163 )?))
164 }
165
166 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
168 pub fn new_ovh(
169 application_key: impl AsRef<str>,
170 application_secret: impl AsRef<str>,
171 consumer_key: impl AsRef<str>,
172 endpoint: OvhEndpoint,
173 timeout: Option<Duration>,
174 ) -> crate::Result<Self> {
175 Ok(DnsUpdater::Ovh(OvhProvider::new(
176 application_key,
177 application_secret,
178 consumer_key,
179 endpoint,
180 timeout,
181 )?))
182 }
183
184 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
186 pub fn new_oraclecloud(config: OracleCloudConfig) -> crate::Result<Self> {
187 Ok(DnsUpdater::OracleCloud(OracleCloudProvider::new(config)?))
188 }
189
190 pub fn new_bunny(api_key: impl AsRef<str>, timeout: Option<Duration>) -> crate::Result<Self> {
192 Ok(DnsUpdater::Bunny(BunnyProvider::new(api_key, timeout)?))
193 }
194
195 pub fn new_linode(
197 auth_token: impl AsRef<str>,
198 timeout: Option<Duration>,
199 ) -> crate::Result<Self> {
200 Ok(DnsUpdater::Linode(LinodeProvider::new(auth_token, timeout)))
201 }
202
203 pub fn new_porkbun(
205 api_key: impl AsRef<str>,
206 secret_api_key: impl AsRef<str>,
207 timeout: Option<Duration>,
208 ) -> crate::Result<Self> {
209 Ok(DnsUpdater::Porkbun(PorkBunProvider::new(
210 api_key,
211 secret_api_key,
212 timeout,
213 )))
214 }
215
216 pub fn new_exoscale(
218 api_key: impl AsRef<str>,
219 api_secret: impl AsRef<str>,
220 timeout: Option<Duration>,
221 ) -> crate::Result<Self> {
222 Ok(DnsUpdater::Exoscale(ExoscaleProvider::new(
223 api_key, api_secret, timeout,
224 )?))
225 }
226
227 pub fn new_nifcloud(
229 access_key: impl AsRef<str>,
230 secret_key: impl AsRef<str>,
231 timeout: Option<Duration>,
232 ) -> crate::Result<Self> {
233 Ok(DnsUpdater::Nifcloud(NifcloudProvider::new(
234 access_key, secret_key, timeout,
235 )?))
236 }
237
238 pub fn new_websupport(
240 api_key: impl AsRef<str>,
241 secret: impl AsRef<str>,
242 timeout: Option<Duration>,
243 ) -> crate::Result<Self> {
244 Ok(DnsUpdater::WebSupport(WebSupportProvider::new(
245 api_key, secret, timeout,
246 )?))
247 }
248
249 pub fn new_spaceship(
251 api_key: impl AsRef<str>,
252 api_secret: impl AsRef<str>,
253 timeout: Option<Duration>,
254 ) -> crate::Result<Self> {
255 Ok(DnsUpdater::Spaceship(SpaceshipProvider::new(
256 api_key, api_secret, timeout,
257 )))
258 }
259
260 pub fn new_dnsimple(
262 auth_token: impl AsRef<str>,
263 account_id: impl AsRef<str>,
264 timeout: Option<Duration>,
265 ) -> crate::Result<Self> {
266 Ok(DnsUpdater::DNSimple(DNSimpleProvider::new(
267 auth_token, account_id, timeout,
268 )))
269 }
270
271 pub fn new_gandiv5(
273 personal_access_token: impl AsRef<str>,
274 timeout: Option<Duration>,
275 ) -> crate::Result<Self> {
276 Ok(DnsUpdater::GandiV5(GandiV5Provider::new(
277 personal_access_token,
278 timeout,
279 )?))
280 }
281
282 pub fn new_godaddy(
284 api_key: impl AsRef<str>,
285 api_secret: impl AsRef<str>,
286 timeout: Option<Duration>,
287 ) -> crate::Result<Self> {
288 Ok(DnsUpdater::Godaddy(GodaddyProvider::new(
289 api_key, api_secret, timeout,
290 )?))
291 }
292
293 pub fn new_hetzner(
295 api_token: impl AsRef<str>,
296 timeout: Option<Duration>,
297 ) -> crate::Result<Self> {
298 Ok(DnsUpdater::Hetzner(HetznerProvider::new(
299 api_token, timeout,
300 )?))
301 }
302
303 pub fn new_namedotcom(
305 username: impl AsRef<str>,
306 api_token: impl AsRef<str>,
307 timeout: Option<Duration>,
308 ) -> crate::Result<Self> {
309 Ok(DnsUpdater::NameDotCom(NameDotComProvider::new(
310 username, api_token, timeout,
311 )?))
312 }
313
314 pub fn new_namesilo(
316 api_key: impl AsRef<str>,
317 timeout: Option<Duration>,
318 ) -> crate::Result<Self> {
319 Ok(DnsUpdater::NameSilo(NameSiloProvider::new(
320 api_key, timeout,
321 )?))
322 }
323
324 pub fn new_duckdns(token: impl AsRef<str>, timeout: Option<Duration>) -> crate::Result<Self> {
326 Ok(DnsUpdater::DuckDns(DuckDnsProvider::new(token, timeout)?))
327 }
328
329 pub fn new_freemyip(token: impl AsRef<str>, timeout: Option<Duration>) -> crate::Result<Self> {
331 Ok(DnsUpdater::FreeMyIp(FreeMyIpProvider::new(token, timeout)?))
332 }
333
334 pub fn new_ipv64(api_key: impl AsRef<str>, timeout: Option<Duration>) -> crate::Result<Self> {
336 Ok(DnsUpdater::Ipv64(Ipv64Provider::new(api_key, timeout)?))
337 }
338
339 pub fn new_ddnss(key: impl AsRef<str>, timeout: Option<Duration>) -> crate::Result<Self> {
341 Ok(DnsUpdater::Ddnss(DdnssProvider::new(key, timeout)?))
342 }
343
344 pub fn new_dynu(api_key: impl AsRef<str>, timeout: Option<Duration>) -> crate::Result<Self> {
346 Ok(DnsUpdater::Dynu(DynuProvider::new(api_key, timeout)?))
347 }
348
349 pub fn new_google_cloud_dns(
351 config: crate::providers::google_cloud_dns::GoogleCloudDnsConfig,
352 ) -> crate::Result<Self> {
353 Ok(DnsUpdater::GoogleCloudDns(
354 crate::providers::google_cloud_dns::GoogleCloudDnsProvider::new(config)?,
355 ))
356 }
357
358 pub fn new_route53(config: crate::providers::route53::Route53Config) -> crate::Result<Self> {
360 Ok(DnsUpdater::Route53(Route53Provider::new(config)))
361 }
362
363 pub fn new_vultr(api_key: impl AsRef<str>, timeout: Option<Duration>) -> crate::Result<Self> {
365 Ok(DnsUpdater::Vultr(VultrProvider::new(api_key, timeout)))
366 }
367
368 pub fn new_scaleway(
370 api_token: impl AsRef<str>,
371 timeout: Option<Duration>,
372 ) -> crate::Result<Self> {
373 Ok(DnsUpdater::Scaleway(ScalewayProvider::new(
374 api_token, timeout,
375 )))
376 }
377
378 pub fn new_gcore(api_token: impl AsRef<str>, timeout: Option<Duration>) -> crate::Result<Self> {
380 Ok(DnsUpdater::Gcore(GcoreProvider::new(api_token, timeout)))
381 }
382
383 pub fn new_vercel(
385 auth_token: impl AsRef<str>,
386 team_id: Option<impl AsRef<str>>,
387 timeout: Option<Duration>,
388 ) -> crate::Result<Self> {
389 Ok(DnsUpdater::Vercel(VercelProvider::new(
390 auth_token, team_id, timeout,
391 )))
392 }
393
394 pub fn new_ionos(api_key: impl AsRef<str>, timeout: Option<Duration>) -> crate::Result<Self> {
396 Ok(DnsUpdater::Ionos(IonosProvider::new(api_key, timeout)))
397 }
398
399 pub fn new_hostingde(
401 api_key: impl AsRef<str>,
402 timeout: Option<Duration>,
403 ) -> crate::Result<Self> {
404 Ok(DnsUpdater::HostingDe(HostingDeProvider::new(
405 api_key, timeout,
406 )))
407 }
408
409 pub fn new_domeneshop(
411 api_token: impl AsRef<str>,
412 api_secret: impl AsRef<str>,
413 timeout: Option<Duration>,
414 ) -> crate::Result<Self> {
415 Ok(DnsUpdater::Domeneshop(DomeneshopProvider::new(
416 api_token, api_secret, timeout,
417 )))
418 }
419
420 pub fn new_safedns(
422 auth_token: impl AsRef<str>,
423 timeout: Option<Duration>,
424 ) -> crate::Result<Self> {
425 Ok(DnsUpdater::Safedns(SafeDnsProvider::new(
426 auth_token, timeout,
427 )))
428 }
429
430 pub fn new_arvancloud(
432 api_key: impl AsRef<str>,
433 timeout: Option<Duration>,
434 ) -> crate::Result<Self> {
435 Ok(DnsUpdater::ArvanCloud(ArvanCloudProvider::new(
436 api_key, timeout,
437 )))
438 }
439
440 pub fn new_infomaniak(
442 access_token: impl AsRef<str>,
443 timeout: Option<Duration>,
444 ) -> crate::Result<Self> {
445 Ok(DnsUpdater::Infomaniak(InfomaniakProvider::new(
446 access_token,
447 timeout,
448 )))
449 }
450
451 pub fn new_ns1(api_key: impl AsRef<str>, timeout: Option<Duration>) -> crate::Result<Self> {
453 Ok(DnsUpdater::Ns1(Ns1Provider::new(api_key, timeout)))
454 }
455
456 pub fn new_luadns(
458 api_username: impl AsRef<str>,
459 api_token: impl AsRef<str>,
460 timeout: Option<Duration>,
461 ) -> crate::Result<Self> {
462 Ok(DnsUpdater::LuaDns(LuaDnsProvider::new(
463 api_username,
464 api_token,
465 timeout,
466 )))
467 }
468
469 pub fn new_netcup(
471 customer_number: impl AsRef<str>,
472 api_key: impl AsRef<str>,
473 api_password: impl AsRef<str>,
474 timeout: Option<Duration>,
475 ) -> crate::Result<Self> {
476 Ok(DnsUpdater::Netcup(NetcupProvider::new(
477 customer_number,
478 api_key,
479 api_password,
480 timeout,
481 )))
482 }
483
484 pub fn new_netlify(
486 access_token: impl AsRef<str>,
487 timeout: Option<Duration>,
488 ) -> crate::Result<Self> {
489 Ok(DnsUpdater::Netlify(NetlifyProvider::new(
490 access_token,
491 timeout,
492 )))
493 }
494
495 pub fn new_inwx(
497 username: impl Into<String>,
498 password: impl Into<String>,
499 shared_secret: Option<String>,
500 sandbox: bool,
501 timeout: Option<Duration>,
502 ) -> crate::Result<Self> {
503 Ok(DnsUpdater::Inwx(InwxProvider::new(
504 username,
505 password,
506 shared_secret,
507 sandbox,
508 timeout,
509 )?))
510 }
511
512 pub fn new_alidns(
514 access_key: impl AsRef<str>,
515 secret_key: impl AsRef<str>,
516 region: Option<impl AsRef<str>>,
517 security_token: Option<impl AsRef<str>>,
518 line: Option<impl AsRef<str>>,
519 timeout: Option<Duration>,
520 ) -> crate::Result<Self> {
521 Ok(DnsUpdater::Alidns(AlidnsProvider::new(
522 access_key,
523 secret_key,
524 region,
525 security_token,
526 line,
527 timeout,
528 )?))
529 }
530
531 pub fn new_huaweicloud(
533 access_key: impl AsRef<str>,
534 secret_key: impl AsRef<str>,
535 region: impl AsRef<str>,
536 timeout: Option<Duration>,
537 ) -> crate::Result<Self> {
538 Ok(DnsUpdater::HuaweiCloud(HuaweiCloudProvider::new(
539 access_key.as_ref(),
540 secret_key.as_ref(),
541 region.as_ref(),
542 timeout,
543 )?))
544 }
545
546 pub fn new_cloudns(
548 auth_id: Option<impl AsRef<str>>,
549 sub_auth_id: Option<impl AsRef<str>>,
550 auth_password: impl AsRef<str>,
551 timeout: Option<Duration>,
552 ) -> crate::Result<Self> {
553 Ok(DnsUpdater::ClouDns(ClouDnsProvider::new(
554 auth_id,
555 sub_auth_id,
556 auth_password,
557 timeout,
558 )?))
559 }
560
561 pub fn new_tencentcloud(
563 secret_id: impl AsRef<str>,
564 secret_key: impl AsRef<str>,
565 region: Option<impl AsRef<str>>,
566 session_token: Option<impl AsRef<str>>,
567 timeout: Option<Duration>,
568 ) -> crate::Result<Self> {
569 Ok(DnsUpdater::TencentCloud(TencentCloudProvider::new(
570 secret_id,
571 secret_key,
572 region,
573 session_token,
574 timeout,
575 )?))
576 }
577
578 pub fn new_baiducloud(
580 access_key: impl AsRef<str>,
581 secret_key: impl AsRef<str>,
582 timeout: Option<Duration>,
583 ) -> crate::Result<Self> {
584 Ok(DnsUpdater::BaiduCloud(BaiduCloudProvider::new(
585 access_key.as_ref(),
586 secret_key.as_ref(),
587 timeout,
588 )?))
589 }
590
591 pub fn new_easydns(
593 token: impl AsRef<str>,
594 key: impl AsRef<str>,
595 timeout: Option<Duration>,
596 ) -> crate::Result<Self> {
597 Ok(DnsUpdater::EasyDns(EasyDnsProvider::new(
598 token, key, timeout,
599 )?))
600 }
601
602 pub fn new_joker(auth: JokerAuth, timeout: Option<Duration>) -> crate::Result<Self> {
604 Ok(DnsUpdater::Joker(JokerProvider::new(auth, timeout)?))
605 }
606
607 pub fn new_mythicbeasts(
609 username: impl AsRef<str>,
610 password: impl AsRef<str>,
611 timeout: Option<Duration>,
612 ) -> crate::Result<Self> {
613 Ok(DnsUpdater::MythicBeasts(MythicBeastsProvider::new(
614 username, password, timeout,
615 )?))
616 }
617
618 pub fn new_namecheap(
620 api_user: impl AsRef<str>,
621 api_key: impl AsRef<str>,
622 client_ip: impl AsRef<str>,
623 username: Option<impl AsRef<str>>,
624 timeout: Option<Duration>,
625 ) -> crate::Result<Self> {
626 Ok(DnsUpdater::Namecheap(NamecheapProvider::new(
627 api_user, api_key, client_ip, username, timeout,
628 )?))
629 }
630
631 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
633 pub fn new_transip(
634 login: impl AsRef<str>,
635 private_key_pem: impl AsRef<str>,
636 timeout: Option<Duration>,
637 ) -> crate::Result<Self> {
638 Ok(DnsUpdater::Transip(TransipProvider::new(
639 login,
640 private_key_pem,
641 timeout,
642 )?))
643 }
644
645 pub fn new_bluecatv2(config: BluecatV2Config) -> crate::Result<Self> {
647 Ok(DnsUpdater::BluecatV2(BluecatV2Provider::new(config)?))
648 }
649
650 pub fn new_glesys(
652 api_user: impl AsRef<str>,
653 api_key: impl AsRef<str>,
654 timeout: Option<Duration>,
655 ) -> crate::Result<Self> {
656 Ok(DnsUpdater::Glesys(GlesysProvider::new(
657 api_user, api_key, timeout,
658 )))
659 }
660
661 pub fn new_dreamhost(
663 api_key: impl AsRef<str>,
664 timeout: Option<Duration>,
665 ) -> crate::Result<Self> {
666 Ok(DnsUpdater::Dreamhost(DreamhostProvider::new(
667 api_key, timeout,
668 )))
669 }
670
671 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
673 pub fn new_volcengine(
674 config: crate::providers::volcengine::VolcengineConfig,
675 ) -> crate::Result<Self> {
676 Ok(DnsUpdater::Volcengine(
677 crate::providers::volcengine::VolcengineProvider::new(config)?,
678 ))
679 }
680
681 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
683 pub fn new_yandexcloud(
684 config: crate::providers::yandexcloud::YandexCloudConfig,
685 ) -> crate::Result<Self> {
686 Ok(DnsUpdater::YandexCloud(
687 crate::providers::yandexcloud::YandexCloudProvider::new(config)?,
688 ))
689 }
690
691 pub fn new_azuredns(config: AzureDnsConfig) -> crate::Result<Self> {
693 Ok(DnsUpdater::AzureDns(AzureDnsProvider::new(config)?))
694 }
695
696 pub fn new_ibmcloud(
698 username: impl AsRef<str>,
699 api_key: impl AsRef<str>,
700 timeout: Option<Duration>,
701 ) -> crate::Result<Self> {
702 Ok(DnsUpdater::IbmCloud(IbmCloudProvider::new(
703 username, api_key, timeout,
704 )?))
705 }
706
707 pub fn new_hurricane(
709 credentials: HashMap<String, String>,
710 timeout: Option<Duration>,
711 ) -> crate::Result<Self> {
712 Ok(DnsUpdater::Hurricane(HurricaneProvider::new(
713 credentials,
714 timeout,
715 )?))
716 }
717
718 pub fn new_hostinger(
720 api_token: impl AsRef<str>,
721 timeout: Option<Duration>,
722 ) -> crate::Result<Self> {
723 Ok(DnsUpdater::Hostinger(HostingerProvider::new(
724 api_token, timeout,
725 )?))
726 }
727
728 pub fn new_autodns(
730 username: impl AsRef<str>,
731 password: impl AsRef<str>,
732 context: Option<u32>,
733 timeout: Option<Duration>,
734 ) -> crate::Result<Self> {
735 Ok(DnsUpdater::Autodns(AutodnsProvider::new(
736 username, password, context, timeout,
737 )?))
738 }
739
740 pub fn new_plesk(
742 base_url: impl AsRef<str>,
743 api_key: impl AsRef<str>,
744 timeout: Option<Duration>,
745 ) -> crate::Result<Self> {
746 Ok(DnsUpdater::Plesk(PleskProvider::new(
747 base_url, api_key, timeout,
748 )))
749 }
750
751 pub fn new_cpanel(
753 base_url: impl AsRef<str>,
754 username: impl AsRef<str>,
755 token: impl AsRef<str>,
756 timeout: Option<Duration>,
757 ) -> crate::Result<Self> {
758 Ok(DnsUpdater::Cpanel(CpanelProvider::new(
759 base_url, username, token, timeout,
760 )))
761 }
762
763 pub fn new_lightsail(config: LightsailConfig) -> crate::Result<Self> {
765 Ok(DnsUpdater::Lightsail(LightsailProvider::new(config)?))
766 }
767
768 pub fn new_edgedns(config: EdgeDnsConfig) -> crate::Result<Self> {
770 Ok(DnsUpdater::EdgeDns(EdgeDnsProvider::new(config)?))
771 }
772
773 pub fn new_ultradns(
775 username: impl Into<String>,
776 password: impl Into<String>,
777 endpoint: Option<String>,
778 timeout: Option<Duration>,
779 ) -> crate::Result<Self> {
780 Ok(DnsUpdater::UltraDns(UltraDnsProvider::new(
781 username, password, endpoint, timeout,
782 )?))
783 }
784
785 pub fn new_infoblox(config: InfobloxConfig) -> crate::Result<Self> {
787 Ok(DnsUpdater::Infoblox(InfobloxProvider::new(config)?))
788 }
789
790 #[cfg(feature = "test_provider")]
792 pub fn new_pebble(base_url: impl AsRef<str>, timeout: Option<Duration>) -> Self {
793 DnsUpdater::Pebble(PebbleProvider::new(base_url, timeout))
794 }
795
796 #[cfg(feature = "test_provider")]
798 pub fn new_in_memory(records: Arc<Mutex<Vec<NamedDnsRecord>>>) -> Self {
799 DnsUpdater::InMemory(InMemoryProvider::new(records))
800 }
801
802 pub async fn create(
804 &self,
805 name: impl IntoFqdn<'_>,
806 record: DnsRecord,
807 ttl: u32,
808 origin: impl IntoFqdn<'_>,
809 ) -> crate::Result<()> {
810 match self {
811 DnsUpdater::Alidns(provider) => provider.create(name, record, ttl, origin).await,
812 DnsUpdater::AzureDns(provider) => provider.create(name, record, ttl, origin).await,
813 DnsUpdater::Bunny(provider) => provider.create(name, record, ttl, origin).await,
814 DnsUpdater::Cloudflare(provider) => provider.create(name, record, ttl, origin).await,
815 DnsUpdater::Ddnss(provider) => provider.create(name, record, ttl, origin).await,
816 DnsUpdater::Desec(provider) => provider.create(name, record, ttl, origin).await,
817 DnsUpdater::DigitalOcean(provider) => provider.create(name, record, ttl, origin).await,
818 DnsUpdater::DNSimple(provider) => provider.create(name, record, ttl, origin).await,
819 DnsUpdater::GandiV5(provider) => provider.create(name, record, ttl, origin).await,
820 DnsUpdater::Gcore(provider) => provider.create(name, record, ttl, origin).await,
821 DnsUpdater::Godaddy(provider) => provider.create(name, record, ttl, origin).await,
822 DnsUpdater::Hetzner(provider) => provider.create(name, record, ttl, origin).await,
823 DnsUpdater::Linode(provider) => provider.create(name, record, ttl, origin).await,
824 DnsUpdater::NameDotCom(provider) => provider.create(name, record, ttl, origin).await,
825 DnsUpdater::NameSilo(provider) => provider.create(name, record, ttl, origin).await,
826 DnsUpdater::DuckDns(provider) => provider.create(name, record, ttl, origin).await,
827 DnsUpdater::Dynu(provider) => provider.create(name, record, ttl, origin).await,
828 DnsUpdater::FreeMyIp(provider) => provider.create(name, record, ttl, origin).await,
829 DnsUpdater::Ipv64(provider) => provider.create(name, record, ttl, origin).await,
830 DnsUpdater::Constellix(provider) => provider.create(name, record, ttl, origin).await,
831 DnsUpdater::DnsMadeEasy(provider) => provider.create(name, record, ttl, origin).await,
832 DnsUpdater::Exoscale(provider) => provider.create(name, record, ttl, origin).await,
833 DnsUpdater::Nifcloud(provider) => provider.create(name, record, ttl, origin).await,
834 DnsUpdater::IbmCloud(provider) => provider.create(name, record, ttl, origin).await,
835 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
836 DnsUpdater::Ovh(provider) => provider.create(name, record, ttl, origin).await,
837 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
838 DnsUpdater::OracleCloud(provider) => provider.create(name, record, ttl, origin).await,
839 DnsUpdater::Porkbun(provider) => provider.create(name, record, ttl, origin).await,
840 DnsUpdater::Rfc2136(provider) => provider.create(name, record, ttl, origin).await,
841 DnsUpdater::Route53(provider) => provider.create(name, record, ttl, origin).await,
842 DnsUpdater::Scaleway(provider) => provider.create(name, record, ttl, origin).await,
843 DnsUpdater::Spaceship(provider) => provider.create(name, record, ttl, origin).await,
844 DnsUpdater::Vercel(provider) => provider.create(name, record, ttl, origin).await,
845 DnsUpdater::Vultr(provider) => provider.create(name, record, ttl, origin).await,
846 DnsUpdater::WebSupport(provider) => provider.create(name, record, ttl, origin).await,
847 DnsUpdater::TencentCloud(provider) => provider.create(name, record, ttl, origin).await,
848 DnsUpdater::Plesk(provider) => provider.create(name, record, ttl, origin).await,
849 DnsUpdater::Cpanel(provider) => provider.create(name, record, ttl, origin).await,
850 DnsUpdater::GoogleCloudDns(provider) => {
851 provider.create(name, record, ttl, origin).await
852 }
853 DnsUpdater::Ionos(provider) => provider.create(name, record, ttl, origin).await,
854 DnsUpdater::HostingDe(provider) => provider.create(name, record, ttl, origin).await,
855 DnsUpdater::Infomaniak(provider) => provider.create(name, record, ttl, origin).await,
856 DnsUpdater::Netcup(provider) => provider.create(name, record, ttl, origin).await,
857 DnsUpdater::Netlify(provider) => provider.create(name, record, ttl, origin).await,
858 DnsUpdater::EasyDns(provider) => provider.create(name, record, ttl, origin).await,
859 DnsUpdater::Joker(provider) => provider.create(name, record, ttl, origin).await,
860 DnsUpdater::MythicBeasts(provider) => provider.create(name, record, ttl, origin).await,
861 DnsUpdater::Namecheap(provider) => provider.create(name, record, ttl, origin).await,
862 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
863 DnsUpdater::Transip(provider) => provider.create(name, record, ttl, origin).await,
864 DnsUpdater::HuaweiCloud(provider) => provider.create(name, record, ttl, origin).await,
865 DnsUpdater::BaiduCloud(provider) => provider.create(name, record, ttl, origin).await,
866 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
867 DnsUpdater::Volcengine(provider) => provider.create(name, record, ttl, origin).await,
868 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
869 DnsUpdater::YandexCloud(provider) => provider.create(name, record, ttl, origin).await,
870 DnsUpdater::Hurricane(provider) => provider.create(name, record, ttl, origin).await,
871 DnsUpdater::Hostinger(provider) => provider.create(name, record, ttl, origin).await,
872 DnsUpdater::Autodns(provider) => provider.create(name, record, ttl, origin).await,
873 DnsUpdater::Lightsail(provider) => provider.create(name, record, ttl, origin).await,
874 DnsUpdater::EdgeDns(provider) => provider.create(name, record, ttl, origin).await,
875 DnsUpdater::Inwx(provider) => provider.create(name, record, ttl, origin).await,
876 DnsUpdater::UltraDns(provider) => provider.create(name, record, ttl, origin).await,
877 DnsUpdater::Infoblox(provider) => provider.create(name, record, ttl, origin).await,
878 #[cfg(feature = "test_provider")]
879 DnsUpdater::Pebble(provider) => provider.create(name, record, ttl, origin).await,
880 #[cfg(feature = "test_provider")]
881 DnsUpdater::InMemory(provider) => provider.create(name, record, ttl, origin).await,
882 DnsUpdater::BluecatV2(provider) => provider.create(name, record, ttl, origin).await,
883 DnsUpdater::Ns1(provider) => provider.create(name, record, ttl, origin).await,
884 DnsUpdater::LuaDns(provider) => provider.create(name, record, ttl, origin).await,
885 DnsUpdater::ClouDns(provider) => provider.create(name, record, ttl, origin).await,
886 DnsUpdater::Glesys(provider) => provider.create(name, record, ttl, origin).await,
887 DnsUpdater::Dreamhost(provider) => provider.create(name, record, ttl, origin).await,
888 DnsUpdater::Domeneshop(provider) => provider.create(name, record, ttl, origin).await,
889 DnsUpdater::Safedns(provider) => provider.create(name, record, ttl, origin).await,
890 DnsUpdater::ArvanCloud(provider) => provider.create(name, record, ttl, origin).await,
891 }
892 }
893
894 pub async fn update(
896 &self,
897 name: impl IntoFqdn<'_>,
898 record: DnsRecord,
899 ttl: u32,
900 origin: impl IntoFqdn<'_>,
901 ) -> crate::Result<()> {
902 match self {
903 DnsUpdater::Alidns(provider) => provider.update(name, record, ttl, origin).await,
904 DnsUpdater::AzureDns(provider) => provider.update(name, record, ttl, origin).await,
905 DnsUpdater::Bunny(provider) => provider.update(name, record, ttl, origin).await,
906 DnsUpdater::Cloudflare(provider) => provider.update(name, record, ttl, origin).await,
907 DnsUpdater::Ddnss(provider) => provider.update(name, record, ttl, origin).await,
908 DnsUpdater::Desec(provider) => provider.update(name, record, ttl, origin).await,
909 DnsUpdater::DigitalOcean(provider) => provider.update(name, record, ttl, origin).await,
910 DnsUpdater::DNSimple(provider) => provider.update(name, record, ttl, origin).await,
911 DnsUpdater::GandiV5(provider) => provider.update(name, record, ttl, origin).await,
912 DnsUpdater::Gcore(provider) => provider.update(name, record, ttl, origin).await,
913 DnsUpdater::Godaddy(provider) => provider.update(name, record, ttl, origin).await,
914 DnsUpdater::Hetzner(provider) => provider.update(name, record, ttl, origin).await,
915 DnsUpdater::Linode(provider) => provider.update(name, record, ttl, origin).await,
916 DnsUpdater::NameDotCom(provider) => provider.update(name, record, ttl, origin).await,
917 DnsUpdater::NameSilo(provider) => provider.update(name, record, ttl, origin).await,
918 DnsUpdater::DuckDns(provider) => provider.update(name, record, ttl, origin).await,
919 DnsUpdater::Dynu(provider) => provider.update(name, record, ttl, origin).await,
920 DnsUpdater::FreeMyIp(provider) => provider.update(name, record, ttl, origin).await,
921 DnsUpdater::Ipv64(provider) => provider.update(name, record, ttl, origin).await,
922 DnsUpdater::Constellix(provider) => provider.update(name, record, ttl, origin).await,
923 DnsUpdater::DnsMadeEasy(provider) => provider.update(name, record, ttl, origin).await,
924 DnsUpdater::Exoscale(provider) => provider.update(name, record, ttl, origin).await,
925 DnsUpdater::Nifcloud(provider) => provider.update(name, record, ttl, origin).await,
926 DnsUpdater::IbmCloud(provider) => provider.update(name, record, ttl, origin).await,
927 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
928 DnsUpdater::Ovh(provider) => provider.update(name, record, ttl, origin).await,
929 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
930 DnsUpdater::OracleCloud(provider) => provider.update(name, record, ttl, origin).await,
931 DnsUpdater::Porkbun(provider) => provider.update(name, record, ttl, origin).await,
932 DnsUpdater::Rfc2136(provider) => provider.update(name, record, ttl, origin).await,
933 DnsUpdater::Route53(provider) => provider.update(name, record, ttl, origin).await,
934 DnsUpdater::Scaleway(provider) => provider.update(name, record, ttl, origin).await,
935 DnsUpdater::Spaceship(provider) => provider.update(name, record, ttl, origin).await,
936 DnsUpdater::Vercel(provider) => provider.update(name, record, ttl, origin).await,
937 DnsUpdater::Vultr(provider) => provider.update(name, record, ttl, origin).await,
938 DnsUpdater::WebSupport(provider) => provider.update(name, record, ttl, origin).await,
939 DnsUpdater::TencentCloud(provider) => provider.update(name, record, ttl, origin).await,
940 DnsUpdater::Plesk(provider) => provider.update(name, record, ttl, origin).await,
941 DnsUpdater::Cpanel(provider) => provider.update(name, record, ttl, origin).await,
942 DnsUpdater::GoogleCloudDns(provider) => {
943 provider.update(name, record, ttl, origin).await
944 }
945 DnsUpdater::Ionos(provider) => provider.update(name, record, ttl, origin).await,
946 DnsUpdater::HostingDe(provider) => provider.update(name, record, ttl, origin).await,
947 DnsUpdater::Infomaniak(provider) => provider.update(name, record, ttl, origin).await,
948 DnsUpdater::Netcup(provider) => provider.update(name, record, ttl, origin).await,
949 DnsUpdater::Netlify(provider) => provider.update(name, record, ttl, origin).await,
950 DnsUpdater::EasyDns(provider) => provider.update(name, record, ttl, origin).await,
951 DnsUpdater::Joker(provider) => provider.update(name, record, ttl, origin).await,
952 DnsUpdater::MythicBeasts(provider) => provider.update(name, record, ttl, origin).await,
953 DnsUpdater::Namecheap(provider) => provider.update(name, record, ttl, origin).await,
954 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
955 DnsUpdater::Transip(provider) => provider.update(name, record, ttl, origin).await,
956 DnsUpdater::HuaweiCloud(provider) => provider.update(name, record, ttl, origin).await,
957 DnsUpdater::BaiduCloud(provider) => provider.update(name, record, ttl, origin).await,
958 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
959 DnsUpdater::Volcengine(provider) => provider.update(name, record, ttl, origin).await,
960 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
961 DnsUpdater::YandexCloud(provider) => provider.update(name, record, ttl, origin).await,
962 DnsUpdater::Hurricane(provider) => provider.update(name, record, ttl, origin).await,
963 DnsUpdater::Hostinger(provider) => provider.update(name, record, ttl, origin).await,
964 DnsUpdater::Autodns(provider) => provider.update(name, record, ttl, origin).await,
965 DnsUpdater::Lightsail(provider) => provider.update(name, record, ttl, origin).await,
966 DnsUpdater::EdgeDns(provider) => provider.update(name, record, ttl, origin).await,
967 DnsUpdater::Inwx(provider) => provider.update(name, record, ttl, origin).await,
968 DnsUpdater::UltraDns(provider) => provider.update(name, record, ttl, origin).await,
969 DnsUpdater::Infoblox(provider) => provider.update(name, record, ttl, origin).await,
970 #[cfg(feature = "test_provider")]
971 DnsUpdater::Pebble(provider) => provider.update(name, record, ttl, origin).await,
972 #[cfg(feature = "test_provider")]
973 DnsUpdater::InMemory(provider) => provider.update(name, record, ttl, origin).await,
974 DnsUpdater::BluecatV2(provider) => provider.update(name, record, ttl, origin).await,
975 DnsUpdater::Ns1(provider) => provider.update(name, record, ttl, origin).await,
976 DnsUpdater::LuaDns(provider) => provider.update(name, record, ttl, origin).await,
977 DnsUpdater::ClouDns(provider) => provider.update(name, record, ttl, origin).await,
978 DnsUpdater::Glesys(provider) => provider.update(name, record, ttl, origin).await,
979 DnsUpdater::Dreamhost(provider) => provider.update(name, record, ttl, origin).await,
980 DnsUpdater::Domeneshop(provider) => provider.update(name, record, ttl, origin).await,
981 DnsUpdater::Safedns(provider) => provider.update(name, record, ttl, origin).await,
982 DnsUpdater::ArvanCloud(provider) => provider.update(name, record, ttl, origin).await,
983 }
984 }
985
986 pub async fn delete(
988 &self,
989 name: impl IntoFqdn<'_>,
990 origin: impl IntoFqdn<'_>,
991 record: DnsRecordType,
992 ) -> crate::Result<()> {
993 match self {
994 DnsUpdater::Alidns(provider) => provider.delete(name, origin, record).await,
995 DnsUpdater::AzureDns(provider) => provider.delete(name, origin, record).await,
996 DnsUpdater::Bunny(provider) => provider.delete(name, origin, record).await,
997 DnsUpdater::Cloudflare(provider) => provider.delete(name, origin, record).await,
998 DnsUpdater::Ddnss(provider) => provider.delete(name, origin, record).await,
999 DnsUpdater::Desec(provider) => provider.delete(name, origin, record).await,
1000 DnsUpdater::DigitalOcean(provider) => provider.delete(name, origin, record).await,
1001 DnsUpdater::DNSimple(provider) => provider.delete(name, origin, record).await,
1002 DnsUpdater::GandiV5(provider) => provider.delete(name, origin, record).await,
1003 DnsUpdater::Gcore(provider) => provider.delete(name, origin, record).await,
1004 DnsUpdater::Godaddy(provider) => provider.delete(name, origin, record).await,
1005 DnsUpdater::Hetzner(provider) => provider.delete(name, origin, record).await,
1006 DnsUpdater::Linode(provider) => provider.delete(name, origin, record).await,
1007 DnsUpdater::NameDotCom(provider) => provider.delete(name, origin, record).await,
1008 DnsUpdater::NameSilo(provider) => provider.delete(name, origin, record).await,
1009 DnsUpdater::DuckDns(provider) => provider.delete(name, origin, record).await,
1010 DnsUpdater::Dynu(provider) => provider.delete(name, origin, record).await,
1011 DnsUpdater::FreeMyIp(provider) => provider.delete(name, origin, record).await,
1012 DnsUpdater::Ipv64(provider) => provider.delete(name, origin, record).await,
1013 DnsUpdater::Constellix(provider) => provider.delete(name, origin, record).await,
1014 DnsUpdater::DnsMadeEasy(provider) => provider.delete(name, origin, record).await,
1015 DnsUpdater::Exoscale(provider) => provider.delete(name, origin, record).await,
1016 DnsUpdater::Nifcloud(provider) => provider.delete(name, origin, record).await,
1017 DnsUpdater::IbmCloud(provider) => provider.delete(name, origin, record).await,
1018 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
1019 DnsUpdater::Ovh(provider) => provider.delete(name, origin, record).await,
1020 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
1021 DnsUpdater::OracleCloud(provider) => provider.delete(name, origin, record).await,
1022 DnsUpdater::Porkbun(provider) => provider.delete(name, origin, record).await,
1023 DnsUpdater::Rfc2136(provider) => provider.delete(name, origin, record).await,
1024 DnsUpdater::Route53(provider) => provider.delete(name, origin, record).await,
1025 DnsUpdater::Scaleway(provider) => provider.delete(name, origin, record).await,
1026 DnsUpdater::Spaceship(provider) => provider.delete(name, origin, record).await,
1027 DnsUpdater::Vercel(provider) => provider.delete(name, origin, record).await,
1028 DnsUpdater::Vultr(provider) => provider.delete(name, origin, record).await,
1029 DnsUpdater::WebSupport(provider) => provider.delete(name, origin, record).await,
1030 DnsUpdater::TencentCloud(provider) => provider.delete(name, origin, record).await,
1031 DnsUpdater::Plesk(provider) => provider.delete(name, origin, record).await,
1032 DnsUpdater::Cpanel(provider) => provider.delete(name, origin, record).await,
1033 DnsUpdater::GoogleCloudDns(provider) => provider.delete(name, origin, record).await,
1034 DnsUpdater::Ionos(provider) => provider.delete(name, origin, record).await,
1035 DnsUpdater::HostingDe(provider) => provider.delete(name, origin, record).await,
1036 DnsUpdater::Infomaniak(provider) => provider.delete(name, origin, record).await,
1037 DnsUpdater::Netcup(provider) => provider.delete(name, origin, record).await,
1038 DnsUpdater::Netlify(provider) => provider.delete(name, origin, record).await,
1039 DnsUpdater::EasyDns(provider) => provider.delete(name, origin, record).await,
1040 DnsUpdater::Joker(provider) => provider.delete(name, origin, record).await,
1041 DnsUpdater::MythicBeasts(provider) => provider.delete(name, origin, record).await,
1042 DnsUpdater::Namecheap(provider) => provider.delete(name, origin, record).await,
1043 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
1044 DnsUpdater::Transip(provider) => provider.delete(name, origin, record).await,
1045 DnsUpdater::HuaweiCloud(provider) => provider.delete(name, origin, record).await,
1046 DnsUpdater::BaiduCloud(provider) => provider.delete(name, origin, record).await,
1047 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
1048 DnsUpdater::Volcengine(provider) => provider.delete(name, origin, record).await,
1049 #[cfg(any(feature = "ring", feature = "aws-lc-rs"))]
1050 DnsUpdater::YandexCloud(provider) => provider.delete(name, origin, record).await,
1051 DnsUpdater::Hurricane(provider) => provider.delete(name, origin, record).await,
1052 DnsUpdater::Hostinger(provider) => provider.delete(name, origin, record).await,
1053 DnsUpdater::Autodns(provider) => provider.delete(name, origin, record).await,
1054 DnsUpdater::Lightsail(provider) => provider.delete(name, origin, record).await,
1055 DnsUpdater::EdgeDns(provider) => provider.delete(name, origin, record).await,
1056 DnsUpdater::Inwx(provider) => provider.delete(name, origin, record).await,
1057 DnsUpdater::UltraDns(provider) => provider.delete(name, origin, record).await,
1058 DnsUpdater::Infoblox(provider) => provider.delete(name, origin, record).await,
1059 #[cfg(feature = "test_provider")]
1060 DnsUpdater::Pebble(provider) => provider.delete(name, origin, record).await,
1061 #[cfg(feature = "test_provider")]
1062 DnsUpdater::InMemory(provider) => provider.delete(name, origin, record).await,
1063 DnsUpdater::BluecatV2(provider) => provider.delete(name, origin, record).await,
1064 DnsUpdater::Ns1(provider) => provider.delete(name, origin, record).await,
1065 DnsUpdater::LuaDns(provider) => provider.delete(name, origin, record).await,
1066 DnsUpdater::ClouDns(provider) => provider.delete(name, origin, record).await,
1067 DnsUpdater::Glesys(provider) => provider.delete(name, origin, record).await,
1068 DnsUpdater::Dreamhost(provider) => provider.delete(name, origin, record).await,
1069 DnsUpdater::Domeneshop(provider) => provider.delete(name, origin, record).await,
1070 DnsUpdater::Safedns(provider) => provider.delete(name, origin, record).await,
1071 DnsUpdater::ArvanCloud(provider) => provider.delete(name, origin, record).await,
1072 }
1073 }
1074}