Docs / SDK / Rust / DNS
Rust — módulo DNS
Struct webability_rust::dns::Dns. Envuelve la API de DNS (/v1/dns/*): zonas y registros, con structs tipados (serde) para cada respuesta.
Instalar y crear el objeto
[dependencies] webability-rust = "0.1"
use webability_rust::WaApi;
use webability_rust::dns::{Dns, RecordInput, RecordUpdate};
let api = WaApi::new("tu-client-id", "tu-token-secreto");
let dns = Dns::new(&api);
list_zones(&self) -> Result<ListZonesResult, WaError>
GET /v1/dns/zone — lista las zonas (dominios) del cliente.
let zones = dns.list_zones()?;
for zone in &zones.zones {
println!("{} {} {}", zone.key, zone.name, zone.primaryns);
}
println!("total: {}", zones.count);
Devuelve ListZonesResult { status, zones: Vec<Zone>, count }.
get_zone(&self, key_or_domain: &str) -> Result<GetZoneResult, WaError>
GET /v1/dns/zone/{key|domain} — detalle de una zona y sus registros. Acepta la clave numérica o el nombre de dominio.
let zone = dns.get_zone("midominio.com")?; // o dns.get_zone("42")
println!("{} {}", zone.zone.name, zone.zone.status);
for rec in &zone.records {
println!("{} {} {}", rec.name, rec.rrtypename, rec.data);
}
println!("nameservers: {:?}", zone.ns);
Devuelve GetZoneResult { status, zone: Zone, records: Vec<Record>, ns: Vec<String> }.
add_zone(&self, name: &str) -> Result<AddZoneResult, WaError>
POST /v1/dns/zone — crea una nueva zona (dominio). Los NS de la cuenta se agregan automáticamente.
let added = dns.add_zone("midominio.com")?;
println!("zona creada: {} {}", added.key, added.name);
Devuelve AddZoneResult { status, key, name }.
add_record(&self, zone_key: i64, record: &RecordInput) -> Result<AddRecordResult, WaError>
POST /v1/dns/zone/{key}/record — agrega un registro a una zona.
let rec = dns.add_record(added.key, &RecordInput {
name: "@".into(),
rrtype: "A".into(),
ttl: 1800,
data: "203.0.113.10".into(),
..Default::default()
})?;
println!("registro creado: {} en zona {}", rec.key, rec.zone);
RecordInput también tiene priority, weight, port y tag (Option, para MX, SRV, CAA, etc.).
update_record(&self, record_key: i64, fields: &RecordUpdate) -> Result<KeyResult, WaError>
PUT /v1/dns/record/{key} — modifica un registro existente. RecordUpdate usa Option: solo los campos Some(..) se envían y se actualizan.
dns.update_record(rec.key, &RecordUpdate {
ttl: Some(3600),
data: Some("203.0.113.20".into()),
..Default::default()
})?;
delete_record(&self, record_key: i64) -> Result<KeyResult, WaError>
DELETE /v1/dns/record/{key} — elimina un registro.
dns.delete_record(rec.key)?;
delete_zone(&self, zone_key: i64) -> Result<DeleteZoneResult, WaError>
DELETE /v1/dns/zone/{key} — elimina una zona y todos sus registros.
dns.delete_zone(added.key)?;
Referencia completa de la API HTTP (headers, códigos de error, formato de respuesta): /documentacion/dns.