resolv 0.4.0

DNS resolution via glibc
Documentation
use super::{RecordData, RecordType};
use crate::error::Error;
use libresolv_sys::ns_msg as Message;
use libresolv_sys::ns_rr as Rr;

use std::mem;
use std::net::Ipv4Addr;

#[derive(Debug, Clone)]
pub struct A {
    pub address: Ipv4Addr,
}

impl RecordData for A {
    fn get_record_type() -> RecordType {
        RecordType::A
    }

    fn extract(_msg: &mut Message, rr: &Rr) -> Result<A, Error> {
        if rr.type_ != Self::get_record_type() as u16 {
            return Err(Error::WrongRRType);
        }
        Ok(A {
            address: Ipv4Addr::from(unsafe {
                let input: &[u8; 4] = mem::transmute(rr.rdata);
                *input
            }),
        })
    }
}