// Deterministic semantic serializer.
///|
fn write_record(sb : StringBuilder, name : String, value : String) -> Unit {
sb.write_string(name)
sb.write_string(": ")
sb.write_string(value)
sb.write_char('\n')
}
///|
pub fn serialize_robots(file : RobotsFile) -> String {
let sb = StringBuilder::new()
for index, group in file.groups() {
if index > 0 {
sb.write_char('\n')
}
for agent in group.user_agents() {
write_record(sb, "User-agent", agent)
}
for rule in group.rules() {
write_record(sb, rule.kind().directive_name(), rule.pattern())
}
}
if file.other_records().length() > 0 {
if file.groups().length() > 0 {
sb.write_char('\n')
}
for record in file.other_records() {
write_record(sb, record.canonical_name(), record.value())
}
}
sb.to_string()
}
///|
pub fn stats_to_text(file : RobotsFile) -> String {
let s = file.stats()
let sb = StringBuilder::new()
sb.write_string("groups: \{s.groups()}\n")
sb.write_string("user_agents: \{s.user_agents()}\n")
sb.write_string("rules: \{s.rules()}\n")
sb.write_string("allows: \{s.allows()}\n")
sb.write_string("disallows: \{s.disallows()}\n")
sb.write_string("other_records: \{s.other_records()}\n")
sb.write_string("comments: \{s.comments()}\n")
sb.write_string("blank_lines: \{s.blank_lines()}\n")
sb.write_string("source_lines: \{s.source_lines()}\n")
sb.to_string()
}