use namecheap_client::{Client, EmailType, Environment, HostRecord, SetHostsRequest};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::builder()
.api_user(std::env::var("NAMECHEAP_API_USER")?)
.api_key(std::env::var("NAMECHEAP_API_KEY")?)
.client_ip(std::env::var("NAMECHEAP_CLIENT_IP")?)
.environment(Environment::Sandbox)
.build()?;
let records = vec![
HostRecord::a("@", "203.0.113.10"),
HostRecord::cname("www", "example.com."),
HostRecord::mx("@", "aspmx.l.google.com", 1),
HostRecord::mx("@", "alt1.aspmx.l.google.com", 5),
HostRecord::txt("@", "v=spf1 include:_spf.google.com ~all"),
HostRecord::txt("google._domainkey", "v=DKIM1; k=rsa; p=MIGfMA0GCSq..."),
HostRecord::txt(
"_dmarc",
"v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com",
),
];
let request = SetHostsRequest::from_domain("example.com", records)
.expect("domain must contain a second-level and top-level part")
.with_email_type(EmailType::Mx);
let result = client.domains().dns().set_hosts(&request).await?;
println!("Updated {}: success = {}", result.domain, result.is_success);
Ok(())
}