///|
pub fn robots_from_group(group : Group) -> Robots {
{ groups: [group], sitemaps: [], hosts: [] }
}
///|
pub fn robots_with_metadata(
groups : Array[Group],
sitemaps : Array[String],
hosts : Array[String],
) -> Robots {
{ groups, sitemaps, hosts }
}
///|
pub fn group_for_agents(agents : Array[String]) -> Group {
let normalized : Array[String] = []
for agent in agents {
normalized.push(normalize_agent(agent))
}
{ agents: normalized, rules: [], crawl_delay: None }
}
///|
pub fn group_add_allow(group : Group, pattern : String) -> Group {
let rules : Array[Rule] = []
for rule in group.rules {
rules.push(rule)
}
rules.push(allow_rule(normalize_path(pattern)))
{ agents: group.agents, rules, crawl_delay: group.crawl_delay }
}
///|
pub fn group_add_disallow(group : Group, pattern : String) -> Group {
let rules : Array[Rule] = []
for rule in group.rules {
rules.push(rule)
}
rules.push(disallow_rule(normalize_path(pattern)))
{ agents: group.agents, rules, crawl_delay: group.crawl_delay }
}
///|
pub fn group_set_delay(group : Group, delay : Int) -> Group {
{ agents: group.agents, rules: group.rules, crawl_delay: Some(delay) }
}
///|
pub fn allow_all(agent : String) -> Robots {
robots_from_group(group_for_agents([agent]))
}
///|
pub fn block_all(agent : String) -> Robots {
robots_from_group(group_add_disallow(group_for_agents([agent]), "/"))
}
///|
pub fn block_paths(agent : String, paths : Array[String]) -> Robots {
let mut group = group_for_agents([agent])
for path in paths {
group = group_add_disallow(group, path)
}
robots_from_group(group)
}
///|
pub fn allow_public_private(
private_prefix : String,
public_prefix : String,
) -> Robots {
let group = group_add_allow(
group_add_disallow(group_for_agents(["*"]), private_prefix),
public_prefix,
)
robots_from_group(group)
}