dns_types/hosts/
serialise.rs

1use 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}