resolv 0.2.0

DNS resolution via glibc
Documentation

use super::{RecordData, RecordType};
use crate::error::Error;
use libresolv_sys::__ns_rr as Rr;
use libresolv_sys::__ns_msg as Message;

#[derive(Debug, Clone)]
pub struct TXT {
    pub dname: String,
}

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

    fn extract(_msg: &mut Message, rr: &Rr) -> Result<TXT, Error> {
        if rr.type_ != Self::get_record_type() as u16 { return Err(Error::WrongRRType); }

        let slice: &[u8] = unsafe {
            ::std::slice::from_raw_parts(rr.rdata.offset(1), *rr.rdata as usize)
        };

        Ok(TXT {
            dname: String::from_utf8_lossy(slice).into_owned()
        })
    }
}