impl<'a> Iterator for RecordIter<'a> { type Item = &'a [u8]; fn next(&mutself) -> Option<&'a [u8]> { ifself.bytes.len() >= 1 { let len = self.bytes[0] as usize;
debug_assert!(self.bytes.len() >= len+1); let (head, tail) = self.bytes[1..].split_at(len); self.bytes = tail; return Some(head);
} return None;
}
}
impl<'a> Record<'a> {
// Returns iterator over text chunks pubfn iter(&self) -> RecordIter<'a> {
RecordIter {
bytes: self.bytes,
}
}
}
impl<'a> super::Record<'a> for Record<'a> {
constTYPE: isize = 16;
fn parse(rdata: &'a [u8], _original: &'a [u8]) -> super::RDataResult<'a> { // Just a quick check that record is valid let len = rdata.len(); if len < 1 { return Err(Error::WrongRdataLength);
} letmut pos = 0; while pos < len { let rdlen = rdata[pos] as usize;
pos += 1; if len < rdlen + pos { return Err(Error::WrongRdataLength);
}
pos += rdlen;
}
Ok(super::RData::TXT(Record {
bytes: rdata,
}))
}
}
#[cfg(test)] mod test {
use std::str::from_utf8;
use {Packet, Header}; use Opcode::*; use ResponseCode::NoError; use QueryType as QT; use QueryClass as QC; use Class as C; use RData;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.