use std::fmt;
use crate::parse::application::protocols::dns::utils::{dns_class::DnsClass, dns_types::DnsType};
#[derive(Debug)]
pub struct Answer {
name: String, answer_type: DnsType, answer_class: DnsClass, ttl: u32, data_length: u16, address: Vec<u8>, }
impl fmt::Display for Answer {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"Answer {{ name: {}, answer_type: {}, answer_class: {}, ttl: {}, data_length: {}, address: {:?} }}",
self.name,
self.answer_type,
self.answer_class,
self.ttl,
self.data_length,
self.address
)
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::parse::application::protocols::dns::utils::{
dns_class::DnsClasses, dns_types::DnsTypes,
};
#[test]
fn test_display() {
let record = Answer {
name: "example.com".to_string(),
answer_type: DnsTypes::A,
answer_class: DnsClasses::IN,
ttl: 300,
data_length: 4,
address: vec![93, 184, 216, 34],
};
let rendered = record.to_string();
assert!(rendered.starts_with("Answer {"));
assert!(rendered.contains("name: example.com"));
assert!(rendered.contains("answer_type: A"));
assert!(rendered.contains("answer_class: IN"));
assert!(rendered.contains("ttl: 300"));
assert!(rendered.contains("data_length: 4"));
assert!(rendered.contains("address: [93, 184, 216, 34]"));
}
}