dns_types/hosts/
serialise.rs1use std::collections::HashSet;
2use std::fmt::Write as _;
3
4use crate::hosts::types::*;
5use crate::protocol::types::*;
6
7impl Hosts {
8 pub fn serialise(&self) -> String {
9 let mut out = String::new();
10
11 let sorted_domains = {
12 let mut set = HashSet::new();
13 for name in self.v4.keys() {
14 set.insert(name);
15 }
16 for name in self.v6.keys() {
17 set.insert(name);
18 }
19 let mut vec = set.into_iter().collect::<Vec<&DomainName>>();
20 vec.sort();
21 vec
22 };
23
24 for domain in sorted_domains {
25 let domain_str = if domain.is_root() {
26 ".".to_string()
27 } else {
28 let mut name_without_dot = domain.to_dotted_string();
29 name_without_dot.pop();
30 name_without_dot
31 };
32
33 if let Some(addr) = self.v4.get(domain) {
34 _ = writeln!(&mut out, "{addr} {domain_str}");
35 }
36 if let Some(addr) = self.v6.get(domain) {
37 _ = writeln!(&mut out, "{addr} {domain_str}");
38 }
39 out.push('\n');
40 }
41
42 out
43 }
44}