#![allow(dead_code)]
use forbidden_regex::RegexSet;
use std::{env, fs, path::Path};
#[path = "src/rule/frx/error.rs"]
mod error;
#[path = "src/rule/frx/escape.rs"]
mod escape;
#[path = "src/rule/frx/format.rs"]
mod format;
#[path = "src/rule/frx/sections.rs"]
mod sections;
fn main() {
println!("cargo:rerun-if-changed=data/builtin-rules.txt");
println!("cargo:rerun-if-changed=src/rule/frx/format.rs");
println!("cargo:rerun-if-changed=src/rule/frx/sections.rs");
println!("cargo:rerun-if-changed=src/rule/frx/escape.rs");
println!("cargo:rerun-if-changed=src/rule/frx/error.rs");
let manifest_dir =
env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR set by cargo");
let out_dir = env::var("OUT_DIR").expect("OUT_DIR set by cargo");
let ported_path = Path::new(&manifest_dir).join("data/builtin-rules.txt");
let ported = fs::read_to_string(&ported_path)
.unwrap_or_else(|error| panic!("read {}: {error}", ported_path.display()));
let rules = format::parse_rules(&ported)
.unwrap_or_else(|error| panic!("parse builtin baseline: {error}"));
let patterns: Vec<String> =
rules.iter().map(|rule| return rule.pattern.clone()).collect();
let set = RegexSet::new(&patterns)
.unwrap_or_else(|error| panic!("compile builtin baseline: {error}"));
let bytes = set
.to_bytes()
.unwrap_or_else(|error| panic!("serialize builtin baseline: {error}"));
let out_path = Path::new(&out_dir).join("builtin-rules-precompiled.bin");
fs::write(&out_path, bytes)
.unwrap_or_else(|error| panic!("write {}: {error}", out_path.display()));
let names_text: String = rules
.iter()
.map(|rule| return format!("{}\n", rule.name.as_deref().unwrap_or_default()))
.collect();
let names_path = Path::new(&out_dir).join("builtin-rules-names.txt");
fs::write(&names_path, names_text)
.unwrap_or_else(|error| panic!("write {}: {error}", names_path.display()));
}