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.